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 (
)
}