forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import React from 'react'
2import {msg} from '@lingui/core/macro'
3import {Plural, Trans} from '@lingui/react/macro'
4import {useLingui} from '@lingui/react'
5import {useFocusEffect} from '@react-navigation/native'
6
7import {useSetTitle} from '#/lib/hooks/useSetTitle'
8import {
9 type CommonNavigatorParams,
10 type NativeStackScreenProps,
11} from '#/lib/routes/types'
12import {makeRecordUri} from '#/lib/strings/url-helpers'
13import {usePostQuery} from '#/state/queries/post'
14import {useProfileQuery} from '#/state/queries/profile'
15import {useResolveDidQuery} from '#/state/queries/resolve-uri'
16import {useSetMinimalShellMode} from '#/state/shell'
17import {PostRepostedBy as PostRepostedByComponent} from '#/view/com/post-thread/PostRepostedBy'
18import * as Layout from '#/components/Layout'
19
20type Props = NativeStackScreenProps<CommonNavigatorParams, 'PostRepostedBy'>
21export const PostRepostedByScreen = ({route}: Props) => {
22 const {_} = useLingui()
23 const {name, rkey} = route.params
24 const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey)
25 const setMinimalShellMode = useSetMinimalShellMode()
26 const {data: post} = usePostQuery(uri)
27
28 const {data: resolvedDid} = useResolveDidQuery(name)
29 const {data: profile} = useProfileQuery({did: resolvedDid})
30
31 useSetTitle(profile ? _(msg`Post by @${profile.handle}`) : undefined)
32
33 let quoteCount
34 if (post) {
35 quoteCount = post.repostCount
36 }
37
38 useFocusEffect(
39 React.useCallback(() => {
40 setMinimalShellMode(false)
41 }, [setMinimalShellMode]),
42 )
43
44 return (
45 <Layout.Screen>
46 <Layout.Header.Outer>
47 <Layout.Header.BackButton />
48 <Layout.Header.Content>
49 {post && (
50 <>
51 <Layout.Header.TitleText>
52 <Trans>Reposted By</Trans>
53 </Layout.Header.TitleText>
54 <Layout.Header.SubtitleText>
55 <Plural
56 value={quoteCount ?? 0}
57 one="# repost"
58 other="# reposts"
59 />
60 </Layout.Header.SubtitleText>
61 </>
62 )}
63 </Layout.Header.Content>
64 <Layout.Header.Slot />
65 </Layout.Header.Outer>
66 <PostRepostedByComponent uri={uri} />
67 </Layout.Screen>
68 )
69}