Files
PacketStation/frontend/src/api/warehouse.ts
T

23 lines
1.1 KiB
TypeScript
Raw Normal View History

// The warehouse board (phase 4 contract, api/warehouse.py).
import { api } from "./client";
import { qs } from "./query";
import type { BoardQuery, BoardResponse, PacketCard } from "./types";
const COLUMNS = ["incoming", "pulling", "hold", "pulled", "released"] as const;
/** Every column and number present, even when the server leaves one out. */
function normalise(raw: Partial<BoardResponse> | null): BoardResponse {
const cols = (raw?.columns ?? {}) as Partial<Record<(typeof COLUMNS)[number], PacketCard[]>>;
const columns = Object.fromEntries(COLUMNS.map((c) => [c, Array.isArray(cols[c]) ? cols[c] : []])) as BoardResponse["columns"];
return {
kpis: { waiting: 0, pulling: 0, hold: 0, pulled: 0, open_shorts: 0, released_24h: 0, ...(raw?.kpis ?? {}) },
columns,
shorts: Array.isArray(raw?.shorts) ? raw.shorts : [],
};
}
export const warehouseApi = {
board: async (q: BoardQuery = {}, signal?: AbortSignal): Promise<BoardResponse> =>
normalise(await api.get<Partial<BoardResponse> | null>(`/api/warehouse/board${qs({ ...q })}`, signal)),
};