fix(ui): paginate listAll to fetch beyond 500 records from PocketBase
The previous implementation sent a single request with perPage=500 and silently dropped any records beyond that. Books with 900+ chapters were truncated to 500 in the chapter list and reader prev/next navigation. Now loops through all pages until totalItems is exhausted.
This commit is contained in:
@@ -132,13 +132,28 @@ interface PBList<T> {
|
||||
}
|
||||
|
||||
async function listAll<T>(collection: string, filter = '', sort = ''): Promise<T[]> {
|
||||
const params = new URLSearchParams({ perPage: '500' });
|
||||
const perPage = 500;
|
||||
const params = new URLSearchParams({ perPage: String(perPage), page: '1' });
|
||||
if (filter) params.set('filter', filter);
|
||||
if (sort) params.set('sort', sort);
|
||||
const data = await pbGet<PBList<T>>(
|
||||
|
||||
const first = await pbGet<PBList<T>>(
|
||||
`/api/collections/${collection}/records?${params.toString()}`
|
||||
);
|
||||
return data.items ?? [];
|
||||
const items: T[] = first.items ?? [];
|
||||
const total = first.totalItems ?? 0;
|
||||
|
||||
// Fetch remaining pages if there are more records than the first page holds.
|
||||
const totalPages = Math.ceil(total / perPage);
|
||||
for (let page = 2; page <= totalPages; page++) {
|
||||
params.set('page', String(page));
|
||||
const data = await pbGet<PBList<T>>(
|
||||
`/api/collections/${collection}/records?${params.toString()}`
|
||||
);
|
||||
items.push(...(data.items ?? []));
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
async function listN<T>(collection: string, n: number, filter = '', sort = ''): Promise<T[]> {
|
||||
|
||||
Reference in New Issue
Block a user