// DocumentTemplateEditor — textarea + preview/save/reset for one org overlay // of an addon document. Headless-friendly: plain buttons + textarea, styled via // className. Host surfaces (ops Plantillas) can wrap this or roll their own // using the hooks in use-org-document-templates. import { useEffect, useState } from 'react' import { useOrgDocumentTemplate, usePreviewOrgDocumentTemplate, useResetOrgDocumentTemplate, useSaveOrgDocumentTemplate, } from './use-org-document-templates' export interface DocumentTemplateEditorProps { addonKey: string documentKey: string /** Called after a successful save or reset. */ onSaved?: () => void onError?: (err: unknown) => void className?: string disabled?: boolean } export function DocumentTemplateEditor({ addonKey, documentKey, onSaved, onError, className, disabled, }: DocumentTemplateEditorProps) { const { template, isLoading } = useOrgDocumentTemplate(addonKey, documentKey) const save = useSaveOrgDocumentTemplate() const reset = useResetOrgDocumentTemplate() const preview = usePreviewOrgDocumentTemplate() const [html, setHtml] = useState('') const [previewUrl, setPreviewUrl] = useState(null) const [previewing, setPreviewing] = useState(false) useEffect(() => { if (template?.html != null) setHtml(template.html) }, [template?.html]) useEffect(() => { return () => { if (previewUrl) URL.revokeObjectURL(previewUrl) } }, [previewUrl]) const busy = save.isPending || reset.isPending || previewing || disabled async function onPreview() { setPreviewing(true) try { const url = await preview({ addonKey, documentKey, html, paper: template?.paper, }) setPreviewUrl((prev) => { if (prev) URL.revokeObjectURL(prev) return url }) } catch (err) { onError?.(err) } finally { setPreviewing(false) } } async function onSave() { try { await save.mutateAsync({ addonKey, documentKey, html, paper: template?.paper, }) onSaved?.() } catch (err) { onError?.(err) } } async function onReset() { try { const detail = await reset.mutateAsync({ addonKey, documentKey }) setHtml(detail.html) onSaved?.() } catch (err) { onError?.(err) } } if (isLoading && !template) { return

} return (