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}
)
}