import { useEffect, useState, type FormEvent } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { production } from '@/api/client' import type { WorkOrder } from '@/types/api' import { PageHeader } from '@/components/PageHeader' import { Loading } from '@/components/Loading' import { ErrorBox } from '@/components/ErrorBox' import { DynamicExtFields } from '@/components/DynamicExtFields' export function EditWorkOrderPage() { const { id = '' } = useParams<{ id: string }>() const navigate = useNavigate() const [order, setOrder] = useState(null) const [outputQuantity, setOutputQuantity] = useState('') const [dueDate, setDueDate] = useState('') const [loading, setLoading] = useState(true) const [ext, setExt] = useState>({}) const [submitting, setSubmitting] = useState(false) const [error, setError] = useState(null) useEffect(() => { production.getWorkOrder(id) .then((wo) => { setOrder(wo) setOutputQuantity(String(wo.outputQuantity)) setDueDate(wo.dueDate ?? '') setExt(wo.ext || {}) }) .catch((e: unknown) => setError(e instanceof Error ? e : new Error(String(e)))) .finally(() => setLoading(false)) }, [id]) const onSubmit = async (e: FormEvent) => { e.preventDefault() setError(null) setSubmitting(true) try { await production.updateWorkOrder(id, { outputQuantity: Number(outputQuantity), dueDate: dueDate || null, ...(Object.keys(ext).length > 0 ? { ext } : {}), }) navigate(`/work-orders/${id}`) } catch (err: unknown) { setError(err instanceof Error ? err : new Error(String(err))) } finally { setSubmitting(false) } } if (loading) return if (!order) return const editable = order.status === 'DRAFT' return (
navigate(`/work-orders/${id}`)}>Cancel} /> {!editable ? (
) : (
Order code, output item, BOM inputs, and routing operations are read-only after creation.
setOutputQuantity(e.target.value)} className="mt-1 w-full rounded-md border border-slate-300 px-3 py-2 text-sm" />
setDueDate(e.target.value)} className="mt-1 w-full rounded-md border border-slate-300 px-3 py-2 text-sm" />
setExt(prev => ({ ...prev, [k]: v }))} /> {error && } )}
) }