/** * Reset Password Page * * Reset password with token from email */ 'use client'; import { useState, useEffect } from 'react'; import { useSearchParams, useRouter } from 'next/navigation'; import Link from 'next/link'; export default function ResetPasswordPage() { const searchParams = useSearchParams(); const router = useRouter(); const [token, setToken] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [success, setSuccess] = useState(false); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); useEffect(() => { const tokenFromUrl = searchParams.get('token'); if (tokenFromUrl) { setToken(tokenFromUrl); } else { setError('Invalid reset link. Please request a new password reset.'); } }, [searchParams]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); // Validate passwords match if (password !== confirmPassword) { setError('Passwords do not match'); return; } // Validate password length if (password.length < 12) { setError('Password must be at least 12 characters long'); return; } if (!token) { setError('Invalid reset token'); return; } setLoading(true); try { // TODO: Implement resetPassword API endpoint await new Promise(resolve => setTimeout(resolve, 1000)); setSuccess(true); setTimeout(() => { router.push('/login'); }, 3000); } catch (err: any) { setError( err.response?.data?.message || 'Failed to reset password. The link may have expired.' ); } finally { setLoading(false); } }; if (success) { return (

Xpeditis

Password reset successful

Your password has been reset successfully. You will be redirected to the login page in a few seconds...
Go to login now
); } return (

Xpeditis

Set new password

Please enter your new password.

{error && (
{error}
)}
setPassword(e.target.value)} className="mt-1 appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm" />

Must be at least 12 characters long

setConfirmPassword(e.target.value)} className="mt-1 appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm" />
Back to sign in
); }