mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at tooltip 3.4 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={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}