mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at thread-bug 3.6 kB view raw
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}