From 9aadbc7958d39d181c0dd0600e2b7c30bb6c391a Mon Sep 17 00:00:00 2001 From: soryu Date: Sat, 14 Feb 2026 21:29:26 +0000 Subject: Makima system improvements: Orders, directive questions, PR creation fix, bug fixes (#62) * feat: soryu-co/soryu - makima: Fix directive goal update bug - stale closure issue * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Create Orders database schema and backend API * feat: soryu-co/soryu - makima: Fix task Claude instance not receiving user inputs from input box * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Build Orders frontend page replacing the Board page * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Fix directive PR creation system --- makima/frontend/src/hooks/useOrders.ts | 123 +++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 makima/frontend/src/hooks/useOrders.ts (limited to 'makima/frontend/src/hooks/useOrders.ts') diff --git a/makima/frontend/src/hooks/useOrders.ts b/makima/frontend/src/hooks/useOrders.ts new file mode 100644 index 0000000..2dd20bb --- /dev/null +++ b/makima/frontend/src/hooks/useOrders.ts @@ -0,0 +1,123 @@ +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, + linkOrderToContract, + 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 linkContract = useCallback(async (contractId: string) => { + if (!id) return; + const o = await linkOrderToContract(id, contractId); + setOrder(o); + return o; + }, [id]); + + const convertToStep = useCallback(async (directiveId: string) => { + if (!id) return; + const step = await convertOrderToStep(id, directiveId); + await refresh(); + return step; + }, [id, refresh]); + + return { + order, loading, error, refresh, + update, remove, + linkDirective, linkContract, convertToStep, + }; +} -- cgit v1.2.3