Bluesky app fork with some witchin' additions 馃挮
at main 69 lines 2.2 kB view raw
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}