'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { fileIncident } from '@/lib/actions' import { incidentSeverities } from '@/lib/validations' type Member = { id: string; display_name: string | null } export function IncidentForm({ members }: { members: Member[] }) { const router = useRouter() const [title, setTitle] = useState('') const [body, setBody] = useState('') const [category, setCategory] = useState('general') const [severity, setSeverity] = useState('medium') const [subjects, setSubjects] = useState([]) const [isAnonymous, setIsAnonymous] = useState(false) const [error, setError] = useState('') const [submitting, setSubmitting] = useState(false) const [token, setToken] = useState(null) function toggleSubject(id: string) { setSubjects(prev => (prev.includes(id) ? prev.filter(x => x !== id) : [...prev, id])) } async function handleSubmit(e: React.FormEvent) { e.preventDefault() setSubmitting(true) setError('') const result = await fileIncident({ title, body, category, severity, subjects, is_anonymous: isAnonymous, }) if ('error' in result && result.error) { setError(result.error) setSubmitting(false) return } if (isAnonymous && 'token' in result && result.token) { setToken(result.token as string) setSubmitting(false) return } if ('data' in result && result.data) { router.push(`/incidents/${(result.data as { id: string }).id}`) } else { router.push('/incidents') } } if (token) { return (

Report filed anonymously

Save this tracking token. It is the only way to look the report up later. We never email or display it elsewhere.

{token}

Check the status any time at{' '} /track {' '} with this code. Bookmark it now.

Done
) } return (
setTitle(e.target.value)} maxLength={200} required className="w-full bg-background border border-border text-foreground font-sans text-sm rounded px-3 py-2 focus:outline-none focus:border-primary" placeholder="Brief summary" />