import { useEffect, useState } from "react"; import { INK, RED, BLUE, PAPER, SKY, MUTE, FONT_MONO, FONT_SERIF } from "../../theme"; import { REPORT_REASONS, REPORT_DETAILS_MAX, MODERATION_CONTACT } from "../../constants"; import AirmailEdge from "../../components/AirmailEdge"; /* * Melden: dezelfde dialoog voor een persoon en voor één brief (`letter` bepaalt welk van de twee). * * Melden is niet hetzelfde als blokkeren, en de tekst zegt dat ook: blokkeren regel je voor jezelf * en werkt meteen, melden gaat naar de beheerder en die kan iets doen wat jij niet kunt. Wie meldt, * wil meestal allebei — vandaar het vinkje, aangevinkt, maar uit te zetten (soms wil je juist nog * kunnen zien wat er gebeurt). * * onSubmit({ reason, details, block }) → Promise<{ id, blocked }>. Daarna blijft de dialoog staan met * een bevestiging: melden zonder terugkoppeling voelt als in een put roepen. */ export default function ReportDialog({ subject, letter = null, canBlock = false, onSubmit, onClose }) { const [reason, setReason] = useState(null); const [details, setDetails] = useState(""); const [block, setBlock] = useState(canBlock); const [sending, setSending] = useState(false); const [error, setError] = useState(null); const [done, setDone] = useState(null); // { blocked } na versturen const title = letter ? `Brief van ${subject.name} melden` : `${subject.name} melden`; /* Escape sluit; de pagina eronder scrolt intussen niet mee (net als bij de brief-dialoog) */ useEffect(() => { const onKey = (e) => e.key === "Escape" && !sending && onClose(); document.addEventListener("keydown", onKey); const prev = document.body.style.overflow; document.body.style.overflow = "hidden"; return () => { document.removeEventListener("keydown", onKey); document.body.style.overflow = prev; }; }); const submit = async () => { if (!reason || sending) return; setSending(true); setError(null); try { const result = await onSubmit({ reason, details: details.trim(), block }); setDone({ blocked: result?.blocked ?? false }); } catch (e) { setError(e.message); setSending(false); } }; return (
Dank je. De beheerder van Liefdesbrieven kijkt ernaar en kan de brieven bekijken die bij de melding horen. {subject.name} krijgt geen bericht van je melding en ziet niet dat je gemeld hebt.
{done.blocked && ({subject.name} is ook geblokkeerd: jullie zien elkaar niet meer en niemand kan de ander nog schrijven. Terugdraaien kan bij Mijn profiel.
)}Gaat het om acuut gevaar, bel dan 112. Wil je zelf iets kwijt over de afhandeling: {MODERATION_CONTACT}.
> ) : ( <>gaat naar de beheerder · {subject.name} hoort hier niets van
{/* Waarover gaat het: bij een brief het begin ervan, zodat je meldt wat je denkt te melden */} {letter && ({letter.photo && ( met foto: {letter.photo.alt} )} {letter.text.slice(0, 200)} {letter.text.length > 200 && "…"})}