import React from 'react'; import { EmailTemplate } from '../types'; import { Plus, Edit, Trash2, FileCode, Search, Database, ArrowRightCircle, Code, CopyPlus, Key, HelpCircle, X, Globe, Server, Braces } from 'lucide-react'; import { generateSelectSQL, generateN8nCode, generateTemplateKey } from '../services/storage'; interface Props { templates: EmailTemplate[]; onCreate: () => void; onEdit: (t: EmailTemplate) => void; onClone: (t: EmailTemplate) => void; onDelete: (id: string) => void; } const TemplateList: React.FC = ({ templates, onCreate, onEdit, onClone, onDelete }) => { const [search, setSearch] = React.useState(''); const [showHelp, setShowHelp] = React.useState(false); const filtered = templates.filter(t => t.name.toLowerCase().includes(search.toLowerCase()) || t.subject.toLowerCase().includes(search.toLowerCase()) ); const copySelectSQL = (t: EmailTemplate, e: React.MouseEvent) => { e.stopPropagation(); const sql = generateSelectSQL(t); navigator.clipboard.writeText(sql); alert('Query SELECT copiata! Usala nel tuo nodo SQL su n8n.'); }; const copyN8nCode = (t: EmailTemplate, e: React.MouseEvent) => { e.stopPropagation(); const code = generateN8nCode(t); navigator.clipboard.writeText(code); alert('Codice JS copiato! Incollalo nel tuo nodo Code su n8n.'); }; const copyTemplateKey = (t: EmailTemplate, e: React.MouseEvent) => { e.stopPropagation(); const key = generateTemplateKey(t.name); navigator.clipboard.writeText(key); alert(`Chiave Template '${key}' copiata negli appunti!`); }; return (

Template Email

Gestisci i template HTML per i tuoi flussi di lavoro n8n

setSearch(e.target.value)} className="pl-10 w-full px-4 py-2 border border-slate-200 rounded-lg focus:ring-2 focus:ring-brand-500 focus:border-brand-500 outline-none text-slate-700 bg-white shadow-sm" />
{filtered.length === 0 ? (

Nessun template trovato

Inizia creando il tuo primo template email HTML per l'automazione.

) : (
{filtered.map(t => (
onEdit(t)} className="bg-white rounded-xl border border-slate-200 shadow-sm hover:shadow-md transition-shadow cursor-pointer group flex flex-col h-60" >

{t.name}

{new Date(t.updatedAt).toLocaleDateString('it-IT')}

{t.description || 'Nessuna descrizione fornita.'}

Oggetto:
{t.subject}
{t.variables.slice(0, 3).map(v => ( {'{{' + v + '}}'} ))} {t.variables.length > 3 && ( + {t.variables.length - 3} altri )}
))}
)} {/* API Documentation Modal */} {showHelp && (
{/* Modal Header */}

Guida Integrazione API

Come inviare email esternamente

{/* Modal Content */}

Dopo aver definito il template, la mail può essere inviata tramite l'endpoint API 'https://ap.site.unisa.it/api/v1/webhooks/NxUftpB17tWeJIZmzN4wl'

PARAMETRI DA PASSARE:

{/* Endpoint */}
https://ap.site.unisa.it/api/v1/webhooks/NxUftpB17tWeJIZmzN4wl
{/* Headers */}
Chiave Header Valore / Descrizione
template <template_key> Recuperabile tramite l'icona Chiave nella card del template. Serve al sistema per recuperare il template corretto.
destinatario email@esempio.it L'indirizzo email del destinatario.
{/* Body */}

Passa qui i valori delle variabili dinamiche.

{'{'}
"nome": "Mario",
"cognome": "Rossi",
"email": "mrossi@unisa.it"
{'}'}
{/* Modal Footer */}
)}
); }; export default TemplateList;