mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {msg} from '@lingui/macro'
2import {useLingui} from '@lingui/react'
3
4import {useRequireAuth} from '#/state/session'
5import {useSession} from '#/state/session'
6import {EventStopper} from '#/view/com/util/EventStopper'
7import {formatCount} from '#/view/com/util/numeric/format'
8import {useTheme} from '#/alf'
9import {CloseQuote_Stroke2_Corner1_Rounded as Quote} from '#/components/icons/Quote'
10import {Repost_Stroke2_Corner2_Rounded as Repost} from '#/components/icons/Repost'
11import * as Menu from '#/components/Menu'
12import {
13 PostControlButton,
14 PostControlButtonIcon,
15 PostControlButtonText,
16} from './PostControlButton'
17
18interface Props {
19 isReposted: boolean
20 repostCount?: number
21 onRepost: () => void
22 onQuote: () => void
23 big?: boolean
24 embeddingDisabled: boolean
25}
26
27export const RepostButton = ({
28 isReposted,
29 repostCount,
30 onRepost,
31 onQuote,
32 big,
33 embeddingDisabled,
34}: Props) => {
35 const t = useTheme()
36 const {_, i18n} = useLingui()
37 const {hasSession} = useSession()
38 const requireAuth = useRequireAuth()
39
40 return hasSession ? (
41 <EventStopper onKeyDown={false}>
42 <Menu.Root>
43 <Menu.Trigger label={_(msg`Repost or quote post`)}>
44 {({props}) => {
45 return (
46 <PostControlButton
47 testID="repostBtn"
48 active={isReposted}
49 activeColor={t.palette.positive_600}
50 label={props.accessibilityLabel}
51 big={big}
52 {...props}>
53 <PostControlButtonIcon icon={Repost} />
54 {typeof repostCount !== 'undefined' && repostCount > 0 && (
55 <PostControlButtonText testID="repostCount">
56 {formatCount(i18n, repostCount)}
57 </PostControlButtonText>
58 )}
59 </PostControlButton>
60 )
61 }}
62 </Menu.Trigger>
63 <Menu.Outer style={{minWidth: 170}}>
64 <Menu.Item
65 label={isReposted ? _(msg`Undo repost`) : _(msg`Repost`)}
66 testID="repostDropdownRepostBtn"
67 onPress={onRepost}>
68 <Menu.ItemText>
69 {isReposted ? _(msg`Undo repost`) : _(msg`Repost`)}
70 </Menu.ItemText>
71 <Menu.ItemIcon icon={Repost} position="right" />
72 </Menu.Item>
73 <Menu.Item
74 disabled={embeddingDisabled}
75 label={
76 embeddingDisabled
77 ? _(msg`Quote posts disabled`)
78 : _(msg`Quote post`)
79 }
80 testID="repostDropdownQuoteBtn"
81 onPress={onQuote}>
82 <Menu.ItemText>
83 {embeddingDisabled
84 ? _(msg`Quote posts disabled`)
85 : _(msg`Quote post`)}
86 </Menu.ItemText>
87 <Menu.ItemIcon icon={Quote} position="right" />
88 </Menu.Item>
89 </Menu.Outer>
90 </Menu.Root>
91 </EventStopper>
92 ) : (
93 <PostControlButton
94 onPress={() => requireAuth(() => {})}
95 active={isReposted}
96 activeColor={t.palette.positive_600}
97 label={_(msg`Repost or quote post`)}
98 big={big}>
99 <PostControlButtonIcon icon={Repost} />
100 {typeof repostCount !== 'undefined' && repostCount > 0 && (
101 <PostControlButtonText testID="repostCount">
102 {formatCount(i18n, repostCount)}
103 </PostControlButtonText>
104 )}
105 </PostControlButton>
106 )
107}