forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}