import { useState, useEffect } from 'react'; import { Link, useSearchParams } from 'react-router-dom'; import AuthBgCol from '../components/AuthBgCol.jsx'; export default function VerifyEmail() { const [params] = useSearchParams(); const token = params.get('token') || ''; const [status, setStatus] = useState('loading'); // 'loading' | 'ok' | 'error' const [errMsg, setErrMsg] = useState(''); const [appInfo, setAppInfo] = useState({ appName: 'Crowdlending Tracker', iconUrl: null }); useEffect(() => { fetch('/api/app-info').then(r => r.json()).then(d => setAppInfo(d)).catch(() => {}); }, []); useEffect(() => { if (!token) { setStatus('error'); setErrMsg('Lien de vérification invalide ou manquant.'); return; } fetch(`/api/auth/verify-email?token=${encodeURIComponent(token)}`) .then(async r => { const data = await r.json(); if (!r.ok) { setErrMsg(data.error || 'Lien invalide.'); setStatus('error'); } else setStatus('ok'); }) .catch(() => { setErrMsg('Impossible de joindre le serveur.'); setStatus('error'); }); }, [token]); return (
{appInfo.iconUrl && {appInfo.appName}} {appInfo.appName}
{status === 'loading' && (

Vérification en cours…

)} {status === 'ok' && ( <>

Email vérifié !

Votre adresse email a bien été confirmée. Vous pouvez maintenant vous connecter.

Se connecter )} {status === 'error' && ( <>

Lien invalide

{errMsg}

Retour à la connexion )}
); }