"use client"; import { useState } from "react"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { FileText, Download, Trash2, Loader2 } from "lucide-react"; import { format } from "date-fns"; import { de } from "date-fns/locale"; import { toast } from "sonner"; import { api } from "@/lib/api"; import type { Document } from "@/lib/types"; const DOC_TYPE_BADGE: Record = { schriftsatz: "bg-blue-50 text-blue-700", beschluss: "bg-violet-50 text-violet-700", urteil: "bg-emerald-50 text-emerald-700", gutachten: "bg-amber-50 text-amber-700", vertrag: "bg-cyan-50 text-cyan-700", korrespondenz: "bg-neutral-100 text-neutral-600", }; interface DocumentListProps { documents: Document[]; caseId: string; } export function DocumentList({ documents, caseId }: DocumentListProps) { const [deleteId, setDeleteId] = useState(null); const queryClient = useQueryClient(); const deleteMutation = useMutation({ mutationFn: (docId: string) => api.delete(`/documents/${docId}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["case-documents", caseId] }); queryClient.invalidateQueries({ queryKey: ["case", caseId] }); toast.success("Dokument geloescht"); setDeleteId(null); }, onError: (err) => { const msg = err && typeof err === "object" && "error" in err ? (err as { error: string }).error : "Unbekannter Fehler"; toast.error(`Fehler beim Loeschen: ${msg}`); setDeleteId(null); }, }); if (documents.length === 0) { return (

Keine Dokumente vorhanden.

); } return (
{documents.map((doc) => (

{doc.title}

{doc.doc_type && ( {doc.doc_type} )} {doc.file_size != null && ( {formatFileSize(doc.file_size)} )} {format(new Date(doc.created_at), "d. MMM yyyy", { locale: de, })}
{deleteId === doc.id ? (
) : ( )}
))}
); } function formatFileSize(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)} KB`; return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; }