mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-01 20:13:12 +00:00
fix(work-orders): distinguish unassigned loading from empty pin
This commit is contained in:
parent
dc9e146080
commit
358495cfe9
5 changed files with 41 additions and 1 deletions
|
|
@ -23,8 +23,13 @@ export function WoTableBody({ tableData, renderRow, renderInlineRow }: WoTableBo
|
|||
const unassignedRows = tableData.unassigned ?? [];
|
||||
const showUnscheduled =
|
||||
(tableData.unscheduled?.length ?? 0) > 0 || tableData.draftDayKey === UNSCHEDULED_DAY_KEY;
|
||||
const showUnassignedLoading =
|
||||
tableData.unassignedOpen && Boolean(tableData.unassignedLoading) && !tableData.unassignedError;
|
||||
const showUnassignedEmpty =
|
||||
tableData.unassignedOpen && unassignedRows.length === 0 && !tableData.unassignedError;
|
||||
tableData.unassignedOpen &&
|
||||
unassignedRows.length === 0 &&
|
||||
!tableData.unassignedError &&
|
||||
!tableData.unassignedLoading;
|
||||
|
||||
return (
|
||||
<tbody>
|
||||
|
|
@ -47,6 +52,15 @@ export function WoTableBody({ tableData, renderRow, renderInlineRow }: WoTableBo
|
|||
</td>
|
||||
</tr>
|
||||
)}
|
||||
{showUnassignedLoading && (
|
||||
<tr>
|
||||
<td colSpan={WO_TABLE_COLS.length} style={{ padding: "8px 14px" }}>
|
||||
<Text variant="feedback" tone="muted">
|
||||
Loading unassigned work orders.
|
||||
</Text>
|
||||
</td>
|
||||
</tr>
|
||||
)}
|
||||
{showUnassignedEmpty && (
|
||||
<tr>
|
||||
<td colSpan={WO_TABLE_COLS.length} style={{ padding: "8px 14px" }}>
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
<table>
|
||||
<WoTableBody
|
||||
tableData={baseTableData({ unassignedLoading: true })}
|
||||
renderRow={(row) => (
|
||||
<tr key={String(row.id)} data-testid={`row-${row.id}`}>
|
||||
<td>{row.woNumber}</td>
|
||||
</tr>
|
||||
)}
|
||||
renderInlineRow={() => null}
|
||||
/>
|
||||
</table>,
|
||||
);
|
||||
|
||||
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({
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ function renderUnscheduledHarness() {
|
|||
advActive: false,
|
||||
unassigned: [],
|
||||
unassignedError: null,
|
||||
unassignedLoading: false,
|
||||
unassignedOpen: true,
|
||||
setUnassignedOpen: vi.fn(),
|
||||
unscheduled: [unscheduledRow],
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue