Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ You can also check the
- Features
- Table sorting is not reset anymore on data / filter change
- Visualize now supports multiple cube contact points
- Order of groups when sorting by total segment size is now more intuitive
- Fixes
- Hiding a temporal column and then enabling an interactive filter doesn't
result in broken state anymore
Expand Down
28 changes: 28 additions & 0 deletions app/utils/sorting-values.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,4 +249,32 @@ describe("makeDimensionValueSorters", () => {
"2020-01-01",
]);
});

it("should correctly sort byTotalSize (reversed order)", () => {
const totalSizeDimension = {
values: [
{ value: "A", label: "A" },
{ value: "B", label: "B" },
{ value: "C", label: "C" },
{ value: "D", label: "D" },
],
} as unknown as Dimension;
const values = totalSizeDimension.values.map((d) => d.value);
const sorting: NonNullable<SortingField["sorting"]> = {
sortingType: "byTotalSize",
sortingOrder: "asc",
};
const sorters = makeDimensionValueSorters(totalSizeDimension, {
sorting,
sumsBySegment: { A: 1, B: 2, C: 3, D: 4 },
});
const sortingOrders = getSortingOrders(sorters, sorting);
// Should be reversed
expect(orderBy(values, sorters, sortingOrders)).toEqual([
"D",
"C",
"B",
"A",
]);
});
});
17 changes: 14 additions & 3 deletions app/utils/sorting-values.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,18 @@ export const getSortingOrders = (
sorters: ((...args: any[]) => any)[],
sorting: SortingField["sorting"]
) => {
return Array(sorters.length).fill(
sorting?.sortingOrder === "desc" ? "desc" : "asc"
);
const order = sorting?.sortingOrder;
const type = sorting?.sortingType;
const result = Array(sorters.length);

switch (order) {
case "desc":
return result.fill(type === "byTotalSize" ? "asc" : "desc");
case "asc":
case undefined:
return result.fill(type === "byTotalSize" ? "desc" : "asc");
default:
const _exhaustiveCheck: never = order;
return _exhaustiveCheck;
}
};