Files
nexarch/web/pdf-viewer/components/CasePanel.tsx
T
patrickandClaude Sonnet 5 533efa891c DOC-13: akten vorgangsanzeige im dokumentkontext
CasePanel zeigt Akte-Zugehoerigkeit, Vermerke und offene Wiedervorlagen in
der Dokument-Detailansicht ueber die externe Workflow-Board-API (VOR-04) an.
Kein eigenes Akte-Datenmodell, Ausfall der externen API blockiert nur diesen
Bereich.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 00:08:16 +02:00

67 lines
1.9 KiB
TypeScript

"use client";
// DOC-13: Akte-Zugehörigkeit, Vermerke und offene Wiedervorlagen in der
// Dokument-Detailansicht — ausschließlich Anzeige über die externe
// Workflow-Board-API (VOR-04), kein eigenes Akte-Datenmodell in DMS
// (Akzeptanzkriterium 2). Ein Ausfall der externen API blockiert NUR
// diesen Bereich, nie die übrige Dokumentanzeige (Akzeptanzkriterium 3) —
// dieses Panel wirft daher nie, sondern rendert einen eigenen
// Fehlerzustand.
import { useEffect, useState } from "react";
import { CaseLookupResult, fetchCaseForDocument } from "../lib/caseApi";
export function CasePanel({ documentId }: { documentId: string }) {
const [result, setResult] = useState<CaseLookupResult | null>(null);
useEffect(() => {
let cancelled = false;
fetchCaseForDocument(documentId).then((r) => {
if (!cancelled) setResult(r);
});
return () => {
cancelled = true;
};
}, [documentId]);
if (result === null || result.status === "none") {
return null;
}
if (result.status === "unavailable") {
return (
<aside data-testid="case-panel" style={{ border: "1px solid #ccc", padding: 12, marginTop: 16 }}>
<p>Akte-Informationen vorübergehend nicht verfügbar.</p>
</aside>
);
}
const { info } = result;
return (
<aside data-testid="case-panel" style={{ border: "1px solid #ccc", padding: 12, marginTop: 16 }}>
<h2>Akte: {info.caseTitle}</h2>
{info.notes.length > 0 && (
<>
<h3>Vermerke</h3>
<ul>
{info.notes.map((n) => (
<li key={n.id}>{n.text}</li>
))}
</ul>
</>
)}
{info.openFollowUps.length > 0 && (
<>
<h3>Offene Wiedervorlagen</h3>
<ul>
{info.openFollowUps.map((f) => (
<li key={f.id}>
{f.dueDate}: {f.description}
</li>
))}
</ul>
</>
)}
</aside>
);
}