import { createIncident, createIncidentFormData } from '../api.js'; import { resolveCurrentPosition } from '../geolocation.js'; export async function renderDeclareIncident(root, { client, onSuccess }) { root.innerHTML = `
Déclaration client

Nouvel incident e-Intervention

Ajoutez votre description, joignez plusieurs photos et laissez un commentaire par photo.

Votre position actuelle sera transmise si disponible. Votre domicile enregistré complète automatiquement le dossier FTTH.
Astuce: utilisez le GPS du téléphone si vous déclarez depuis le site concerné.
Vous pouvez joindre plusieurs photos. Un commentaire sera demandé pour chacune.
`; const errorBox = root.querySelector('#incidentError'); const successBox = root.querySelector('#incidentSuccess'); const form = root.querySelector('#incidentForm'); const photoInput = root.querySelector('#incidentPhotos'); const photoCommentList = root.querySelector('#photoCommentList'); const submittedLat = root.querySelector('#submittedLat'); const submittedLng = root.querySelector('#submittedLng'); let selectedFiles = []; root.querySelector('#btnLocateIncident').addEventListener('click', async () => { errorBox.hidden = true; try { const position = await resolveCurrentPosition(); submittedLat.value = String(position.latitude.toFixed(7)); submittedLng.value = String(position.longitude.toFixed(7)); } catch (error) { errorBox.hidden = false; errorBox.textContent = error?.code === 'geolocation_permission_denied' ? 'La permission de localisation a été refusée. Autorisez-la dans Android puis réessayez.' : 'Impossible de récupérer la position actuelle. Vérifiez le GPS et les autorisations de localisation.'; } }); photoInput.addEventListener('change', () => { selectedFiles = Array.from(photoInput.files || []).map((file, index) => ({ file, comment: '', key: `${file.name}-${index}` })); renderPhotoCommentEditors(); }); function renderPhotoCommentEditors() { if (!selectedFiles.length) { photoCommentList.innerHTML = ''; return; } photoCommentList.innerHTML = selectedFiles.map((item, index) => `
Photo ${index + 1} ${escapeHtml(item.file.name)}
`).join(''); photoCommentList.querySelectorAll('[data-role="photo-comment"]').forEach((textarea) => { textarea.addEventListener('input', (event) => { const index = Number(event.currentTarget.dataset.index || 0); if (selectedFiles[index]) { selectedFiles[index].comment = event.currentTarget.value; } }); }); } form.addEventListener('submit', async (event) => { event.preventDefault(); errorBox.hidden = true; successBox.hidden = true; const payload = Object.fromEntries(new FormData(form).entries()); const formData = createIncidentFormData(payload, selectedFiles); try { const response = await createIncident(formData); if (!response?.ok) { throw new Error('incident_failed'); } form.reset(); selectedFiles = []; renderPhotoCommentEditors(); successBox.hidden = false; successBox.textContent = 'Votre déclaration a été transmise au service client. Vous recevrez les notifications de prise en charge dans votre espace.'; onSuccess?.(); } catch (error) { errorBox.hidden = false; errorBox.textContent = error?.status ? 'La demande n\'a pas pu être transmise. Vérifiez les champs du formulaire.' : 'Serveur e-Intervention injoignable. Vérifiez le réseau de l\'appareil.'; } }); } function escapeHtml(value) { return String(value ?? '') .replaceAll('&', '&') .replaceAll('<', '<') .replaceAll('>', '>') .replaceAll('"', '"') .replaceAll("'", '''); }