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 && (
)}
)
}