/** * signatures.js * Pagina di gestione delle firme email per agente. * Usa Quill.js come editor WYSIWYG. */ const SignaturesView = { agentId: null, signatures: [], editingId: null, signatureQuill: null, async render() { this.agentId = App.currentAgentId || 0; const container = document.getElementById('view-container'); container.innerHTML = `

✉️ Le Mie Firme Email

Gestisci le firme da allegare automaticamente alle email inviate dal ticket.

`; document.getElementById('btn-new-signature').addEventListener('click', () => this.openEditor(null)); await this.loadSignatures(); }, async loadSignatures() { try { this.signatures = await App.api(`/api/email/signatures?agent_id=${this.agentId}`); this.renderList(); } catch (err) { Toast.error('Errore caricamento firme: ' + err.message); } }, renderList() { const list = document.getElementById('signatures-list'); if (!list) return; if (!this.signatures.length) { list.innerHTML = `
✉️
Nessuna firma configurata
Crea la tua prima firma per velocizzare l'invio delle email.
`; return; } list.innerHTML = this.signatures.map(sig => `
${App.escapeHtml(sig.name)} ${sig.is_default ? 'Predefinita' : ''}
Creata: ${new Date(sig.created_at).toLocaleDateString('it-IT')}
${!sig.is_default ? `` : ''}
${sig.body_html ? `
${sig.body_html}
` : ''}
`).join(''); // Bind buttons list.querySelectorAll('.sig-btn-edit').forEach(btn => { btn.addEventListener('click', () => this.openEditor(parseInt(btn.dataset.id, 10))); }); list.querySelectorAll('.sig-btn-delete').forEach(btn => { btn.addEventListener('click', () => this.deleteSig(parseInt(btn.dataset.id, 10))); }); list.querySelectorAll('.sig-btn-default').forEach(btn => { btn.addEventListener('click', () => this.setDefault(parseInt(btn.dataset.id, 10))); }); }, openEditor(id) { this.editingId = id; const sig = id ? this.signatures.find(s => s.id === id) : null; const modal = document.getElementById('signature-editor-modal'); modal.style.display = 'flex'; document.getElementById('sig-modal-title').textContent = id ? 'Modifica Firma' : 'Nuova Firma'; document.getElementById('sig-name').value = sig ? sig.name : ''; document.getElementById('sig-is-default').checked = sig ? !!sig.is_default : false; // Init or reset Quill if (this.signatureQuill) { this.signatureQuill.root.innerHTML = sig ? (sig.body_html || '') : ''; } else { this.signatureQuill = new Quill('#sig-quill-editor', { theme: 'snow', placeholder: 'Inserisci la tua firma...', modules: { toolbar: [ ['bold', 'italic', 'underline'], [{ 'color': [] }], ['link', 'image'], ['clean'] ] } }); if (sig && sig.body_html) { this.signatureQuill.clipboard.dangerouslyPasteHTML(sig.body_html); } } document.getElementById('sig-modal-close').onclick = () => this.closeEditor(); document.getElementById('sig-cancel').onclick = () => this.closeEditor(); document.getElementById('sig-save').onclick = () => this.saveSig(); modal.onclick = (e) => { if (e.target === modal) this.closeEditor(); }; }, closeEditor() { const modal = document.getElementById('signature-editor-modal'); if (modal) modal.style.display = 'none'; this.editingId = null; }, async saveSig() { const name = document.getElementById('sig-name').value.trim(); const body_html = this.signatureQuill ? this.signatureQuill.root.innerHTML : ''; const is_default = document.getElementById('sig-is-default').checked ? 1 : 0; if (!name) { Toast.warning('Inserisci un nome per la firma'); return; } const saveBtn = document.getElementById('sig-save'); saveBtn.disabled = true; saveBtn.textContent = 'Salvataggio...'; try { const payload = { agent_id: this.agentId, name, body_html, is_default }; if (this.editingId) { await App.api(`/api/email/signatures/${this.editingId}`, { method: 'PUT', body: JSON.stringify(payload), }); Toast.success('Firma aggiornata'); } else { await App.api('/api/email/signatures', { method: 'POST', body: JSON.stringify(payload), }); Toast.success('Firma creata'); } this.closeEditor(); await this.loadSignatures(); } catch (err) { Toast.error('Errore salvataggio: ' + err.message); } finally { saveBtn.disabled = false; saveBtn.textContent = 'Salva Firma'; } }, async deleteSig(id) { const ok = await App.confirm('Elimina Firma', 'Sei sicuro di voler eliminare questa firma?'); if (!ok) return; try { await App.api(`/api/email/signatures/${id}`, { method: 'DELETE' }); Toast.success('Firma eliminata'); await this.loadSignatures(); } catch (err) { Toast.error('Errore eliminazione: ' + err.message); } }, async setDefault(id) { try { await App.api(`/api/email/signatures/${id}/default`, { method: 'PATCH', body: JSON.stringify({ agent_id: this.agentId }), }); Toast.success('Firma impostata come predefinita'); await this.loadSignatures(); } catch (err) { Toast.error('Errore: ' + err.message); } } }; window.SignaturesView = SignaturesView;