import { useRef, useState } from 'react' import { Link, useLocation } from 'react-router-dom' import { forgotPasswordApi } from '../services/auth' import usePageMeta from '../hooks/usePageMeta' import Captcha from '../components/Captcha' import { CAPTCHA_ENABLED } from '../config/captcha' // Demande d'un lien de réinitialisation. La réponse est volontairement la même // que le compte existe ou non, pour ne pas révéler quels emails sont inscrits. export default function MotDePasseOublie() { usePageMeta({ title: 'Mot de passe oublié | Thé Tip Top', description: 'Recevez par email un lien pour choisir un nouveau mot de passe pour votre compte Thé Tip Top.', }) // L'email déjà saisi sur la page de connexion est repris. const { state } = useLocation() const [email, setEmail] = useState(state?.email ?? '') const [sent, setSent] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) const [captchaToken, setCaptchaToken] = useState('') const captchaRef = useRef() const handleSubmit = async (e) => { e.preventDefault() setError('') setLoading(true) try { const data = await forgotPasswordApi({ email, captchaToken }) setSent(data.message) } catch (err) { setError(err.message) // Le jeton a été consommé par le backend : on en redemande un. captchaRef.current?.reset() setCaptchaToken('') } finally { setLoading(false) } } if (sent) { return (

Vérifiez vos emails

{sent}

Le lien est valable 30 minutes. Pensez à regarder dans vos courriers indésirables.

Retour à la connexion
) } return (

Mot de passe oublié

Saisissez l'adresse email de votre compte : nous vous enverrons un lien pour choisir un nouveau mot de passe.

{error && (
{error}
)}
setEmail(e.target.value)} required autoComplete="email" placeholder="Votre email" className="w-full border border-gray-200 rounded-lg px-4 py-3 text-sm text-gray-700 placeholder-gray-500 focus:outline-none focus:ring-1 focus:ring-[#006B6B] focus:border-[#006B6B]" />

Retour à la connexion

) }