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 {ProfileFollowers as ProfileFollowersComponent} from '#/view/com/profile/ProfileFollowers'
16import * as Layout from '#/components/Layout'
17
18type Props = NativeStackScreenProps<CommonNavigatorParams, 'ProfileFollowers'>
19export const ProfileFollowersScreen = ({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(profile ? _(msg`People following @${profile.handle}`) : undefined)
30
31 useFocusEffect(
32 React.useCallback(() => {
33 setMinimalShellMode(false)
34 }, [setMinimalShellMode]),
35 )
36
37 return (
38 <Layout.Screen testID="profileFollowersScreen">
39 <Layout.Header.Outer>
40 <Layout.Header.BackButton />
41 <Layout.Header.Content>
42 {profile && (
43 <>
44 <Layout.Header.TitleText>
45 {sanitizeDisplayName(profile.displayName || profile.handle)}
46 </Layout.Header.TitleText>
47 <Layout.Header.SubtitleText>
48 <Plural
49 value={profile.followersCount ?? 0}
50 one="# follower"
51 other="# followers"
52 />
53 </Layout.Header.SubtitleText>
54 </>
55 )}
56 </Layout.Header.Content>
57 <Layout.Header.Slot />
58 </Layout.Header.Outer>
59 <ProfileFollowersComponent name={name} />
60 </Layout.Screen>
61 )
62}