feat(collection-pool): sort by supplier name first
This commit is contained in:
parent
4662347ca0
commit
c989d0d12e
2 changed files with 73 additions and 2 deletions
|
|
@ -266,6 +266,71 @@ describe("buildVisibleRows sort modes (nearby pinning)", () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe("buildVisibleRows — supplier-first sort (operational mode)", () => {
|
||||
const todayYmd = "2026-07-10";
|
||||
|
||||
it("sorts by supplierName first when sortMode is operational", () => {
|
||||
const rows = buildVisibleRows(
|
||||
[
|
||||
makeRow({ id: "beta", supplierName: "Beta" }),
|
||||
makeRow({ id: "acme", supplierName: "Acme" }),
|
||||
makeRow({ id: "alpha", supplierName: "Alpha" }),
|
||||
],
|
||||
{ todayYmd, searchText: "", readyFilter: "all", sortMode: "operational" },
|
||||
);
|
||||
expect(rows.map((r) => r.id)).toEqual(["acme", "alpha", "beta"]);
|
||||
});
|
||||
|
||||
it("falls through to assignmentState within the same supplier", () => {
|
||||
const rows = buildVisibleRows(
|
||||
[
|
||||
makeRow({
|
||||
id: "acme-unassigned",
|
||||
supplierName: "Acme",
|
||||
item_status: "collection_pool",
|
||||
}),
|
||||
makeRow({
|
||||
id: "acme-today",
|
||||
supplierName: "Acme",
|
||||
item_status: "assigned",
|
||||
drv_id: "drv-1",
|
||||
assigned_at: `${todayYmd}T00:00:00.000Z`,
|
||||
}),
|
||||
],
|
||||
{ todayYmd, searchText: "", readyFilter: "all", sortMode: "operational" },
|
||||
);
|
||||
expect(rows.map((r) => r.id)).toEqual(["acme-today", "acme-unassigned"]);
|
||||
});
|
||||
|
||||
it("nearby mode still uses cluster prefix before supplier", () => {
|
||||
const rows = buildVisibleRows(
|
||||
[
|
||||
makeRow({
|
||||
id: "beta-cluster-a",
|
||||
supplierName: "Beta",
|
||||
clusterSortKey: "cluster-a",
|
||||
}),
|
||||
makeRow({
|
||||
id: "acme-cluster-b",
|
||||
supplierName: "Acme",
|
||||
clusterSortKey: "cluster-b",
|
||||
}),
|
||||
makeRow({
|
||||
id: "acme-cluster-a",
|
||||
supplierName: "Acme",
|
||||
clusterSortKey: "cluster-a",
|
||||
}),
|
||||
],
|
||||
{ todayYmd, searchText: "", readyFilter: "all", sortMode: "nearby" },
|
||||
);
|
||||
expect(rows.map((r) => r.id)).toEqual([
|
||||
"acme-cluster-a",
|
||||
"beta-cluster-a",
|
||||
"acme-cluster-b",
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("buildSupplierGroups", () => {
|
||||
it("returns an empty array for empty input", () => {
|
||||
expect(buildSupplierGroups([], new Map())).toEqual([]);
|
||||
|
|
|
|||
|
|
@ -109,6 +109,12 @@ export function buildVisibleRows(
|
|||
if (clusterDiff !== 0) return clusterDiff;
|
||||
}
|
||||
|
||||
// Supplier name is the primary group key. Rows in the same
|
||||
// supplier are then ordered by assignment urgency (today →
|
||||
// unassigned → future), then by updated, then by PO + description.
|
||||
const supplierDiff = (a.supplierName ?? "").localeCompare(b.supplierName ?? "");
|
||||
if (supplierDiff !== 0) return supplierDiff;
|
||||
|
||||
const stateDiff =
|
||||
ASSIGNMENT_SORT_ORDER[getAssignmentState(a, options.todayYmd)] -
|
||||
ASSIGNMENT_SORT_ORDER[getAssignmentState(b, options.todayYmd)];
|
||||
|
|
@ -118,8 +124,8 @@ export function buildVisibleRows(
|
|||
const updatedB = b.updated ?? "";
|
||||
if (updatedA !== updatedB) return updatedA.localeCompare(updatedB);
|
||||
|
||||
return `${a.supplierName ?? ""}|${a.poNumber ?? ""}|${a.description ?? ""}`.localeCompare(
|
||||
`${b.supplierName ?? ""}|${b.poNumber ?? ""}|${b.description ?? ""}`,
|
||||
return `${a.poNumber ?? ""}|${a.description ?? ""}`.localeCompare(
|
||||
`${b.poNumber ?? ""}|${b.description ?? ""}`,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue