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={
66 isReposted
67 ? _(msg`Undo repost`)
68 : _(msg({message: `Repost`, context: `action`}))
69 }
70 testID="repostDropdownRepostBtn"
71 onPress={onRepost}>
72 <Menu.ItemText>
73 {isReposted
74 ? _(msg`Undo repost`)
75 : _(msg({message: `Repost`, context: `action`}))}
76 </Menu.ItemText>
77 <Menu.ItemIcon icon={Repost} position="right" />
78 </Menu.Item>
79 <Menu.Item
80 disabled={embeddingDisabled}
81 label={
82 embeddingDisabled
83 ? _(msg`Quote posts disabled`)
84 : _(msg`Quote post`)
85 }
86 testID="repostDropdownQuoteBtn"
87 onPress={onQuote}>
88 <Menu.ItemText>
89 {embeddingDisabled
90 ? _(msg`Quote posts disabled`)
91 : _(msg`Quote post`)}
92 </Menu.ItemText>
93 <Menu.ItemIcon icon={Quote} position="right" />
94 </Menu.Item>
95 </Menu.Outer>
96 </Menu.Root>
97 </EventStopper>
98 ) : (
99 <PostControlButton
100 onPress={() => requireAuth(() => {})}
101 active={isReposted}
102 activeColor={t.palette.positive_600}
103 label={_(msg`Repost or quote post`)}
104 big={big}>
105 <PostControlButtonIcon icon={Repost} />
106 {typeof repostCount !== 'undefined' && repostCount > 0 && (
107 <PostControlButtonText testID="repostCount">
108 {formatCount(i18n, repostCount)}
109 </PostControlButtonText>
110 )}
111 </PostControlButton>
112 )
113}