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 {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_Corner3_Rounded as Repost} from '#/components/icons/Repost' import {formatPostStatCount} from '#/components/PostControls/util' 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 compactCount?: boolean } let RepostButton = ({ isReposted, repostCount, onRepost, onQuote, big, embeddingDisabled, compactCount, }: Props): React.ReactNode => { const t = useTheme() const {_, i18n} = useLingui() const requireAuth = useRequireAuth() const dialogControl = Dialog.useDialogControl() const onPress = () => requireAuth(() => dialogControl.open()) const onLongPress = () => requireAuth(() => { if (embeddingDisabled) { dialogControl.open() } else { onQuote() } }) return ( <> {typeof repostCount !== 'undefined' && repostCount > 0 && ( {formatPostStatCount(i18n, repostCount, {compact: compactCount})} )} ) } 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}