'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 (
Office Translator Lien invalide

Ce lien de reinitialisation est invalide. Veuillez redemander un nouveau lien.

Redemander un lien

); } return (
Office Translator {success ? 'Mot de passe reinitialise' : 'Nouveau mot de passe'} {success ? 'Vous allez etre redirige vers la connexion' : 'Definissez votre nouveau mot de passe'}
{success ? (

Votre mot de passe a ete reinitialise avec succes. Vous allez etre redirige vers la page de connexion.

) : (
{error && (

{error}

)}
setPassword(e.target.value)} leftIcon={} error={passwordError} required autoComplete="new-password" />
setConfirmPassword(e.target.value)} leftIcon={} error={confirmError} required autoComplete="new-password" />
)}

Retour a la connexion

); } function LoadingFallback() { return (

Chargement...

); } export default function ResetPasswordPage() { return (
}>
); }