"use client"; import * as React from "react"; import { useRouter } from "next/navigation"; import { Check, Plus, Undo2 } from "lucide-react"; import { recordAbuseEvent, resolveAbuseEvent } from "@/actions/admin"; import { Button } from "@/components/ui/button"; import { Input, NativeSelect, Textarea } from "@/components/ui/input"; import { Field, Hint, Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { ActionButton } from "./action-button"; export function ResolveAbuseButton({ id, resolved }: { id: string; resolved: boolean }) { return resolved ? ( resolveAbuseEvent(id, false)}> Reopen ) : ( resolveAbuseEvent(id, true)}> Resolve ); } export function RecordAbuseDialog({ defaultOrgId }: { defaultOrgId?: string }) { const router = useRouter(); const [open, setOpen] = React.useState(false); const [pending, start] = React.useTransition(); const [error, setError] = React.useState(null); const [form, setForm] = React.useState({ kind: "manual", severity: "medium", organizationId: defaultOrgId ?? "", projectId: "", requestId: "", detail: "" }); const set = (k: keyof typeof form) => (e: React.ChangeEvent) => setForm((f) => ({ ...f, [k]: e.target.value })); return ( <> Record an abuse event Manual entries appear alongside automatically detected events and are linked to the organization when an id is given.
{ e.preventDefault(); start(async () => { setError(null); const r = await recordAbuseEvent(form as Parameters[0]); if (!r.ok) return setError(r.error); setOpen(false); setForm({ kind: "manual", severity: "medium", organizationId: defaultOrgId ?? "", projectId: "", requestId: "", detail: "" }); router.refresh(); }); }} >