import React, { useState } from "react"; import { Flag, X } from "lucide-react"; import { useTranslation } from "react-i18next"; import { reportUser } from "../../api/client"; import type { ReportReasonType } from "../../types"; interface ReportModalProps { isOpen: boolean; onClose: () => void; subjectDid: string; subjectUri?: string; subjectHandle?: string; } const REASON_VALUES: { value: ReportReasonType; descKey: string }[] = [ { value: "spam", descKey: "spam" }, { value: "violation", descKey: "ruleViolation" }, { value: "misleading", descKey: "misleading" }, { value: "rude", descKey: "rudeOrHarassing" }, { value: "sexual", descKey: "inappropriateContent" }, { value: "other", descKey: "other" }, ]; export default function ReportModal({ isOpen, onClose, subjectDid, subjectUri, subjectHandle, }: ReportModalProps) { const { t } = useTranslation(); const [selectedReason, setSelectedReason] = useState( null, ); const [additionalText, setAdditionalText] = useState(""); const [submitting, setSubmitting] = useState(false); const [submitted, setSubmitted] = useState(false); if (!isOpen) return null; const handleSubmit = async () => { if (!selectedReason) return; setSubmitting(true); const success = await reportUser({ subjectDid: subjectDid, subjectUri: subjectUri, reasonType: selectedReason, reasonText: additionalText || undefined, }); setSubmitting(false); if (success) { setSubmitted(true); setTimeout(() => { onClose(); setSubmitted(false); setSelectedReason(null); setAdditionalText(""); }, 1500); } }; const handleClose = () => { onClose(); setSelectedReason(null); setAdditionalText(""); setSubmitted(false); }; return (
e.stopPropagation()} > {submitted ? (

{t("report.submitted")}

{t("report.submittedMessage")}

) : ( <>

{subjectHandle ? t("report.titleUser", { handle: subjectHandle }) : t("report.titleGeneric")}

{subjectUri && (

{t("report.reportingContent")}

)}

{t("report.issueLabel")}

{REASON_VALUES.map((r) => ( ))}
{selectedReason && (