'use client' import { useState, useTransition } from 'react' import { de } from '@/lib/i18n/de' import { changeStatusAction, reclassifyAction } from '../actions' /** * Statuswechsel und Umklassifizierung. * * Bewusst **nicht** optimistisch: beides ist folgenreich und teils nicht * umkehrbar. Stattdessen ein sofortiger Wartezustand am Knopf und eine klare * Rückmeldung. Siehe docs/09-performance-und-ux.md. */ export function CaseActions({ caseNumber, classification, statusTargets, levels, maxLevel, }: { caseNumber: string classification: number statusTargets: string[] levels: { level: number; name: string }[] maxLevel: number }) { const [nextStatus, setNextStatus] = useState(statusTargets[0] ?? '') const [statusReason, setStatusReason] = useState('') const [nextLevel, setNextLevel] = useState(classification) const [levelReason, setLevelReason] = useState('') const [error, setError] = useState(null) const [pending, startTransition] = useTransition() const lowering = nextLevel < classification function run(action: () => Promise<{ ok: boolean; error?: string }>, confirmText: string) { if (!confirm(confirmText)) return setError(null) startTransition(async () => { const result = await action() if (!result.ok) setError(result.error ?? de.case.errors.default!) }) } return (
{statusTargets.length > 0 ? (

{de.case.statusChange}

setStatusReason(event.target.value)} placeholder={de.entry.changeReason} className="w-56 border border-line bg-raised px-2 py-1" />
) : null}

{de.case.reclassify}

{/* Eine Herabstufung macht Inhalte für Leute sichtbar, die sie vorher nicht sehen durften. Deshalb ist die Begründung Pflicht. */} {lowering ? ( setLevelReason(event.target.value)} placeholder={de.case.reclassifyReason} className="w-64 border border-line bg-raised px-2 py-1" /> ) : null}
{error ?

{error}

: null}
) }