1 parent
f57cd3960b
commit
3bec5091df
5 files changed
+85
-13
No files matched your search
@@ -0,0 +1,30 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { dataGridPageSizeSettingsPatch, preferredDataGridPageSize, resolveDataGridPageSizePreference } from "@/lib/dataGrid/dataGridPageSizePreference";
|
||||
|
||||
describe("DataGrid page-size preference", () => {
|
||||
it("keeps the context-derived defaults for regular result and table-data grids", () => {
|
||||
expect(resolveDataGridPageSizePreference("results")).toBe("results");
|
||||
expect(resolveDataGridPageSizePreference(undefined)).toBe("results");
|
||||
expect(resolveDataGridPageSizePreference("table-data")).toBe("table-open");
|
||||
});
|
||||
|
||||
it("allows a result-context grid to explicitly use the table-open preference", () => {
|
||||
expect(resolveDataGridPageSizePreference("results", "table-open")).toBe("table-open");
|
||||
});
|
||||
|
||||
it("reads the selected preference and preserves an explicit table-data page limit", () => {
|
||||
const settings = { pageSize: 25, tableOpenPageSize: 500 };
|
||||
|
||||
expect(preferredDataGridPageSize(settings, "results")).toBe(25);
|
||||
expect(preferredDataGridPageSize(settings, "table-open")).toBe(500);
|
||||
expect(preferredDataGridPageSize(settings, "table-open", 75)).toBe(75);
|
||||
expect(preferredDataGridPageSize({ pageSize: 0, tableOpenPageSize: Number.NaN }, "results")).toBe(100);
|
||||
expect(preferredDataGridPageSize({ pageSize: 0, tableOpenPageSize: Number.NaN }, "table-open")).toBe(100);
|
||||
});
|
||||
|
||||
it("writes only the selected normalized setting", () => {
|
||||
expect(dataGridPageSizeSettingsPatch("results", 250.9)).toEqual({ pageSize: 250 });
|
||||
expect(dataGridPageSizeSettingsPatch("table-open", 750.9)).toEqual({ tableOpenPageSize: 750 });
|
||||
expect(dataGridPageSizeSettingsPatch("table-open", 0)).toEqual({ tableOpenPageSize: 100 });
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,23 @@
|
||||
import { normalizeResultPageSize } from "@/lib/dataGrid/paginationPageSize";
|
||||
import { tableOpenPageLimit } from "@/lib/table/tableOpenPageLimit";
|
||||
|
||||
export type DataGridPageSizePreference = "results" | "table-open";
|
||||
|
||||
type DataGridContext = "results" | "table-data" | undefined;
|
||||
type DataGridPageSizeSettings = {
|
||||
pageSize: unknown;
|
||||
tableOpenPageSize: unknown;
|
||||
};
|
||||
|
||||
export function resolveDataGridPageSizePreference(context: DataGridContext, preference?: DataGridPageSizePreference): DataGridPageSizePreference {
|
||||
return preference ?? (context === "table-data" ? "table-open" : "results");
|
||||
}
|
||||
|
||||
export function preferredDataGridPageSize(settings: DataGridPageSizeSettings, preference: DataGridPageSizePreference, pageLimit?: number): number {
|
||||
return preference === "table-open" ? normalizeResultPageSize(pageLimit ?? tableOpenPageLimit(settings.tableOpenPageSize)) : normalizeResultPageSize(settings.pageSize);
|
||||
}
|
||||
|
||||
export function dataGridPageSizeSettingsPatch(preference: DataGridPageSizePreference, value: unknown): { pageSize: number } | { tableOpenPageSize: number } {
|
||||
const normalized = normalizeResultPageSize(value);
|
||||
return preference === "table-open" ? { tableOpenPageSize: normalized } : { pageSize: normalized };
|
||||
}
|
||||
Reference in new issue
Block a user