Bluesky app fork with some witchin' additions 馃挮
at linkat-integration 64 lines 2.1 kB view raw
1import React from 'react' 2import {msg, Plural} from '@lingui/macro' 3import {useLingui} from '@lingui/react' 4import {useFocusEffect} from '@react-navigation/native' 5 6import {useSetTitle} from '#/lib/hooks/useSetTitle' 7import { 8 type CommonNavigatorParams, 9 type NativeStackScreenProps, 10} from '#/lib/routes/types' 11import {sanitizeDisplayName} from '#/lib/strings/display-names' 12import {useProfileQuery} from '#/state/queries/profile' 13import {useResolveDidQuery} from '#/state/queries/resolve-uri' 14import {useSetMinimalShellMode} from '#/state/shell' 15import {ProfileFollows as ProfileFollowsComponent} from '#/view/com/profile/ProfileFollows' 16import * as Layout from '#/components/Layout' 17 18type Props = NativeStackScreenProps<CommonNavigatorParams, 'ProfileFollows'> 19export const ProfileFollowsScreen = ({route}: Props) => { 20 const {name} = route.params 21 const {_} = useLingui() 22 const setMinimalShellMode = useSetMinimalShellMode() 23 24 const {data: resolvedDid} = useResolveDidQuery(name) 25 const {data: profile} = useProfileQuery({ 26 did: resolvedDid, 27 }) 28 29 useSetTitle( 30 profile ? _(msg`People followed by @${profile.handle}`) : undefined, 31 ) 32 33 useFocusEffect( 34 React.useCallback(() => { 35 setMinimalShellMode(false) 36 }, [setMinimalShellMode]), 37 ) 38 39 return ( 40 <Layout.Screen testID="profileFollowsScreen"> 41 <Layout.Header.Outer> 42 <Layout.Header.BackButton /> 43 <Layout.Header.Content> 44 {profile && ( 45 <> 46 <Layout.Header.TitleText> 47 {sanitizeDisplayName(profile.displayName || profile.handle)} 48 </Layout.Header.TitleText> 49 <Layout.Header.SubtitleText> 50 <Plural 51 value={profile.followsCount ?? 0} 52 one="# following" 53 other="# following" 54 /> 55 </Layout.Header.SubtitleText> 56 </> 57 )} 58 </Layout.Header.Content> 59 <Layout.Header.Slot /> 60 </Layout.Header.Outer> 61 <ProfileFollowsComponent name={name} /> 62 </Layout.Screen> 63 ) 64}