refactor web pagination and add partitioned events, flap/timeout showcase agents
This commit is contained in:
23
web/src/lib/pagination.ts
Normal file
23
web/src/lib/pagination.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
export const PAGE_SIZE_OPTIONS = [10, 50, 100] as const;
|
||||
export type PageSize = (typeof PAGE_SIZE_OPTIONS)[number];
|
||||
export const DEFAULT_PAGE_SIZE: PageSize = 10;
|
||||
|
||||
export function pageCountOf(total: number, pageSize: number): number {
|
||||
return Math.max(1, Math.ceil(total / pageSize));
|
||||
}
|
||||
|
||||
export function clampPage(page: number, pageCount: number): number {
|
||||
if (page < 1) return 1;
|
||||
if (page > pageCount) return pageCount;
|
||||
return page;
|
||||
}
|
||||
|
||||
export function paginate<T>(items: T[], page: number, pageSize: number): T[] {
|
||||
const start = (page - 1) * pageSize;
|
||||
return items.slice(start, start + pageSize);
|
||||
}
|
||||
|
||||
export function normalizePageSize(value: unknown, fallback: PageSize = DEFAULT_PAGE_SIZE): PageSize {
|
||||
const n = Number(value);
|
||||
return (PAGE_SIZE_OPTIONS as readonly number[]).includes(n) ? (n as PageSize) : fallback;
|
||||
}
|
||||
Reference in New Issue
Block a user