import type { Route } from "./+types/verify"; import { ArrowLeft, CheckCircleIcon, LoaderIcon, RefreshCwIcon, } from "lucide-react"; import { useEffect, useState } from "react"; import { useNavigate } from "react-router"; import { useSearchParams } from "react-router"; import OtpInput from "~/components/input-otp"; import { Alert, AlertDescription } from "~/components/ui/alert"; import { Button } from "~/components/ui/button"; import AuthLayout from "~/layout"; export function meta({}: Route.MetaArgs) { return [ { title: "Khollisé - Connexion" }, { name: "description", content: "Connectez-vous à Khollisé" }, ]; } export default function Verify() { const navigate = useNavigate(); const [searchParams] = useSearchParams() const email = searchParams.get("email"); if (!email) { // TODO: Redirect to login page return } const [isResending, setIsResending] = useState(false); const [resendSuccess, setResendSuccess] = useState(false); const [cooldown, setCooldown] = useState(0); const [otpError, setOtpError] = useState(null); // Countdown for the resend button useEffect(() => { if (cooldown <= 0) return; const timer = setInterval(() => { setCooldown((prev) => Math.max(0, prev - 1)); }, 1000); return () => clearInterval(timer); }, [cooldown]); const handleResendOtp = async () => { if (cooldown > 0) return; setIsResending(true); setResendSuccess(false); try { // Appeler l'API pour renvoyer un code OTP const response = await fetch("/api/auth/resend-otp", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email }), }); const data = await response.json(); if (!response.ok) { throw new Error(data.error || "Échec de l'envoi du nouveau code"); } // Afficher le message de succès setResendSuccess(true); // Démarrer le cooldown (60 secondes) setCooldown(60); } catch (error) { console.error("Erreur lors de la demande d'un nouveau code:", error); setOtpError( error instanceof Error ? error.message : "Échec de l'envoi du nouveau code" ); } finally { setIsResending(false); } }; return (
Nous avons envoyé un email à {email}

Que se passe-t-il ensuite ?

  • Consultez votre email (vérifiez le dossier spam)
  • Cliquez sur le lien pour vous connecter ou entrez le code à 6 chiffres

Entrez le code de vérification

{resendSuccess && ( Un nouveau code a été envoyé à votre adresse email )}
); }