[🐴] Report message dialog (#3941)

* message report dialog

* report chat prompt

* typo

* 100% height sheet on android

* messages-specific report options

* restore unwanted sexual content

* chat -> conversation
This commit is contained in:
Samuel Newman 2024-05-10 17:52:21 +01:00 committed by GitHub
parent 7370bebf07
commit ab21aafc28
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 309 additions and 15 deletions

View file

@ -1,10 +1,12 @@
import React from 'react'
import {LayoutAnimation, Pressable, View} from 'react-native'
import * as Clipboard from 'expo-clipboard'
import {RichText} from '@atproto/api'
import {ChatBskyConvoDefs} from '@atproto-labs/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {richTextToString} from '#/lib/strings/rich-text-helpers'
import {isWeb} from 'platform/detection'
import {useConvo} from 'state/messages/convo'
import {ConvoStatus} from 'state/messages/convo/types'
@ -18,6 +20,7 @@ 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'
import {MessageReportDialog} from './MessageReportDialog'
export let MessageMenu = ({
message,
@ -35,16 +38,22 @@ export let MessageMenu = ({
const convo = useConvo()
const deleteControl = usePromptControl()
const retryDeleteControl = usePromptControl()
const reportControl = usePromptControl()
const isFromSelf = message.sender?.did === currentAccount?.did
const onCopyPostText = React.useCallback(() => {
// use when we have rich text
// const str = richTextToString(richText, true)
const str = richTextToString(
new RichText({
text: message.text,
facets: message.facets,
}),
true,
)
Clipboard.setStringAsync(message.text)
Clipboard.setStringAsync(str)
Toast.show(_(msg`Copied to clipboard`))
}, [_, message.text])
}, [_, message.text, message.facets])
const onDelete = React.useCallback(() => {
if (convo.status !== ConvoStatus.Ready) return
@ -56,10 +65,6 @@ export let MessageMenu = ({
.catch(() => retryDeleteControl.open())
}, [_, convo, message.id, retryDeleteControl])
const onReport = React.useCallback(() => {
// TODO report the message
}, [])
return (
<>
<Menu.Root control={control}>
@ -104,7 +109,7 @@ export let MessageMenu = ({
<Menu.Item
testID="messageDropdownReportBtn"
label={_(msg`Report message`)}
onPress={onReport}>
onPress={reportControl.open}>
<Menu.ItemText>{_(msg`Report`)}</Menu.ItemText>
<Menu.ItemIcon icon={Warning} position="right" />
</Menu.Item>
@ -113,6 +118,8 @@ export let MessageMenu = ({
</Menu.Outer>
</Menu.Root>
<MessageReportDialog message={message} control={reportControl} />
<Prompt.Basic
control={deleteControl}
title={_(msg`Delete message`)}