import React from 'react' import {LayoutAnimation, Pressable, View} from 'react-native' import * as Clipboard from 'expo-clipboard' import {ChatBskyConvoDefs} from '@atproto-labs/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {isWeb} from 'platform/detection' import {useConvo} from 'state/messages/convo' import {ConvoStatus} from 'state/messages/convo/types' import {useSession} from 'state/session' import * as Toast from '#/view/com/util/Toast' import {atoms as a, useTheme} from '#/alf' import {DotGrid_Stroke2_Corner0_Rounded as DotsHorizontal} from '#/components/icons/DotGrid' import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash' import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning' import * as Menu from '#/components/Menu' import * as Prompt from '#/components/Prompt' import {usePromptControl} from '#/components/Prompt' import {Clipboard_Stroke2_Corner2_Rounded as ClipboardIcon} from '../icons/Clipboard' export let MessageMenu = ({ message, control, triggerOpacity, }: { hideTrigger?: boolean triggerOpacity?: number message: ChatBskyConvoDefs.MessageView control: Menu.MenuControlProps }): React.ReactNode => { const {_} = useLingui() const t = useTheme() const {currentAccount} = useSession() const convo = useConvo() const deleteControl = usePromptControl() const retryDeleteControl = usePromptControl() const isFromSelf = message.sender?.did === currentAccount?.did const onCopyPostText = React.useCallback(() => { // use when we have rich text // const str = richTextToString(richText, true) Clipboard.setStringAsync(message.text) Toast.show(_(msg`Copied to clipboard`)) }, [_, message.text]) const onDelete = React.useCallback(() => { if (convo.status !== ConvoStatus.Ready) return LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) convo .deleteMessage(message.id) .then(() => Toast.show(_(msg`Message deleted`))) .catch(() => retryDeleteControl.open()) }, [_, convo, message.id, retryDeleteControl]) const onReport = React.useCallback(() => { // TODO report the message }, []) return ( <>