fix(tables): сохранение размера страницы и showSizeChanger

Размер таблицы сохраняется в localStorage, опции 10/20/50/100 на всех list-страницах.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-13 17:54:53 +03:00
parent a1bd11afee
commit 2056333529
11 changed files with 122 additions and 114 deletions
+44
View File
@@ -0,0 +1,44 @@
export const TABLE_PAGE_SIZE_OPTIONS = [10, 20, 50, 100] as const;
export const DEFAULT_TABLE_PAGE_SIZE = 20;
const STORAGE_PREFIX = 'admin.table.';
export function getSavedPageSize(tableKey: string, fallback = DEFAULT_TABLE_PAGE_SIZE): number {
const raw = localStorage.getItem(`${STORAGE_PREFIX}${tableKey}.pageSize`);
const size = raw ? Number(raw) : fallback;
return (TABLE_PAGE_SIZE_OPTIONS as readonly number[]).includes(size) ? size : fallback;
}
export function savePageSize(tableKey: string, size: number): void {
localStorage.setItem(`${STORAGE_PREFIX}${tableKey}.pageSize`, String(size));
}
export function getTablePagination(
params: { offset?: number; limit?: number },
total?: number
) {
const pageSize = params.limit || DEFAULT_TABLE_PAGE_SIZE;
return {
total,
current: Math.floor((params.offset || 0) / pageSize) + 1,
pageSize,
showSizeChanger: true,
pageSizeOptions: [...TABLE_PAGE_SIZE_OPTIONS],
};
}
export function mergeTablePagination<T extends { offset?: number; limit?: number }>(
prev: T,
pagination: { current?: number; pageSize?: number },
tableKey: string
): T {
const pageSize = pagination.pageSize || prev.limit || DEFAULT_TABLE_PAGE_SIZE;
if (pagination.pageSize && pagination.pageSize !== prev.limit) {
savePageSize(tableKey, pageSize);
}
return {
...prev,
offset: ((pagination.current ?? 1) - 1) * pageSize,
limit: pageSize,
};
}