import React from 'react' import {Image} from 'expo-image' import {Text} from '../text/Text' import {StyleSheet, View} from 'react-native' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {AppBskyEmbedExternal} from '@atproto/api' import {toNiceDomain} from 'lib/strings/url-helpers' import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player' import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed' import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed' import {useExternalEmbedsPrefs} from 'state/preferences' export const ExternalLinkEmbed = ({ link, }: { link: AppBskyEmbedExternal.ViewExternal }) => { const pal = usePalette('default') const {isMobile} = useWebMediaQueries() const externalEmbedPrefs = useExternalEmbedsPrefs() const embedPlayerParams = React.useMemo(() => { const params = parseEmbedPlayerFromUrl(link.uri) if (params && externalEmbedPrefs?.[params.source] !== 'hide') { return params } }, [link.uri, externalEmbedPrefs]) return ( {link.thumb && !embedPlayerParams ? ( ) : undefined} {(embedPlayerParams?.isGif && ( )) || (embedPlayerParams && ( ))} {toNiceDomain(link.uri)} {!embedPlayerParams?.isGif && ( {link.title || link.uri} )} {link.description && !embedPlayerParams?.hideDetails ? ( {link.description} ) : undefined} ) } const styles = StyleSheet.create({ container: { flexDirection: 'column', borderRadius: 6, overflow: 'hidden', }, info: { width: '100%', bottom: 0, paddingTop: 8, paddingBottom: 10, }, extUri: { marginTop: 2, }, extDescription: { marginTop: 4, }, })