import L from 'leaflet'; import { registerClient } from '../api.js'; import { setSession } from '../auth.js'; import { resolveCurrentPosition } from '../geolocation.js'; let mapInstance = null; let mapMarker = null; function destroyMap() { if (mapInstance) { mapInstance.remove(); } mapInstance = null; mapMarker = null; } function ensureMap(container, lat, lng, onMove) { destroyMap(); mapInstance = L.map(container, { zoomControl: false }).setView([lat, lng], 15); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap', }).addTo(mapInstance); mapMarker = L.marker([lat, lng], { draggable: true }).addTo(mapInstance); mapMarker.on('dragend', () => { const position = mapMarker.getLatLng(); onMove(position.lat, position.lng); }); mapInstance.on('click', (event) => { mapMarker.setLatLng(event.latlng); onMove(event.latlng.lat, event.latlng.lng); }); } export async function renderOnboarding(root, onRegistered) { root.innerHTML = `
e-Intervention
Création d'espace client

Créer mon compte

Enregistrez votre abonnement, votre contact et votre localisation pour déclarer vos incidents depuis l'application.

Vous avez déjà un compte ? Se connecter
Position géographique domicile
Touchez la carte ou utilisez votre position actuelle.
`; const form = root.querySelector('#onboardingForm'); const errorBox = root.querySelector('#errorBox'); const homeLat = root.querySelector('#homeLat'); const homeLng = root.querySelector('#homeLng'); const homeMap = root.querySelector('#homeMap'); const setCoordinates = (lat, lng) => { homeLat.value = String(lat.toFixed(7)); homeLng.value = String(lng.toFixed(7)); }; setCoordinates(5.3599517, -4.0082563); ensureMap(homeMap, Number(homeLat.value), Number(homeLng.value), setCoordinates); root.querySelector('#btnLocate').addEventListener('click', async () => { errorBox.hidden = true; try { const position = await resolveCurrentPosition(); setCoordinates(position.latitude, position.longitude); ensureMap(homeMap, position.latitude, position.longitude, setCoordinates); } catch (error) { errorBox.hidden = false; errorBox.textContent = error?.code === 'geolocation_permission_denied' ? 'La permission de localisation a été refusée. Autorisez la position dans Android puis réessayez.' : 'Impossible de récupérer la position actuelle. Vérifiez le GPS et les autorisations de localisation.'; } }); form.addEventListener('submit', async (event) => { event.preventDefault(); errorBox.hidden = true; const payload = Object.fromEntries(new FormData(form).entries()); try { const response = await registerClient(payload); if (!response?.ok || !response?.token) { throw new Error('register_failed'); } setSession(response.token, response.client); onRegistered(); } catch (error) { errorBox.hidden = false; if (error?.status === 409) { errorBox.textContent = 'Cet email est déjà utilisé par un autre compte client.'; } else if (error?.status === 400) { errorBox.textContent = 'Certaines informations sont invalides ou incomplètes. Vérifiez le formulaire puis réessayez.'; } else if (error?.status === 404 || error?.status >= 500) { errorBox.textContent = 'Le service de création de compte n\'est pas disponible sur ce serveur pour le moment.'; } else { errorBox.textContent = 'Connexion impossible pour le moment. Vérifiez votre connexion réseau puis réessayez.'; } } }); }