import React from 'react' import {ImageStyle, StyleSheet, StyleProp, View, ViewStyle} from 'react-native' import {AppBskyEmbedImages, AppBskyEmbedExternal} from '@atproto/api' import {Link} from '../util/Link' import {Text} from './text/Text' import {colors} from '../../lib/styles' import {AutoSizedImage} from './images/AutoSizedImage' import {ImagesLightbox} from '../../../state/models/shell-ui' import {useStores} from '../../../state' import {useTheme} from '../../lib/ThemeContext' import {usePalette} from '../../lib/hooks/usePalette' type Embed = | AppBskyEmbedImages.Presented | AppBskyEmbedExternal.Presented | {$type: string; [k: string]: unknown} export function PostEmbeds({ embed, style, }: { embed?: Embed style?: StyleProp }) { const theme = useTheme() const pal = usePalette('default') const store = useStores() if (embed?.$type === 'app.bsky.embed.images#presented') { const imgEmbed = embed as AppBskyEmbedImages.Presented if (imgEmbed.images.length > 0) { const uris = imgEmbed.images.map(img => img.fullsize) const openLightbox = (index: number) => { store.shell.openLightbox(new ImagesLightbox(uris, index)) } const Thumb = ({i, style}: {i: number; style: StyleProp}) => ( openLightbox(i)} /> ) if (imgEmbed.images.length === 4) { return ( ) } else if (imgEmbed.images.length === 3) { return ( ) } else if (imgEmbed.images.length === 2) { return ( ) } else { return ( ) } } } if (embed?.$type === 'app.bsky.embed.external#presented') { const externalEmbed = embed as AppBskyEmbedExternal.Presented const link = externalEmbed.external return ( {link.thumb ? ( ) : undefined} {link.title || link.uri} {link.uri} {link.description ? ( {link.description} ) : undefined} ) } return } const styles = StyleSheet.create({ imagesContainer: { marginBottom: 10, }, imagesWidthSpacer: { width: 5, }, imagesHeightSpacer: { height: 5, }, imagePair: { flexDirection: 'row', }, imagePairItem: { resizeMode: 'contain', flex: 1, borderRadius: 4, }, imageWide: {}, imageWideItem: { resizeMode: 'contain', borderRadius: 4, }, imageBig: {}, imageBigItem: { borderRadius: 4, }, extOuter: { borderRadius: 8, padding: 10, }, extDescription: { marginTop: 4, }, })