"use client"; import React from "react"; import { useRouter } from "next/navigation"; import { api } from "@/lib/api"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; export default function RfaNew() { const router = useRouter(); const [draftId, setDraftId] = React.useState(null); const [saving, setSaving] = React.useState(false); const [savedAt, setSavedAt] = React.useState(null); const [error, setError] = React.useState(""); const [form, setForm] = React.useState({ title: "", code: "", discipline: "", due_date: "", description: "" }); const [errs, setErrs] = React.useState({}); // simple validate (client) const validate = (f) => { const e = {}; if (!f.title?.trim()) e.title = "กรุณากรอกชื่อเรื่อง"; if (!f.due_date) e.due_date = "กรุณากำหนดวันที่ครบกำหนด"; return e; }; // debounce autosave const tRef = React.useRef(0); React.useEffect(() => { clearTimeout(tRef.current); tRef.current = window.setTimeout(async () => { const e = validate(form); setErrs(e); // แสดง error ทันที (soft) try { setSaving(true); if (!draftId) { // create draft const res = await api("/rfas", { method: "POST", body: { ...form, status: "draft" } }); setDraftId(res.id); } else { // update draft await api(`/rfas/${draftId}`, { method: "PATCH", body: { ...form, status: "draft" } }); } setSavedAt(new Date()); } catch (err) { setError(err.message || "บันทึกฉบับร่างไม่สำเร็จ"); } finally { setSaving(false); } }, 800); return () => clearTimeout(tRef.current); }, [form, draftId]); const onSubmit = async (e) => { e.preventDefault(); const eobj = validate(form); setErrs(eobj); if (Object.keys(eobj).length) return; try { setSaving(true); const id = draftId ? (await api(`/rfas/${draftId}`, { method: "PATCH", body: { ...form, status: "submitted" } })).id || draftId : (await api("/rfas", { method: "POST", body: { ...form, status: "submitted" } })).id; router.replace(`/rfas`); // หรือไปหน้า detail `/rfas/${id}` } catch (err) { setError(err.message || "ส่งคำขอไม่สำเร็จ"); } finally { setSaving(false); } }; return (
); }