import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { toast } from "sonner"; import { trpc } from "@/lib/trpc"; import { useLocation, Link } from "wouter"; import { Loader2, CheckCircle2 } from "lucide-react"; import { APP_LOGO } from "@/const"; export default function ResetPassword() { const [, setLocation] = useLocation(); const [token, setToken] = useState(""); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [success, setSuccess] = useState(false); useEffect(() => { // Extraire le token depuis l'URL const params = new URLSearchParams(window.location.search); const tokenParam = params.get("token"); if (tokenParam) { setToken(tokenParam); } else { toast.error("Token manquant", { description: "Le lien de réinitialisation est invalide.", }); } }, []); const resetPasswordMutation = trpc.auth.resetPassword.useMutation({ onSuccess: () => { setSuccess(true); toast.success("Mot de passe réinitialisé", { description: "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.", }); setTimeout(() => { setLocation("/login"); }, 3000); }, onError: (error) => { toast.error("Erreur", { description: error.message, }); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!newPassword || !confirmPassword) { toast.error("Veuillez remplir tous les champs"); return; } if (newPassword.length < 8) { toast.error("Le mot de passe doit contenir au moins 8 caractères"); return; } if (newPassword !== confirmPassword) { toast.error("Les mots de passe ne correspondent pas"); return; } resetPasswordMutation.mutate({ token, newPassword }); }; if (success) { return (
{APP_LOGO && (
Logo
)}
Mot de passe réinitialisé Votre mot de passe a été modifié avec succès. Vous allez être redirigé vers la page de connexion...
); } if (!token) { return (
{APP_LOGO && (
Logo
)} Lien invalide Le lien de réinitialisation est invalide ou a expiré.
); } return (
{APP_LOGO && (
Logo
)} Nouveau mot de passe Choisissez un nouveau mot de passe pour votre compte
setNewPassword(e.target.value)} required minLength={8} />
setConfirmPassword(e.target.value)} required minLength={8} />
); }