import React, {useCallback} from 'react' import {TouchableOpacity, View} from 'react-native' import { AppBskyActorDefs, ModerationCause, ModerationDecision, } from '@atproto/api' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import {BACK_HITSLOP} from 'lib/constants' import {makeProfileLink} from 'lib/routes/links' import {NavigationProp} from 'lib/routes/types' import {sanitizeDisplayName} from 'lib/strings/display-names' import {isWeb} from 'platform/detection' import {useProfileShadow} from 'state/cache/profile-shadow' import {isConvoActive, useConvo} from 'state/messages/convo' import {PreviewableUserAvatar} from 'view/com/util/UserAvatar' import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' import {ConvoMenu} from '#/components/dms/ConvoMenu' import {Bell2Off_Filled_Corner0_Rounded as BellStroke} from '#/components/icons/Bell2' import {Link} from '#/components/Link' import {PostAlerts} from '#/components/moderation/PostAlerts' import {Text} from '#/components/Typography' const PFP_SIZE = isWeb ? 40 : 34 export let MessagesListHeader = ({ profile, moderation, blockInfo, }: { profile?: AppBskyActorDefs.ProfileViewBasic moderation?: ModerationDecision blockInfo?: { listBlocks: ModerationCause[] userBlock?: ModerationCause } }): React.ReactNode => { const t = useTheme() const {_} = useLingui() const {gtTablet} = useBreakpoints() const navigation = useNavigation() const onPressBack = useCallback(() => { if (isWeb) { navigation.replace('Messages', {}) } else { navigation.goBack() } }, [navigation]) return ( {!gtTablet && ( )} {profile && moderation && blockInfo ? ( ) : ( <> )} ) } MessagesListHeader = React.memo(MessagesListHeader) function HeaderReady({ profile: profileUnshadowed, moderation, blockInfo, }: { profile: AppBskyActorDefs.ProfileViewBasic moderation: ModerationDecision blockInfo: { listBlocks: ModerationCause[] userBlock?: ModerationCause } }) { const t = useTheme() const convoState = useConvo() const profile = useProfileShadow(profileUnshadowed) const isDeletedAccount = profile?.handle === 'missing.invalid' const displayName = isDeletedAccount ? 'Deleted Account' : sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) return ( {displayName} {!isDeletedAccount && ( @{profile.handle} {convoState.convo?.muted && ( <> {' '} ·{' '} )} )} {isConvoActive(convoState) && ( )} ) }