import React, {useCallback} from 'react' import {StyleProp, View, ViewStyle} from 'react-native' import {Image} from 'expo-image' import {AppBskyEmbedExternal} from '@atproto/api' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {shareUrl} from 'lib/sharing' import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player' import {toNiceDomain} from 'lib/strings/url-helpers' import {isNative} from 'platform/detection' import {useExternalEmbedsPrefs} from 'state/preferences' import {Link} from 'view/com/util/Link' import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed' import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed' import {GifEmbed} from 'view/com/util/post-embeds/GifEmbed' import {atoms as a, useTheme} from '#/alf' import {Text} from '../text/Text' export const ExternalLinkEmbed = ({ link, onOpen, style, hideAlt, }: { link: AppBskyEmbedExternal.ViewExternal onOpen?: () => void style?: StyleProp hideAlt?: boolean }) => { 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]) if (embedPlayerParams?.source === 'tenor') { return } return ( {link.thumb && !embedPlayerParams ? ( ) : undefined} {embedPlayerParams?.isGif ? ( ) : embedPlayerParams ? ( ) : undefined} {toNiceDomain(link.uri)} {!embedPlayerParams?.isGif && !embedPlayerParams?.dimensions && ( {link.title || link.uri} )} {link.description ? ( {link.description} ) : undefined} ) } function LinkWrapper({ link, onOpen, style, children, }: { link: AppBskyEmbedExternal.ViewExternal onOpen?: () => void style?: StyleProp children: React.ReactNode }) { const t = useTheme() const onShareExternal = useCallback(() => { if (link.uri && isNative) { shareUrl(link.uri) } }, [link.uri]) return ( {children} ) }