"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 { appName } from "@/lib/siteConfig"; function ActivateAccountContent() { 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); const data = await apiFetch("/api/users/activate", { method: "POST", body: { token, password } }); // Auto-login: save token and redirect to dashboard if (data?.token) { localStorage.setItem("token", data.token); } setStatus("Your account is now active. Redirecting…"); setTimeout(() => router.push("/dashboard"), 1500); } catch (err: any) { setStatus(err?.message || "Activation failed. The link may have expired."); } finally { setLoading(false); } }; return (

Activate your account

Set a password to activate your {appName} account.

{!token &&

Missing or invalid activation link.

}
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" />
{password && confirm && password !== confirm && (

Passwords do not match.

)}
{status &&

{status}

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