"use client"; import { useRef, useState, type FormEvent } from "react"; import { useRouter } from "next/navigation"; import { KeyRoundIcon } from "lucide-react"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import { authClient } from "@/lib/auth/client"; export function PasswordForm({ hasPassword: initialHasPassword }: { hasPassword: boolean }) { const router = useRouter(); const formRef = useRef(null); const [hasPassword, setHasPassword] = useState(initialHasPassword); const [busy, setBusy] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(""); async function changePassword(event: FormEvent) { event.preventDefault(); if (busy) return; const form = new FormData(event.currentTarget); const currentPassword = String(form.get("currentPassword") ?? ""); const newPassword = String(form.get("newPassword") ?? ""); const confirmPassword = String(form.get("confirmPassword") ?? ""); setError(""); setSuccess(""); if (newPassword !== confirmPassword) { setError(hasPassword ? "รหัสผ่านใหม่ไม่ตรงกัน" : "รหัสผ่านไม่ตรงกัน"); return; } setBusy(true); try { if (hasPassword) { const result = await authClient.changePassword({ currentPassword, newPassword }); if (result.error) { setError(result.error.code === "INVALID_PASSWORD" ? "รหัสผ่านปัจจุบันไม่ถูกต้อง" : "เปลี่ยนรหัสผ่านไม่สำเร็จ กรุณาลองอีกครั้ง"); return; } } else { const response = await fetch("/api/profile/password", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ newPassword }), }); if (!response.ok) { setError("เพิ่มรหัสผ่านไม่สำเร็จ กรุณาลองอีกครั้ง"); return; } setHasPassword(true); router.refresh(); } formRef.current?.reset(); setSuccess(hasPassword ? "เปลี่ยนรหัสผ่านเรียบร้อยแล้ว" : "เพิ่มรหัสผ่านเรียบร้อยแล้ว"); } catch { setError(hasPassword ? "เปลี่ยนรหัสผ่านไม่สำเร็จ กรุณาลองอีกครั้ง" : "เพิ่มรหัสผ่านไม่สำเร็จ กรุณาลองอีกครั้ง"); } finally { setBusy(false); } } return {hasPassword ? "กรอกรหัสผ่านปัจจุบันและรหัสผ่านใหม่" : "บัญชีนี้ยังไม่มีรหัสผ่าน เพิ่มรหัสผ่านเพื่อเข้าสู่ระบบด้วยอีเมลได้ด้วย"}
{hasPassword && รหัสผ่านปัจจุบัน } {hasPassword ? "รหัสผ่านใหม่" : "รหัสผ่าน"} {hasPassword ? "ยืนยันรหัสผ่านใหม่" : "ยืนยันรหัสผ่าน"} {error && {error}} {success && {success}}
; }