"use client"; import { Suspense, useEffect, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { ChevronRight } from "lucide-react"; import { Button } from "@/components/ui/Button"; import { OtpInput } from "@/components/ui/OtpInput"; import { ErrorBanner } from "@/components/ui/ErrorBanner"; import { requestOtp } from "@/lib/api"; import { formatApiError } from "@/lib/hooks"; import { useAuth } from "@/lib/auth-context"; import { stepByOrder } from "@/lib/onboarding-steps"; const RESEND_SECONDS = 60; function formatCountdown(seconds: number) { const m = Math.floor(seconds / 60); const s = seconds % 60; return `${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}`; } function VerifyForm() { const router = useRouter(); const searchParams = useSearchParams(); const phone = searchParams.get("phone") ?? ""; const { login } = useAuth(); const [otp, setOtp] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [countdown, setCountdown] = useState(RESEND_SECONDS); const [resending, setResending] = useState(false); useEffect(() => { if (countdown <= 0) return; const t = setTimeout(() => setCountdown((c) => c - 1), 1000); return () => clearTimeout(t); }, [countdown]); useEffect(() => { if (!phone) router.replace("/login"); }, [phone, router]); async function handleVerify(code: string) { if (code.length !== 4) return; setLoading(true); setError(null); try { const user = await login(phone, code); if (user.is_onboarded) { router.push("/home"); } else { const stepSlug = stepByOrder(user.current_step)?.slug ?? "basic-info"; router.push(`/onboarding/${stepSlug}`); } } catch (err) { setError(formatApiError(err, "کد وارد شده اشتباهه")); setOtp(""); } finally { setLoading(false); } } async function handleResend() { setResending(true); setError(null); try { await requestOtp(phone); setCountdown(RESEND_SECONDS); } catch (err) { setError(formatApiError(err)); } finally { setResending(false); } } return (
0 ? "text-(--color-brand-500)" : "text-(--color-content-disabled)" }`} > {formatCountdown(countdown)}

کد تایید رو وارد کن

کد ۴ رقمی ارسال‌شده به{" "} {phone}

کد نیومد؟ {countdown > 0 ? ( صبر کن... ) : ( )}
); } export default function VerifyPage() { return ( ); }