diff --git a/src/app/(protected)/workorders/_hooks/use-work-orders-board-source.ts b/src/app/(protected)/workorders/_hooks/use-work-orders-board-source.ts
index 11771ca7..2227e3f9 100644
--- a/src/app/(protected)/workorders/_hooks/use-work-orders-board-source.ts
+++ b/src/app/(protected)/workorders/_hooks/use-work-orders-board-source.ts
@@ -23,6 +23,7 @@ export type WorkOrdersBoardSource = {
data: WorkOrderBoardListResult | undefined;
unassignedQueue: WorkOrderTableRow[];
unassignedError: Error | null;
+ unassignedLoading: boolean;
isLoading: boolean;
isFetching: boolean;
error: Error | null;
@@ -75,6 +76,7 @@ export function useWorkOrdersBoardSource(filters: FiltersReturn): WorkOrdersBoar
} = useWorkOrdersBoardSearch(resolvedSearchParams ?? { datePreset: "ThisWeek" }, advActive);
const {
data: queueData,
+ isPending: queuePending,
isFetching: queueFetching,
error: queueError,
refetch: refetchQueue,
@@ -94,6 +96,7 @@ export function useWorkOrdersBoardSource(filters: FiltersReturn): WorkOrdersBoar
data: advActive ? searchData : boardData,
unassignedQueue: advActive ? EMPTY_UNASSIGNED_QUEUE : (queueData ?? EMPTY_UNASSIGNED_QUEUE),
unassignedError: advActive ? null : (queueError ?? null),
+ unassignedLoading: advActive ? false : queuePending,
isLoading: advActive ? searchLoading : boardLoading,
isFetching: advActive ? searchFetching : boardFetching || queueFetching,
error: advActive ? searchError : boardError,
diff --git a/src/app/(protected)/workorders/_hooks/use-work-orders-table-data.ts b/src/app/(protected)/workorders/_hooks/use-work-orders-table-data.ts
index 469fd465..752272de 100644
--- a/src/app/(protected)/workorders/_hooks/use-work-orders-table-data.ts
+++ b/src/app/(protected)/workorders/_hooks/use-work-orders-table-data.ts
@@ -26,6 +26,7 @@ export function useWorkOrdersTableData(filters: FiltersReturn) {
data,
unassignedQueue,
unassignedError,
+ unassignedLoading,
isLoading,
isFetching,
error,
@@ -107,6 +108,7 @@ export function useWorkOrdersTableData(filters: FiltersReturn) {
advResults,
unassigned,
unassignedError,
+ unassignedLoading,
unscheduled,
displayGroups,
searchActive,
diff --git a/src/test/app/(protected)/workorders/wo-table-unassigned-queue.test.tsx b/src/test/app/(protected)/workorders/wo-table-unassigned-queue.test.tsx
index d010346d..a3461cd9 100644
--- a/src/test/app/(protected)/workorders/wo-table-unassigned-queue.test.tsx
+++ b/src/test/app/(protected)/workorders/wo-table-unassigned-queue.test.tsx
@@ -76,6 +76,7 @@ function baseTableData(
advResults: [],
unassigned: [],
unassignedError: null,
+ unassignedLoading: false,
unscheduled: [],
displayGroups: [],
searchActive: false,
@@ -350,6 +351,25 @@ describe("WoTableBody Unassigned queue (SH-165)", () => {
expect(screen.queryByTestId(/row-/)).not.toBeInTheDocument();
});
+ it("shows a loading state instead of empty while the unassigned queue is pending", () => {
+ render(
+
+ (
+
+ | {row.woNumber} |
+
+ )}
+ renderInlineRow={() => null}
+ />
+ ,
+ );
+
+ expect(screen.getByText("Loading unassigned work orders.")).toBeInTheDocument();
+ expect(screen.queryByText("No unassigned work orders.")).not.toBeInTheDocument();
+ });
+
it("removes a pinned row immediately after assigning through the board PATCH path", async () => {
const user = userEvent.setup();
const pinned = makeRow({
diff --git a/src/test/app/(protected)/workorders/wo-table-unscheduled-highlight.test.tsx b/src/test/app/(protected)/workorders/wo-table-unscheduled-highlight.test.tsx
index cc1cb93e..9a5216c8 100644
--- a/src/test/app/(protected)/workorders/wo-table-unscheduled-highlight.test.tsx
+++ b/src/test/app/(protected)/workorders/wo-table-unscheduled-highlight.test.tsx
@@ -78,6 +78,7 @@ function renderUnscheduledHarness() {
advActive: false,
unassigned: [],
unassignedError: null,
+ unassignedLoading: false,
unassignedOpen: true,
setUnassignedOpen: vi.fn(),
unscheduled: [unscheduledRow],
|