fix(modeles): paginer apres filtre categorie
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user