import {plural} from '@lingui/core/macro' import {useLingui} from '@lingui/react/macro' import {type CountsMetricsDisplay} from '#/lib/metrics-display' import {useRequireAuth, useSession} from '#/state/session' import {EventStopper} from '#/view/com/util/EventStopper' import {useTheme} from '#/alf' import {CloseQuote_Stroke2_Corner1_Rounded as QuoteIcon} from '#/components/icons/Quote' import {RepostRepost_Stroke2_Corner2_Rounded as BumpRepostIcon} from '#/components/icons/Repost' import {Repost_Stroke2_Corner2_Rounded as RepostIcon} from '#/components/icons/Repost' import * as Menu from '#/components/Menu' import {MetricCountLabel} from '#/components/PostControls/MetricCountLabel' import {PostControlButton, PostControlButtonIcon} from './PostControlButton' export interface RepostButtonProps { isReposted: boolean repostCount?: number onRepost: () => void onBumpRepost?: () => void onLongPress?: () => void metricsDisplay?: CountsMetricsDisplay onQuote: (openAccountSwitcher?: boolean) => void big?: boolean embeddingDisabled: boolean longPressToQuote?: boolean } export function RepostButtonMenu({ isReposted, repostCount, onRepost, onQuote, onBumpRepost, onLongPress, metricsDisplay = 'visible', big, embeddingDisabled, longPressToQuote = false, }: RepostButtonProps): React.ReactNode { const t = useTheme() const {t: l} = useLingui() const {hasSession} = useSession() const requireAuth = useRequireAuth() return hasSession ? ( {({props}) => ( requireAuth(() => { if (embeddingDisabled) { props.onPress() } else { onQuote() } }) : undefined) }> {typeof repostCount !== 'undefined' && repostCount > 0 && ( )} )} {isReposted && onBumpRepost && ( {l`Bump repost`} )} {isReposted ? l`Undo repost` : l({message: `Repost`, context: 'action'})} onQuote()}> {embeddingDisabled ? l`Quote posts disabled` : l`Quote post`} ) : ( requireAuth(() => {})} active={isReposted} activeColor={t.palette.positive_500} label={l`Repost or quote post`} big={big}> {typeof repostCount !== 'undefined' && repostCount > 0 && ( )} ) }