import { useState } from "react"; import { useT } from "../../i18n"; import { ApiError } from "../../lib/api"; import type { MailTemplate } from "../../lib/types"; import { AppDialog, DialogButtons } from "../AppDialog"; /** Compose → More → Templates → Save as template: name it, save it. A name * already taken turns the button into "Replace" rather than asking again. */ export function SaveTemplateDialog({ initialName, existing, onSave, onClose, }: { initialName: string; existing: MailTemplate[]; onSave: (name: string) => Promise; onClose: () => void; }) { const t = useT(); const [name, setName] = useState(initialName); const [saving, setSaving] = useState(false); const [error, setError] = useState(""); const trimmed = name.trim(); const taken = existing.some((x) => x.name.toLowerCase() === trimmed.toLowerCase()); const submit = async (e: React.FormEvent) => { e.preventDefault(); if (!trimmed || saving) return; setSaving(true); setError(""); try { await onSave(trimmed); onClose(); } catch (err) { setError(err instanceof ApiError ? err.message : t("compose.templateSaveFailed")); setSaving(false); } }; return (

{t("compose.saveTemplateHint")}

{taken &&

{t("compose.templateReplaceNote")}

} {error &&

{error}

}
); }