'use client';
import { useState, Suspense } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import Link from 'next/link';
import { Lock, Loader2, Languages, Eye, EyeOff, CheckCircle, ArrowLeft } from 'lucide-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 { apiClient } from '@/lib/apiClient';
function validatePassword(password: string) {
return password.length >= 8
&& /[A-Z]/.test(password)
&& /[a-z]/.test(password)
&& /[0-9]/.test(password);
}
function ResetPasswordForm() {
const router = useRouter();
const searchParams = useSearchParams();
const token = searchParams.get('token');
const [password, setPassword] = useState('');
const [confirmPassword, setConfirmPassword] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [showConfirm, setShowConfirm] = useState(false);
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
const [success, setSuccess] = useState(false);
const passwordError = password.length > 0 && !validatePassword(password)
? 'Le mot de passe doit contenir au moins 8 caracteres, une majuscule, une minuscule et un chiffre'
: '';
const confirmError = confirmPassword.length > 0 && password !== confirmPassword
? 'Les mots de passe ne correspondent pas'
: '';
const isFormValid = validatePassword(password) && password === confirmPassword;
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setError('');
if (!token) {
setError('Token manquant. Veuillez utiliser le lien recu par email.');
return;
}
if (!isFormValid) return;
setLoading(true);
try {
await apiClient.post('/api/v1/auth/reset-password', { token, password });
setSuccess(true);
setTimeout(() => {
router.push('/auth/login');
}, 3000);
} catch (err: unknown) {
const message = err instanceof Error ? err.message : "Une erreur s'est produite";
setError(message);
} finally {
setLoading(false);
}
};
if (!token) {
return (
Ce lien de reinitialisation est invalide. Veuillez redemander un nouveau lien.
Redemander un lien
Votre mot de passe a ete reinitialise avec succes. Vous allez etre redirige vers la page de connexion.
Chargement...