fix(modeles): paginer apres filtre categorie

This commit is contained in:
2026-01-15 12:51:30 +01:00
parent 84048bf3a2
commit 52f75c5301

View File

@@ -96,11 +96,21 @@ export async function listModelTypes(params: ModelTypeListParams = {}, opts: { s
if (params.dir) { if (params.dir) {
query.dir = params.dir; query.dir = params.dir;
} }
if (typeof params.limit === 'number') { const hasCategoryFilter = Boolean(params.category);
query.itemsPerPage = params.limit; const effectiveLimit = typeof params.limit === 'number' ? params.limit : undefined;
} const effectiveOffset = typeof params.offset === 'number' ? params.offset : 0;
if (typeof params.offset === 'number') {
query.offset = params.offset; if (hasCategoryFilter) {
// Fetch enough items to allow client-side category filtering + pagination.
query.itemsPerPage = Math.max(effectiveLimit ?? 200, 200);
query.offset = 0;
} else {
if (typeof params.limit === 'number') {
query.itemsPerPage = params.limit;
}
if (typeof params.offset === 'number') {
query.offset = params.offset;
}
} }
const payload = await requestFetch<Record<string, any>>(ENDPOINT, createOptions({ const payload = await requestFetch<Record<string, any>>(ENDPOINT, createOptions({
@@ -116,22 +126,25 @@ export async function listModelTypes(params: ModelTypeListParams = {}, opts: { s
: Array.isArray(payload?.items) : Array.isArray(payload?.items)
? payload.items ? payload.items
: []; : [];
const items = params.category const filteredItems = params.category
? rawItems.filter((item: any) => item?.category === params.category) ? rawItems.filter((item: any) => item?.category === params.category)
: rawItems; : rawItems;
const total = params.category const total = params.category
? items.length ? filteredItems.length
: typeof payload?.totalItems === 'number' : typeof payload?.totalItems === 'number'
? payload.totalItems ? payload.totalItems
: Array.isArray(payload?.items) : Array.isArray(payload?.items)
? payload.items.length ? payload.items.length
: rawItems.length; : rawItems.length;
const items = params.category && typeof effectiveLimit === 'number'
? filteredItems.slice(effectiveOffset, effectiveOffset + effectiveLimit)
: filteredItems;
return { return {
items, items,
total, total,
offset: params.offset ?? 0, offset: effectiveOffset,
limit: typeof params.limit === 'number' ? params.limit : items.length, limit: typeof effectiveLimit === 'number' ? effectiveLimit : items.length,
} satisfies ModelTypeListResponse; } satisfies ModelTypeListResponse;
} }