"use client"; import { useEffect, useState, type FormEvent } from "react"; import Link from "next/link"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; 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 { ProfileImageInput } from "./profile-image-input"; export function ProfileForm({ name: initialName, email, image: initialImage, nextPath, setup = false, }: { name: string; email: string; image: string | null; nextPath?: string; setup?: boolean; }) { const [name, setName] = useState(initialName); const [file, setFile] = useState(null); const [preview, setPreview] = useState(null); const [busy, setBusy] = useState(false); const [error, setError] = useState(""); useEffect( () => () => { if (preview) URL.revokeObjectURL(preview); }, [preview], ); async function save(event: FormEvent) { event.preventDefault(); if (busy) return; setBusy(true); setError(""); try { const form = new FormData(); form.set("name", name.trim()); if (file) form.set("image", file); const response = await fetch("/api/profile", { method: "POST", body: form, }); if (!response.ok) throw new Error("บันทึกโปรไฟล์ไม่สำเร็จ กรุณาลองอีกครั้ง"); if (nextPath) window.location.assign(nextPath); else window.location.reload(); } catch (cause) { setError( cause instanceof Error ? cause.message : "บันทึกโปรไฟล์ไม่สำเร็จ", ); setBusy(false); } } return ( {setup ? "ปรับแต่งโปรไฟล์" : "ข้อมูลบัญชี"} {setup && ขั้นตอน 3 จาก 3 - ปรับแต่งโปรไฟล์} {email}
{setup &&

สร้างบัญชีเรียบร้อยแล้ว เพิ่มรูปโปรไฟล์ได้ตามต้องการ หรือกดข้ามเพื่อเริ่มใช้งาน คุณสามารถยืนยันอีเมลภายหลังได้ที่หน้าโปรไฟล์

} รูปโปรไฟล์
{(preview || initialImage) && ( )} {name.trim().charAt(0).toUpperCase() || "?"} { setFile(cropped); setPreview(URL.createObjectURL(cropped)); setError(""); }} onError={setError} disabled={busy} />
ชื่อที่แสดง setName(event.target.value)} minLength={2} maxLength={80} required disabled={busy} /> {error && ( {error} )}
{nextPath && }
); }