import React, {memo, useMemo, useState} from 'react' import {View} from 'react-native' import { ChatBskyConvoDefs, ComAtprotoModerationCreateReport, RichText as RichTextAPI, } from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useMutation} from '@tanstack/react-query' import {ReportOption} from '#/lib/moderation/useReportOptions' import {isAndroid} from '#/platform/detection' import {useAgent} from '#/state/session' import {CharProgress} from '#/view/com/composer/char-progress/CharProgress' import * as Toast from '#/view/com/util/Toast' import {atoms as a, useBreakpoints, useTheme} from '#/alf' import * as Dialog from '#/components/Dialog' import {Button, ButtonIcon, ButtonText} from '../Button' import {Divider} from '../Divider' import {ChevronLeft_Stroke2_Corner0_Rounded as Chevron} from '../icons/Chevron' import {Loader} from '../Loader' import {SelectReportOptionView} from '../ReportDialog/SelectReportOptionView' import {RichText} from '../RichText' import {Text} from '../Typography' import {MessageItemMetadata} from './MessageItem' let MessageReportDialog = ({ control, message, }: { control: Dialog.DialogControlProps message: ChatBskyConvoDefs.MessageView }): React.ReactNode => { const {_} = useLingui() return ( ) } MessageReportDialog = memo(MessageReportDialog) export {MessageReportDialog} function DialogInner({message}: {message: ChatBskyConvoDefs.MessageView}) { const [reportOption, setReportOption] = useState(null) return reportOption ? ( setReportOption(null)} /> ) : ( ) } function ReasonStep({ setReportOption, }: { setReportOption: (reportOption: ReportOption) => void }) { const control = Dialog.useDialogContext() return ( ) } function SubmitStep({ message, reportOption, goBack, }: { message: ChatBskyConvoDefs.MessageView reportOption: ReportOption goBack: () => void }) { const {_} = useLingui() const {gtMobile} = useBreakpoints() const t = useTheme() const [details, setDetails] = useState('') const control = Dialog.useDialogContext() const {getAgent} = useAgent() const { mutate: submit, error, isPending: submitting, } = useMutation({ mutationFn: async () => { const report = { reasonType: reportOption.reason, subject: { $type: 'chat.bsky.convo.defs#messageRef', messageId: message.id, did: message.sender!.did, } satisfies ChatBskyConvoDefs.MessageRef, reason: details, } satisfies ComAtprotoModerationCreateReport.InputSchema await getAgent().createModerationReport(report) }, onSuccess: () => { control.close(() => { Toast.show(_(msg`Thank you. Your report has been sent.`)) }) }, }) return ( Report this message Your report will be sent to the Bluesky Moderation Service Reason: {reportOption.title} Optionally provide additional information below: {error && ( There was an issue sending your report. Please check your internet connection. )} ) } function PreviewMessage({message}: {message: ChatBskyConvoDefs.MessageView}) { const t = useTheme() const rt = useMemo(() => { return new RichTextAPI({text: message.text, facets: message.facets}) }, [message.text, message.facets]) return ( ) }