mirror of
https://github.com/immich-app/immich.git
synced 2025-11-13 18:16:51 -05:00
32 lines
792 B
TypeScript
32 lines
792 B
TypeScript
export interface PaginationOptions {
|
|
take: number;
|
|
skip?: number;
|
|
}
|
|
|
|
export interface PaginationResult<T> {
|
|
items: T[];
|
|
hasNextPage: boolean;
|
|
}
|
|
|
|
export type Paginated<T> = Promise<PaginationResult<T>>;
|
|
|
|
export async function* usePagination<T>(
|
|
pageSize: number,
|
|
getNextPage: (pagination: PaginationOptions) => PaginationResult<T> | Paginated<T>,
|
|
) {
|
|
let hasNextPage = true;
|
|
|
|
for (let skip = 0; hasNextPage; skip += pageSize) {
|
|
const result = await getNextPage({ take: pageSize, skip });
|
|
hasNextPage = result.hasNextPage;
|
|
yield result.items;
|
|
}
|
|
}
|
|
|
|
export function paginationHelper<Entity extends object>(items: Entity[], take: number): PaginationResult<Entity> {
|
|
const hasNextPage = items.length > take;
|
|
items.splice(take);
|
|
|
|
return { items, hasNextPage };
|
|
}
|