"use client"; import { useQuery, useMutation } from "@tanstack/react-query"; import { useParams } from "next/navigation"; import { api } from "@/lib/api"; import type { DocumentTemplate, Case, RenderResponse } from "@/lib/types"; import { Breadcrumb } from "@/components/layout/Breadcrumb"; import { Loader2, FileDown, Copy, Check, } from "lucide-react"; import { useState } from "react"; import { toast } from "sonner"; export default function RenderTemplatePage() { const { id } = useParams<{ id: string }>(); const [selectedCaseId, setSelectedCaseId] = useState(""); const [rendered, setRendered] = useState(null); const [copied, setCopied] = useState(false); const { data: template, isLoading: templateLoading } = useQuery({ queryKey: ["template", id], queryFn: () => api.get(`/templates/${id}`), }); const { data: casesData, isLoading: casesLoading } = useQuery({ queryKey: ["cases"], queryFn: () => api.get<{ data: Case[]; total: number }>("/cases?limit=100"), }); const cases = casesData?.data ?? []; const renderMutation = useMutation({ mutationFn: () => api.post( `/templates/${id}/render${selectedCaseId ? `?case_id=${selectedCaseId}` : ""}`, ), onSuccess: (data) => setRendered(data), onError: () => toast.error("Fehler beim Erstellen"), }); const handleCopy = async () => { if (!rendered) return; await navigator.clipboard.writeText(rendered.content); setCopied(true); toast.success("In Zwischenablage kopiert"); setTimeout(() => setCopied(false), 2000); }; const handleDownload = () => { if (!rendered) return; const blob = new Blob([rendered.content], { type: "text/markdown" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `${rendered.name.replace(/\s+/g, "_")}.md`; a.click(); URL.revokeObjectURL(url); toast.success("Dokument heruntergeladen"); }; if (templateLoading) { return (
); } if (!template) { return (
Vorlage nicht gefunden
); } return (

Dokument erstellen

Vorlage “{template.name}” mit Falldaten befüllen

{/* Step 1: Select case */}

1. Akte auswählen

{casesLoading ? ( ) : ( )}
{/* Step 2: Render */}

2. Vorschau erstellen

{rendered && (
{rendered.content}
)}
); }