"use client"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { type FormEvent, Suspense, useState } from "react"; import { useTranslation } from "react-i18next"; import { AuthShell, Field, FormAlert } from "@/components/auth/auth-ui"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { authClient } from "@/lib/auth-client"; import { notify } from "@/lib/toast"; const MIN_PASSWORD = 12; function ResetPasswordInner() { const { t } = useTranslation(); const router = useRouter(); const params = useSearchParams(); const token = params.get("token") ?? ""; const [password, setPassword] = useState(""); const [confirm, setConfirm] = useState(""); const [error, setError] = useState(null); const [done, setDone] = useState(false); const [submitting, setSubmitting] = useState(false); const onSubmit = async (event: FormEvent) => { event.preventDefault(); if (submitting) return; setError(null); if (!token) { setError(t("auth.resetPassword.invalidToken")); return; } if (password.length < MIN_PASSWORD) { setError(t("auth.resetPassword.tooShort", { count: MIN_PASSWORD })); return; } if (password !== confirm) { setError(t("auth.resetPassword.mismatch")); return; } setSubmitting(true); const { error: err } = await authClient.resetPassword({ newPassword: password, token, }); setSubmitting(false); if (err) { const message = err.message ?? t("auth.resetPassword.error"); setError(message); notify.error(t("auth.resetPassword.failedToastTitle"), message); return; } notify.success( t("auth.resetPassword.successToastTitle"), t("auth.resetPassword.successToastBody"), ); setDone(true); setTimeout(() => router.push("/login"), 1500); }; return ( {t("common.backToSignIn")} } subtitle={t("auth.resetPassword.subtitle")} title={t("auth.resetPassword.title")} > {done ? ( {t("auth.resetPassword.done")} ) : (
{error && {error}} setPassword(e.target.value)} placeholder="••••••••••••" required type="password" value={password} /> setConfirm(e.target.value)} placeholder="••••••••••••" required type="password" value={confirm} />
)}
); } export default function ResetPasswordPage() { return ( ); }