import React, { useState, useEffect } from 'react'; import { useSearchParams, useNavigate, Link } from 'react-router-dom'; import { Logo } from '../components/Logo'; import { authPasswordResetConfirm, isAxiosError } from '../api'; export const PasswordResetConfirm: React.FC = () => { const [searchParams] = useSearchParams(); const navigate = useNavigate(); const token = searchParams.get('token'); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(false); useEffect(() => { if (!token) { setError('Invalid reset link. Please request a new password reset.'); } }, [token]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (password !== confirmPassword) { setError('Passwords do not match'); return; } if (password.length < 8) { setError('Password must be at least 8 characters long'); return; } if (!token) { setError('Invalid reset token'); return; } setLoading(true); try { await authPasswordResetConfirm(token, password); setSuccess(true); setTimeout(() => { navigate('/login'); }, 3000); } catch (err: unknown) { let message = 'Failed to reset password'; if (isAxiosError(err)) { if (err.response?.status === 404) { message = 'Password reset feature is not enabled on this server'; } else if (err.response?.data?.message) { message = err.response.data.message; } else if (err.response?.data?.error) { message = err.response.data.error; } else if (err.message) { message = err.message; } } else if (err instanceof Error) { message = err.message; } setError(message); } finally { setLoading(false); } }; if (success) { return (

Password reset successful

Your password has been reset. Redirecting to login...

Go to login
); } return (

Set new password

Enter your new password below.

{error && (
{error}
)}
setPassword(e.target.value)} />
setConfirmPassword(e.target.value)} />
Back to login
); };