"use client"; import React, { Suspense, useMemo, useState } from "react"; import { Navbar } from "@/components/layout/Navbar"; import { Footer } from "@/components/layout/Footer"; import { apiFetch } from "@/lib/api"; import { useSearchParams, useRouter } from "next/navigation"; import { KeyRound } from "lucide-react"; function ResetPasswordContent() { const search = useSearchParams(); const router = useRouter(); const token = search.get("token") || ""; const [password, setPassword] = useState(""); const [confirm, setConfirm] = useState(""); const [status, setStatus] = useState(null); const [loading, setLoading] = useState(false); const canSubmit = useMemo(() => password.length >= 8 && password === confirm && !!token, [password, confirm, token]); const submit = async (e: React.FormEvent) => { e.preventDefault(); if (!canSubmit) return; try { setLoading(true); setStatus(null); await apiFetch("/api/users/reset", { method: "POST", body: { token, password } }); setStatus("Your password has been reset. You can now log in."); setTimeout(() => router.push("/login"), 1500); } catch (err: any) { setStatus(err?.message || "Reset failed"); } finally { setLoading(false); } }; return (

Reset your password

{!token &&

Missing or invalid token.

}
setPassword(e.target.value)} required className="w-full border rounded px-3 py-2" />

At least 8 characters.

setConfirm(e.target.value)} required className="w-full border rounded px-3 py-2" />
{status &&

{status}

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