fix(tables): сохранение размера страницы и showSizeChanger
Размер таблицы сохраняется в localStorage, опции 10/20/50/100 на всех list-страницах. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user