import {memo} from 'react' import {useWindowDimensions, View} from 'react-native' import Animated, { interpolateColor, type SharedValue, useAnimatedStyle, } from 'react-native-reanimated' import {type $Typed} from '@atproto/lex' import {chat} from '#/lexicons' import {useConvoActive} from '#/state/messages/convo' import {isKnownJoinLinkPreview} from '#/state/queries/join-links' import {atoms as a, native, useTheme, web} from '#/alf' import * as ChatInvite from '#/components/dms/ChatInvite' import {MessageContextProvider} from './MessageContext' const BORDER_RADIUS = 20 const SQUARED_BORDER_RADIUS = 4 let MessageItemInviteEmbed = ({ embed, isFromSelf, isGroupChat, squaredTopCorner, squaredBottomCorner, highlightSV, }: { embed: $Typed isFromSelf: boolean isGroupChat: boolean squaredTopCorner: boolean squaredBottomCorner: boolean highlightSV: SharedValue }): React.ReactNode => { const t = useTheme() const screen = useWindowDimensions() const convo = useConvoActive() const restingColor = isFromSelf ? t.palette.primary_50 : t.palette.contrast_50 const highlightColor = isFromSelf ? t.palette.primary_300 : t.palette.primary_100 const highlightStyle = useAnimatedStyle(() => ({ backgroundColor: interpolateColor( highlightSV.get(), [0, 1], [restingColor, highlightColor], ), })) const code = isKnownJoinLinkPreview(embed.joinLinkPreview) ? embed.joinLinkPreview.code : undefined if (!code) return null return ( ) } MessageItemInviteEmbed = memo(MessageItemInviteEmbed) export {MessageItemInviteEmbed} function MessageItemInviteEmbedBody() { const {status} = ChatInvite.useChatInvite() if (status === 'loading') { return } if (status !== 'available') { return } return ( <> ) }