- Database: kanzlai.document_templates table with RLS policies
- Seed: 4 system templates (Klageerwiderung UPC, Berufungsschrift,
Mandatsbestätigung, Kostenrechnung)
- Backend: TemplateService (CRUD + render), TemplateHandler with
endpoints: GET/POST /api/templates, GET/PUT/DELETE /api/templates/{id},
POST /api/templates/{id}/render?case_id=X
- Template variables: case.*, party.*, tenant.*, user.*, date.*, deadline.*
- Frontend: /vorlagen page with category filters, template detail/editor,
render flow (select case -> preview -> copy/download), variable toolbar
- Quick action: "Schriftsatz erstellen" button on case detail page
- Also: resolved merge conflicts between audit-trail and role-based branches,
added missing Notification/AuditLog types to frontend
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
"use client";
|
|
|
|
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { useRouter } from "next/navigation";
|
|
import { api } from "@/lib/api";
|
|
import type { DocumentTemplate } from "@/lib/types";
|
|
import { Breadcrumb } from "@/components/layout/Breadcrumb";
|
|
import { TemplateEditor } from "@/components/templates/TemplateEditor";
|
|
import { toast } from "sonner";
|
|
|
|
export default function NeueVorlagePage() {
|
|
const router = useRouter();
|
|
const queryClient = useQueryClient();
|
|
|
|
const createMutation = useMutation({
|
|
mutationFn: (data: Partial<DocumentTemplate>) =>
|
|
api.post<DocumentTemplate>("/templates", data),
|
|
onSuccess: (result) => {
|
|
queryClient.invalidateQueries({ queryKey: ["templates"] });
|
|
toast.success("Vorlage erstellt");
|
|
router.push(`/vorlagen/${result.id}`);
|
|
},
|
|
onError: () => toast.error("Fehler beim Erstellen"),
|
|
});
|
|
|
|
return (
|
|
<div className="animate-fade-in space-y-4">
|
|
<Breadcrumb
|
|
items={[
|
|
{ label: "Dashboard", href: "/dashboard" },
|
|
{ label: "Vorlagen", href: "/vorlagen" },
|
|
{ label: "Neue Vorlage" },
|
|
]}
|
|
/>
|
|
|
|
<h1 className="text-lg font-semibold text-neutral-900">
|
|
Neue Vorlage erstellen
|
|
</h1>
|
|
|
|
<TemplateEditor
|
|
onSave={(data) => createMutation.mutate(data)}
|
|
isSaving={createMutation.isPending}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|