import {ScrollView, View} from 'react-native' import {moderateProfile, type ModerationOpts} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import {type NavigationProp} from '#/lib/routes/types' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' import {logger} from '#/logger' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useListConvosQuery} from '#/state/queries/messages/list-conversations' import {useSession} from '#/state/session' import {UserAvatar} from '#/view/com/util/UserAvatar' import {atoms as a, tokens, useTheme} from '#/alf' import {Button} from '#/components/Button' import {useDialogContext} from '#/components/Dialog' import {Text} from '#/components/Typography' import {useSimpleVerificationState} from '#/components/verification' import {VerificationCheck} from '#/components/verification/VerificationCheck' import type * as bsky from '#/types/bsky' export function RecentChats({postUri}: {postUri: string}) { const control = useDialogContext() const {_} = useLingui() const {currentAccount} = useSession() const {data} = useListConvosQuery({status: 'accepted'}) const convos = data?.pages[0]?.convos?.slice(0, 10) const moderationOpts = useModerationOpts() const navigation = useNavigation() const onSelectChat = (convoId: string) => { control.close(() => { logger.metric('share:press:recentDm', {}, {statsig: true}) navigation.navigate('MessagesConversation', { conversation: convoId, embed: postUri, }) }) } if (!moderationOpts) return null return ( {convos && convos.length > 0 ? ( convos.map(convo => { const otherMember = convo.members.find( member => member.did !== currentAccount?.did, ) if (!otherMember || otherMember.handle === 'missing.invalid') return null return ( onSelectChat(convo.id)} moderationOpts={moderationOpts} /> ) }) ) : ( <> )} {convos && convos.length === 0 && } ) } const WIDTH = 80 function RecentChatItem({ profile, onPress, moderationOpts, }: { profile: bsky.profile.AnyProfileView onPress: () => void moderationOpts: ModerationOpts }) { const {_} = useLingui() const t = useTheme() const moderation = moderateProfile(profile, moderationOpts) const name = sanitizeDisplayName( profile.displayName || sanitizeHandle(profile.handle), moderation.ui('displayName'), ) const verification = useSimpleVerificationState({profile}) return ( ) } function ConvoSkeleton() { const t = useTheme() return ( ) } function NoConvos() { const t = useTheme() return ( Start a conversation, and it will appear here. ) }