+ "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 ( +
+
สร้าง RFA
+ {error &&
{error}
} +
+
+ + setForm(f=>({...f, title:e.target.value}))}/> + {errs.title &&
{errs.title}
} +
+
+ + setForm(f=>({...f, code:e.target.value}))}/> +
+
+ + setForm(f=>({...f, discipline:e.target.value}))}/> +
+
+ + setForm(f=>({...f, due_date:e.target.value}))}/> + {errs.due_date &&
{errs.due_date}
} +
+
+
+ +