import { useState, useEffect, useCallback } from "react"; import { type Order, type OrderStatus, type OrderType, type OrderPriority, type CreateOrderRequest, type UpdateOrderRequest, listOrders, createOrder, getOrder, updateOrder, deleteOrder, linkOrderToDirective, convertOrderToStep, } from "../lib/api"; export function useOrders( statusFilter?: OrderStatus, typeFilter?: OrderType, priorityFilter?: OrderPriority, ) { const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const refresh = useCallback(async () => { try { setLoading(true); setError(null); const res = await listOrders(statusFilter, typeFilter, priorityFilter); setOrders(res.orders); } catch (e) { setError(e instanceof Error ? e.message : "Failed to load orders"); } finally { setLoading(false); } }, [statusFilter, typeFilter, priorityFilter]); useEffect(() => { refresh(); }, [refresh]); const create = useCallback(async (req: CreateOrderRequest) => { const o = await createOrder(req); await refresh(); return o; }, [refresh]); const remove = useCallback(async (id: string) => { await deleteOrder(id); await refresh(); }, [refresh]); return { orders, loading, error, refresh, create, remove }; } export function useOrder(id: string | undefined) { const [order, setOrder] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const refresh = useCallback(async () => { if (!id) return; try { setLoading(true); setError(null); const o = await getOrder(id); setOrder(o); } catch (e) { setError(e instanceof Error ? e.message : "Failed to load order"); } finally { setLoading(false); } }, [id]); useEffect(() => { setOrder(null); setError(null); setLoading(true); refresh(); }, [id]); // eslint-disable-line react-hooks/exhaustive-deps const update = useCallback(async (req: UpdateOrderRequest) => { if (!id) return; const o = await updateOrder(id, req); setOrder(o); return o; }, [id]); const remove = useCallback(async () => { if (!id) return; await deleteOrder(id); }, [id]); const linkDirective = useCallback(async (directiveId: string) => { if (!id) return; const o = await linkOrderToDirective(id, directiveId); setOrder(o); return o; }, [id]); const convertToStep = useCallback(async () => { if (!id) return; const step = await convertOrderToStep(id); await refresh(); return step; }, [id, refresh]); return { order, loading, error, refresh, update, remove, linkDirective, convertToStep, }; }