import { apiRequest, getPath } from './client.js'; const DEFAULT_LIST_PAGE_LIMIT = 100; function unwrapListPayload(payload) { if (Array.isArray(payload)) { return payload; } return payload?.data || payload?.entries || payload?.items || payload?.categories || []; } function hasExplicitPagination(filters = {}) { return ( (filters.limit !== undefined && filters.limit !== null) || (filters.offset !== undefined && filters.offset !== null) ); } function buildCategoryQuery(filters = {}) { const query = {}; const searchName = filters.searchName || filters.search_name; if (searchName) { query.search_name = searchName; } if (filters.active !== undefined && filters.active !== null && filters.active !== '') { query.active = Boolean(filters.active); } if (filters.orderBy || filters.order_by) { query.order_by = filters.orderBy || filters.order_by; } if (filters.orderDir || filters.order_dir) { query.order_dir = filters.orderDir || filters.order_dir; } if (filters.expanded !== undefined && filters.expanded !== null && filters.expanded !== '') { query.expanded = Boolean(filters.expanded); } return query; } async function fetchAllCategoryPages(store, baseQuery = {}) { const items = []; let offset = 0; while (true) { const payload = await apiRequest(store, getPath('categories'), { query: { ...baseQuery, limit: DEFAULT_LIST_PAGE_LIMIT, offset, }, }); const pageItems = unwrapListPayload(payload); items.push(...pageItems); if (pageItems.length < DEFAULT_LIST_PAGE_LIMIT) { break; } offset += DEFAULT_LIST_PAGE_LIMIT; } return items; } export async function listCategories(store, filters = {}) { const baseQuery = buildCategoryQuery(filters); if (hasExplicitPagination(filters)) { const query = { ...baseQuery }; if (filters.limit !== undefined && filters.limit !== null) { query.limit = filters.limit; } if (filters.offset !== undefined && filters.offset !== null) { query.offset = filters.offset; } const payload = await apiRequest(store, getPath('categories'), { query, }); return unwrapListPayload(payload); } return fetchAllCategoryPages(store, baseQuery); }