import {memo, useCallback} from 'react' import {View} from 'react-native' import {msg, plural, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useHaptics} from '#/lib/haptics' import {useRequireAuth} from '#/state/session' import {formatCount} from '#/view/com/util/numeric/format' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {CloseQuote_Stroke2_Corner1_Rounded as Quote} from '#/components/icons/Quote' import {Repost_Stroke2_Corner2_Rounded as Repost} from '#/components/icons/Repost' import {Text} from '#/components/Typography' import { PostControlButton, PostControlButtonIcon, PostControlButtonText, } from './PostControlButton' interface Props { isReposted: boolean repostCount?: number onRepost: () => void onQuote: () => void big?: boolean embeddingDisabled: boolean } let RepostButton = ({ isReposted, repostCount, onRepost, onQuote, big, embeddingDisabled, }: Props): React.ReactNode => { const t = useTheme() const {_, i18n} = useLingui() const requireAuth = useRequireAuth() const dialogControl = Dialog.useDialogControl() return ( <> requireAuth(() => dialogControl.open())} onLongPress={() => requireAuth(() => onQuote())} label={ isReposted ? _( msg({ message: `Undo repost (${plural(repostCount || 0, { one: '# repost', other: '# reposts', })})`, comment: 'Accessibility label for the repost button when the post has been reposted, verb followed by number of reposts and noun', }), ) : _( msg({ message: `Repost (${plural(repostCount || 0, { one: '# repost', other: '# reposts', })})`, comment: 'Accessibility label for the repost button when the post has not been reposted, verb form followed by number of reposts and noun form', }), ) }> {typeof repostCount !== 'undefined' && repostCount > 0 && ( {formatCount(i18n, repostCount)} )} ) } RepostButton = memo(RepostButton) export {RepostButton} let RepostButtonDialogInner = ({ isReposted, onRepost, onQuote, embeddingDisabled, }: { isReposted: boolean onRepost: () => void onQuote: () => void embeddingDisabled: boolean }): React.ReactNode => { const t = useTheme() const {_} = useLingui() const playHaptic = useHaptics() const control = Dialog.useDialogContext() const onPressRepost = useCallback(() => { if (!isReposted) playHaptic() control.close(() => { onRepost() }) }, [control, isReposted, onRepost, playHaptic]) const onPressQuote = useCallback(() => { playHaptic() control.close(() => { onQuote() }) }, [control, onQuote, playHaptic]) const onPressClose = useCallback(() => control.close(), [control]) return ( ) } RepostButtonDialogInner = memo(RepostButtonDialogInner) export {RepostButtonDialogInner}