import React from 'react' import {StyleProp, View, ViewStyle} from 'react-native' import {cleanError} from '#/lib/strings/errors' import { useResolveGifQuery, useResolveLinkQuery, } from '#/state/queries/resolve-link' import {Gif} from '#/state/queries/tenor' import {ExternalEmbedRemoveBtn} from '#/view/com/composer/ExternalEmbedRemoveBtn' import {ExternalLinkEmbed} from '#/view/com/util/post-embeds/ExternalLinkEmbed' import {atoms as a, useTheme} from '#/alf' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' export const ExternalEmbedGif = ({ onRemove, gif, }: { onRemove: () => void gif: Gif }) => { const t = useTheme() const {data, error} = useResolveGifQuery(gif) const linkInfo = React.useMemo( () => data && { title: data.title ?? data.uri, uri: data.uri, description: data.description ?? '', thumb: data.thumb?.source.path, }, [data], ) const loadingStyle: ViewStyle = { aspectRatio: gif.media_formats.gif.dims[0] / gif.media_formats.gif.dims[1], width: '100%', } return ( {linkInfo ? ( ) : error ? ( {gif.url} {cleanError(error)} ) : ( )} ) } export const ExternalEmbedLink = ({ uri, onRemove, }: { uri: string onRemove: () => void }) => { const t = useTheme() const {data, error} = useResolveLinkQuery(uri) const linkInfo = React.useMemo( () => data && { title: data.type === 'external' ? data.title : data.kind === 'other' ? data.meta.title : uri, uri, description: data.type === 'external' ? data.description : '', thumb: data.type === 'external' ? data.thumb?.source.path : undefined, }, [data, uri], ) return ( {linkInfo ? ( ) : error ? ( {uri} {cleanError(error)} ) : ( )} ) } function Container({ style, children, }: { style?: StyleProp children: React.ReactNode }) { const t = useTheme() return ( {children} ) }