'use client' import { useState } from 'react' import { useTranslations } from 'next-intl' import { useRouter, Link } from '@/i18n/navigation' const ERROR_KEYS = ['invalidLink', 'expiredLink', 'passwordMismatch', 'passwordTooLong', 'accountNotFound'] as const export function ResetForm({ token }: { token: string }) { const t = useTranslations('Reset') const router = useRouter() const [password, setPassword] = useState('') const [confPassword, setConfPassword] = useState('') const [busy, setBusy] = useState(false) const [done, setDone] = useState(false) const [message, setMessage] = useState<{ ok: boolean; text: string } | null>(null) async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (busy || done) return setBusy(true) setMessage(null) try { const res = await fetch('/api/auth/reset-password', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token, password, confPassword }), }) const data: { success?: boolean; error?: string } = await res.json() if (data.success) { setDone(true) setMessage({ ok: true, text: t('success') }) setTimeout(() => router.push('/log-in'), 2500) } else { const key = (ERROR_KEYS as readonly string[]).includes(data.error ?? '') ? data.error! : 'genericError' setMessage({ ok: false, text: t(key) }) } } catch { setMessage({ ok: false, text: t('genericError') }) } finally { setBusy(false) } } return ( <>
setPassword(e.target.value)} required />
setConfPassword(e.target.value)} required />

{message && ( {message.text} )}
{done && (

{t('goLogin')}

)} ) }