import { MODERATION_REASON_OPTIONS } from "$/lib/api/moderation"; import type { ModerationReasonType } from "$/lib/types"; import { createEffect, createSignal, For, type ParentProps, Show } from "solid-js"; import { Motion, Presence } from "solid-motionone"; type ReportDialogProps = { open: boolean; subjectLabel: string; onClose: () => void; onSubmit: (input: { reasonType: ModerationReasonType; reason: string }) => Promise | void; }; export function ReportDialog(props: ReportDialogProps) { const [reasonType, setReasonType] = createSignal(MODERATION_REASON_OPTIONS[0].value); const [reason, setReason] = createSignal(""); const [submitting, setSubmitting] = createSignal(false); createEffect(() => { if (!props.open) { return; } setReasonType(MODERATION_REASON_OPTIONS[0].value); setReason(""); setSubmitting(false); }); async function submit() { if (submitting()) { return; } setSubmitting(true); try { await props.onSubmit({ reason: reason().trim(), reasonType: reasonType() }); props.onClose(); } finally { setSubmitting(false); } } return ( void submit()} /> ); } function DialogBackdrop(props: ParentProps<{ onClose: () => void }>) { return (