diff --git a/app/services/modelTypes.ts b/app/services/modelTypes.ts index bede18c..ec875eb 100644 --- a/app/services/modelTypes.ts +++ b/app/services/modelTypes.ts @@ -96,11 +96,21 @@ export async function listModelTypes(params: ModelTypeListParams = {}, opts: { s if (params.dir) { query.dir = params.dir; } - if (typeof params.limit === 'number') { - query.itemsPerPage = params.limit; - } - if (typeof params.offset === 'number') { - query.offset = params.offset; + const hasCategoryFilter = Boolean(params.category); + const effectiveLimit = typeof params.limit === 'number' ? params.limit : undefined; + const effectiveOffset = typeof params.offset === 'number' ? params.offset : 0; + + 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>(ENDPOINT, createOptions({ @@ -116,22 +126,25 @@ export async function listModelTypes(params: ModelTypeListParams = {}, opts: { s : Array.isArray(payload?.items) ? payload.items : []; - const items = params.category + const filteredItems = params.category ? rawItems.filter((item: any) => item?.category === params.category) : rawItems; const total = params.category - ? items.length + ? filteredItems.length : typeof payload?.totalItems === 'number' ? payload.totalItems : Array.isArray(payload?.items) ? payload.items.length : rawItems.length; + const items = params.category && typeof effectiveLimit === 'number' + ? filteredItems.slice(effectiveOffset, effectiveOffset + effectiveLimit) + : filteredItems; return { items, total, - offset: params.offset ?? 0, - limit: typeof params.limit === 'number' ? params.limit : items.length, + offset: effectiveOffset, + limit: typeof effectiveLimit === 'number' ? effectiveLimit : items.length, } satisfies ModelTypeListResponse; }