import React, { useState, useEffect } from "react"; import { generateId, textToHtml, htmlToText } from "../utils.js"; import { Header, FormField, RichEditor, useConfirm } from "../components/UI.jsx"; export default function Letters({ data, update, setPrintContent }) { const [selectedTemplate, setSelectedTemplate] = useState(data.letterTemplates[0]?.id || ""); const [clientId, setClientId] = useState(""); const [projectId, setProjectId] = useState(""); const [body, setBody] = useState(() => textToHtml(data.letterTemplates[0]?.body || "")); const { askConfirm, ConfirmModalEl } = useConfirm(); const [subject, setSubject] = useState(data.letterTemplates[0]?.name || ""); const prevTemplate = React.useRef(selectedTemplate); useEffect(() => { const tpl = data.letterTemplates.find(t => t.id === selectedTemplate); if (tpl) { const client = ((data.persons||[]).filter(p=>p.isAuftraggeber)).find(c => c.id === clientId); const proj = data.projects.find(p => p.id === projectId); let text = tpl.body || ""; text = text.replace(/\{\{client\}\}/g, client?.name || "[Kunde]"); text = text.replace(/\{\{project\}\}/g, proj?.name || "[Projekt]"); setBody(textToHtml(text)); setSubject(tpl.name); } }, [selectedTemplate, clientId, projectId]); const client = ((data.persons||[]).filter(p=>p.isAuftraggeber)).find(c => c.id === clientId); const saveAsTemplate = () => { const name = prompt("Name der neuen Vorlage?"); if (!name) return; const tpl = { id: generateId(), name, body }; update("letterTemplates", [...data.letterTemplates, tpl]); setSelectedTemplate(tpl.id); }; const updateTemplate = () => { update("letterTemplates", data.letterTemplates.map(t => t.id === selectedTemplate ? { ...t, body } : t)); }; const deleteTemplate = async () => { if (!(await askConfirm("Vorlage löschen?"))) return; const remaining = data.letterTemplates.filter(t => t.id !== selectedTemplate); update("letterTemplates", remaining); setSelectedTemplate(remaining[0]?.id || ""); }; return (
{ConfirmModalEl}
setPrintContent({ type: "letter", client, subject, body, isHtml: true, settings: data.settings })}> Drucken / PDF } />
{/* Linke Spalte */}
VORLAGE
EMPFÄNGER
PLATZHALTER
{"{{client}}"} Kundenname
{"{{project}}"} Projektname
{/* Editor */}
setSubject(e.target.value)} placeholder="Betreff / Titel" style={{ fontSize: 15, fontWeight: 500, border: "none", background: "transparent", color: "var(--text)", width: "100%", outline: "none", height: "auto" }} />
); }