'use client' import { useState, useTransition } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { updateIncidentStatus, addIncidentUpdate, appealIncident, } from '@/lib/actions' import type { IncidentStatus } from '@/lib/types' import { incidentStatuses, incidentUpdateVisibilities } from '@/lib/validations' type Props = { incidentId: string status: IncidentStatus isAdminOrBoard: boolean isReporter: boolean hasAppeal: boolean appealProposalId: string | null } export function IncidentActions({ incidentId, status, isAdminOrBoard, isReporter, hasAppeal, appealProposalId, }: Props) { const router = useRouter() const [isPending, startTransition] = useTransition() const [error, setError] = useState('') // Add-update form const [updateBody, setUpdateBody] = useState('') const [updateVisibility, setUpdateVisibility] = useState('all_parties') // Status transition form (admin/board) const [newStatus, setNewStatus] = useState(status) const [disposition, setDisposition] = useState('') // Appeal form (reporter) const [appealTitle, setAppealTitle] = useState('') const [appealBody, setAppealBody] = useState('') function run(fn: () => Promise, after?: () => void) { setError('') startTransition(async () => { const r = (await fn()) as unknown as { error?: string } if (r && r.error) setError(r.error) else after?.() router.refresh() }) } const canAppeal = isReporter && status === 'decided' && !hasAppeal return (
{isAdminOrBoard && (

Update status

{(newStatus === 'decided' || newStatus === 'closed') && (