+ "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 TransmittalNew() { + 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({ + subject: "", number: "", to_party: "", sent_date: "", description: "" + }); + const [errs, setErrs] = React.useState({}); + + const validate = (f) => { + const e = {}; + if (!f.subject?.trim()) e.subject = "กรุณากรอกเรื่อง (Subject)"; + if (!f.to_party?.trim()) e.to_party = "กรุณาระบุผู้รับ (To)"; + if (!f.sent_date) e.sent_date = "กรุณาระบุวันที่ส่ง"; + return e; + }; + + const tRef = React.useRef(0); + React.useEffect(() => { + clearTimeout(tRef.current); + tRef.current = window.setTimeout(async () => { + const e = validate(form); + setErrs(e); + try { + setSaving(true); + if (!draftId) { + const res = await api("/transmittals", { method: "POST", body: { ...form, status: "draft" } }); + setDraftId(res.id); + } else { + await api(`/transmittals/${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(`/transmittals/${draftId}`, { method: "PATCH", body: { ...form, status: "submitted" } })).id || draftId + : (await api("/transmittals", { method: "POST", body: { ...form, status: "submitted" } })).id; + router.replace(`/transmittals`); + } catch (err) { + setError(err.message || "ส่ง Transmittal ไม่สำเร็จ"); + } finally { + setSaving(false); + } + }; + + return ( +
+
สร้าง Transmittal
+ {error &&
{error}
} +
+
+ + setForm(f=>({...f, subject:e.target.value}))}/> + {errs.subject &&
{errs.subject}
} +
+
+ + setForm(f=>({...f, number:e.target.value}))}/> +
+
+ + setForm(f=>({...f, to_party:e.target.value}))}/> + {errs.to_party &&
{errs.to_party}
} +
+
+ + setForm(f=>({...f, sent_date:e.target.value}))}/> + {errs.sent_date &&
{errs.sent_date}
} +
+
+
+ +