function formatStatus(status) { const map = { soumis: 'Soumise', prise_en_charge: 'Prise en charge', assigne_technicien: 'Technicien assigné', en_cours: 'En cours', resolu: 'Résolue', ferme: 'Fermée', }; return map[status] || status || '—'; } export async function renderHistory(root, { incidents = [] }) { root.innerHTML = `
Traçabilité client

Historique de vos déclarations

Retrouvez ici vos incidents, les tickets FTTH liés et le niveau de prise en charge opérateur.

${incidents.length ? incidents.map((item) => `
${escapeHtml(item.subject || 'Incident client')}

${escapeHtml(item.description || '')}

${escapeHtml(formatStatus(item.status))}
${escapeHtml(item.ref_code || ('FTTH-' + item.ticket_id))} ${escapeHtml(item.client_address || 'Adresse à confirmer')} ${Number(item.photo_count || 0)} photo(s) ${escapeHtml(formatDateTime(item.created_at))}
`).join('') : '
Aucune déclaration n\'a encore été enregistrée.
'}
`; } function formatDateTime(value) { if (!value) { return '—'; } const date = new Date(String(value).replace(' ', 'T')); if (Number.isNaN(date.getTime())) { return value; } return date.toLocaleString('fr-FR', { dateStyle: 'medium', timeStyle: 'short' }); } function escapeHtml(value) { return String(value ?? '') .replaceAll('&', '&') .replaceAll('<', '<') .replaceAll('>', '>') .replaceAll('"', '"') .replaceAll("'", '''); }