UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

64 lines (63 loc) • 2.49 kB
const stripEnabled = (query)=>{ const { enabled: _enabled, ...rest } = query; return rest; }; function createMedusaCategoryService(sdk, config) { const { listPath = "/store/product-categories", defaultListFields, defaultDetailFields, normalizeListQuery, normalizeDetailQuery, transformCategory, transformListCategory, transformDetailCategory } = config ?? {}; const baseTransform = transformCategory ?? ((category)=>category); const mapListCategory = transformListCategory ?? ((category, _context)=>baseTransform(category)); const mapDetailCategory = transformDetailCategory ?? ((category, _context)=>baseTransform(category)); const buildListQuery = (params)=>{ const query = normalizeListQuery ? normalizeListQuery(params) : { ...params, ...defaultListFields && !params.fields ? { fields: defaultListFields } : {} }; return stripEnabled(query); }; const buildDetailQuery = (params)=>{ const query = normalizeDetailQuery ? normalizeDetailQuery(params) : { ...params, ...defaultDetailFields && !params.fields ? { fields: defaultDetailFields } : {} }; const { id: _id, ...withoutId } = query; return stripEnabled(withoutId); }; return { async getCategories (params, signal) { const query = buildListQuery(params); const response = await sdk.client.fetch(listPath, { query, signal }); const categories = (response.product_categories ?? []).map((category)=>mapListCategory(category, { params, query, response })); return { categories, count: response.count ?? categories.length }; }, async getCategory (params, signal) { if (!params.id) return null; const query = buildDetailQuery(params); const response = await sdk.client.fetch(`${listPath}/${params.id}`, { query, signal }); const category = response.product_category; if (!category) return null; return mapDetailCategory(category, { params, query, response }); } }; } export { createMedusaCategoryService };