import { useState } from "react"; import { Navigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { useAuthStore } from "@/stores/auth-store"; import { getAdminTemplates, createTemplate, updateTemplate, deleteTemplate, previewTemplate, type PdfTemplate, } from "@/api/pdf-templates"; import { Plus, Pencil, Trash2, Eye, FileText, Info } from "lucide-react"; export function AdminPdfTemplatesPage() { const { t } = useTranslation(); const user = useAuthStore((s) => s.user); const queryClient = useQueryClient(); const [editing, setEditing] = useState(null); const [creating, setCreating] = useState(false); const [previewHtml, setPreviewHtml] = useState(null); const [showVars, setShowVars] = useState(false); // Form state const [name, setName] = useState(""); const [locale, setLocale] = useState("en"); const [description, setDescription] = useState(""); const [htmlContent, setHtmlContent] = useState(""); const { data: templates = [] } = useQuery({ queryKey: ["admin-pdf-templates"], queryFn: getAdminTemplates, }); const createMut = useMutation({ mutationFn: () => createTemplate({ name, locale, description, html_content: htmlContent }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["admin-pdf-templates"] }); resetForm(); }, }); const updateMut = useMutation({ mutationFn: () => updateTemplate(editing!.id, { name, locale, description, html_content: htmlContent }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["admin-pdf-templates"] }); resetForm(); }, }); const deleteMut = useMutation({ mutationFn: deleteTemplate, onSuccess: () => queryClient.invalidateQueries({ queryKey: ["admin-pdf-templates"] }), }); if (user?.role !== "admin") return ; function resetForm() { setCreating(false); setEditing(null); setPreviewHtml(null); setName(""); setLocale("en"); setDescription(""); setHtmlContent(""); } function startEdit(t: PdfTemplate) { setEditing(t); setName(t.name); setLocale(t.locale); setDescription(t.description || ""); setHtmlContent(t.html_content); setPreviewHtml(null); } async function handlePreview() { const html = await previewTemplate(htmlContent); setPreviewHtml(html); } if (creating || editing) { return (

{creating ? t("pdf_templates.create") : t("pdf_templates.edit")}

{showVars && (

{"{{ title }}"} — {t("pdf_templates.var_title")}

{"{{ user_name }}"} — {t("pdf_templates.var_user_name")}

{"{{ generated_at }}"} — {t("pdf_templates.var_generated_at")}

{"{{ memories }}"} — {t("pdf_templates.var_memories")}

{"{{ documents }}"} — {t("pdf_templates.var_documents")}

{"{{ ai_summary }}"} — {t("pdf_templates.var_ai_summary")}

)}
setName(e.target.value)} required className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm" />
setDescription(e.target.value)} className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm" />