Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫
Something went wrong. Try again.
3.6 kB · 113 lines
TSX
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114import {msg} from '@lingui/core/macro'import {useLingui} from '@lingui/react'
import {useRequireAuth, useSession} from '#/state/session'import {EventStopper} from '#/view/com/util/EventStopper'import {useTheme} from '#/alf'import {CloseQuote_Stroke2_Corner1_Rounded as Quote} from '#/components/icons/Quote'import {Repost_Stroke2_Corner2_Rounded as Repost} from '#/components/icons/Repost'import * as Menu from '#/components/Menu'import { PostControlButton, PostControlButtonIcon, PostControlButtonText,} from './PostControlButton'import {useFormatPostStatCount} from './util'
interface Props { isReposted: boolean repostCount?: number onRepost: () => void onQuote: () => void big?: boolean embeddingDisabled: boolean}
export const RepostButton = ({ isReposted, repostCount, onRepost, onQuote, big, embeddingDisabled,}: Props) => { const t = useTheme() const {_} = useLingui() const {hasSession} = useSession() const requireAuth = useRequireAuth() const formatPostStatCount = useFormatPostStatCount()
return hasSession ? ( <EventStopper onKeyDown={false}> <Menu.Root> <Menu.Trigger label={_(msg`Repost or quote post`)}> {({props}) => { return ( <PostControlButton testID="repostBtn" active={isReposted} activeColor={t.palette.positive_500} label={props.accessibilityLabel} big={big} {...props}> <PostControlButtonIcon icon={Repost} /> {typeof repostCount !== 'undefined' && repostCount > 0 && ( <PostControlButtonText testID="repostCount"> {formatPostStatCount(repostCount)} </PostControlButtonText> )} </PostControlButton> ) }} </Menu.Trigger> <Menu.Outer style={{minWidth: 170}}> <Menu.Item label={ isReposted ? _(msg`Undo repost`) : _(msg({message: `Repost`, context: `action`})) } testID="repostDropdownRepostBtn" onPress={onRepost}> <Menu.ItemText> {isReposted ? _(msg`Undo repost`) : _(msg({message: `Repost`, context: `action`}))} </Menu.ItemText> <Menu.ItemIcon icon={Repost} position="right" /> </Menu.Item> <Menu.Item disabled={embeddingDisabled} label={ embeddingDisabled ? _(msg`Quote posts disabled`) : _(msg`Quote post`) } testID="repostDropdownQuoteBtn" onPress={onQuote}> <Menu.ItemText> {embeddingDisabled ? _(msg`Quote posts disabled`) : _(msg`Quote post`)} </Menu.ItemText> <Menu.ItemIcon icon={Quote} position="right" /> </Menu.Item> </Menu.Outer> </Menu.Root> </EventStopper> ) : ( <PostControlButton onPress={() => requireAuth(() => {})} active={isReposted} activeColor={t.palette.positive_500} label={_(msg`Repost or quote post`)} big={big}> <PostControlButtonIcon icon={Repost} /> {typeof repostCount !== 'undefined' && repostCount > 0 && ( <PostControlButtonText testID="repostCount"> {formatPostStatCount(repostCount)} </PostControlButtonText> )} </PostControlButton> )}