// ECO-PANNEAU.FR - _react/riverains/_riverains_newsletter.jsx const { useState, useEffect } = React; window.pano_RiverainNewsletterTab = ({ panneau, themeColor, showToast, isPreview = false }) => { // 1. - SÉCURITÉ ANTI-FUITE DE MÉMOIRE : Utilisation du Hook Global Zéro-Dette const { isMounted, safeFetch } = window.pano_useSafeFetch(); // 2. - Hooks et Composants const { openDialog } = window.pano_useUrlModal(); const { MailIcon, LoaderIcon, CheckCircleIcon, ArrowRightIcon } = window.pano_getIcons(); const { Button } = window.pano_getComponents(); // 3. - Détection du mode simulation (Aperçu Admin ou Panneau Démo) const isSimulated = isPreview || panneau?.id === 'demo-panneau' || new URLSearchParams(window.location.search).get('modal') === 'preview'; // 4. - États locaux const [email, setEmail] = useState(''); const [status, setStatus] = useState('idle'); // idle, requesting, verifying, success const [verifySession, setVerifySession] = useState(''); const [verifyCode, setVerifyCode] = useState(''); const [submitting, setSubmitting] = useState(false); // 5. - Actions métier const handleSubscribeRequest = async (e) => { e.preventDefault(); // Blocage de l'action si on est en mode aperçu if (isSimulated) { openDialog('demo_warning', 'chat'); return; } if (!email.trim() || !email.includes('@')) { if (showToast) showToast("Veuillez saisir une adresse e-mail valide.", "error"); return; } const d = await safeFetch('newsletter/subscribe_request', { body: { email: email.trim(), panneau_id: panneau.id }, setLoading: setSubmitting, successMessage: "Un code de vérification a été envoyé à votre adresse e-mail." }); if (!isMounted.current) return; // SÉCURITÉ : Coupe-circuit if (d && d.data && d.data.verify_session) { setVerifySession(d.data.verify_session); setStatus('verifying'); } }; const handleVerifyCode = async (e) => { e.preventDefault(); if (verifyCode.length !== 6) return; const d = await safeFetch('newsletter/subscribe_confirm', { body: { verify_session: verifySession, code: verifyCode }, setLoading: setSubmitting, successMessage: "Inscription confirmée avec succès !" }); if (!isMounted.current) return; // SÉCURITÉ : Coupe-circuit if (d) { setStatus('success'); } }; // 6. - Rendu UI if (status === 'success') { return (
Vous recevrez désormais les actualités et les informations importantes concernant ce chantier directement par e-mail.
Un code à 6 chiffres a été envoyé à {email}. Saisissez-le ci-dessous pour confirmer votre inscription.
Inscrivez-vous à la newsletter du chantier pour recevoir les alertes importantes (coupures de route, livraisons exceptionnelles, etc.) directement dans votre boîte mail.
Votre e-mail ne sera utilisé que pour les communications relatives à ce chantier. Vous pourrez vous désinscrire à tout moment.