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>
67 lines
1.9 KiB
TypeScript
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>
|
|
);
|
|
}
|