import {useRef, useState} from 'react' import {type StyleProp, View, type ViewStyle} from 'react-native' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {clamp} from '#/lib/numbers' import {type EmbedPlayerParams} from '#/lib/strings/embed-player' import {useAutoplayDisabled} from '#/state/preferences' import {atoms as a, useTheme} from '#/alf' import {Fill} from '#/components/Fill' import {MediaInsetBorder} from '#/components/MediaInsetBorder' import {GifView} from '../../../../../modules/expo-bluesky-gif-view' import {type GifViewStateChangeEvent} from '../../../../../modules/expo-bluesky-gif-view/src/GifView.types' import {GifPresentationControls} from '../VideoEmbed/GifPresentationControls' export function GifEmbed({ params, thumb, altText, isPreferredAltText, hideAlt, style = {width: '100%'}, }: { params: EmbedPlayerParams thumb: string | undefined altText: string isPreferredAltText: boolean hideAlt?: boolean style?: StyleProp }) { const t = useTheme() const {_} = useLingui() const autoplayDisabled = useAutoplayDisabled() const playerRef = useRef(null) const [playerState, setPlayerState] = useState<{ isPlaying: boolean isLoaded: boolean }>({ isPlaying: !autoplayDisabled, isLoaded: false, }) const onPlayerStateChange = (e: GifViewStateChangeEvent) => { setPlayerState(e.nativeEvent) } const onPress = () => { void playerRef.current?.toggleAsync() } let aspectRatio = 1 if (params.dimensions) { const ratio = params.dimensions.width / params.dimensions.height aspectRatio = clamp(ratio, 0.75, 4) } return ( {!playerState.isPlaying && ( )} ) }