"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}
}