"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useRef, useState, type FormEvent } from "react"; import { REGEXP_ONLY_DIGITS } from "input-otp"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp"; import { authClient } from "@/lib/auth/client"; export function RegistrationOtpForm({ email, nextPath, setup }: { email: string; nextPath: string; setup: boolean; }) { const router = useRouter(); const emailRef = useRef(null); const [busy, setBusy] = useState(false); const [sending, setSending] = useState(false); const [error, setError] = useState(""); const [sent, setSent] = useState(setup); async function verify(event: FormEvent) { event.preventDefault(); if (busy) return; const form = new FormData(event.currentTarget); const address = String(form.get("email") ?? "").trim(); const otp = String(form.get("otp") ?? "").trim(); setBusy(true); setError(""); try { const result = await authClient.emailOtp.verifyEmail({ email: address, otp }); if (result.error) throw new Error("รหัสไม่ถูกต้องหรือหมดอายุ กรุณาลองอีกครั้ง"); const returnPath = setup ? `/auth/register?step=profile&next=${encodeURIComponent(nextPath)}` : nextPath; router.replace(returnPath); router.refresh(); } catch (cause) { setError(cause instanceof Error ? cause.message : "ยืนยันอีเมลไม่สำเร็จ"); } finally { setBusy(false); } } async function resend() { if (sending || busy) return; const address = emailRef.current?.value.trim() ?? ""; if (!address) return; setSending(true); setError(""); try { const result = await authClient.emailOtp.sendVerificationOtp({ email: address, type: "email-verification" }); if (result.error) throw new Error("ส่งรหัสใหม่ไม่สำเร็จ กรุณาลองอีกครั้ง"); setSent(true); } catch (cause) { setError(cause instanceof Error ? cause.message : "ส่งรหัสใหม่ไม่สำเร็จ"); } finally { setSending(false); } } return ยืนยันอีเมล {sent && กรอกรหัส 6 หลักที่ส่งไปยังอีเมลของคุณ รหัสหมดอายุใน 5 นาที} {!sent &&

กรอกรหัสจากอีเมล หรือกดส่งรหัสใหม่หากยังไม่มีรหัส

} {error && {error}}
อีเมล รหัส OTP {Array.from({ length: 6 }, (_, index) => )}
; }