UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

64 lines (63 loc) • 2.52 kB
const stripEnabled = (query)=>{ const { enabled: _enabled, ...rest } = query; return rest; }; function createMedusaCollectionService(sdk, config) { const { listPath = "/store/collections", defaultListFields, defaultDetailFields, normalizeListQuery, normalizeDetailQuery, transformCollection, transformListCollection, transformDetailCollection } = config ?? {}; const baseTransform = transformCollection ?? ((collection)=>collection); const mapListCollection = transformListCollection ?? ((collection, _context)=>baseTransform(collection)); const mapDetailCollection = transformDetailCollection ?? ((collection, _context)=>baseTransform(collection)); 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 getCollections (params, signal) { const query = buildListQuery(params); const response = await sdk.client.fetch(listPath, { query, signal }); const collections = (response.collections ?? []).map((collection)=>mapListCollection(collection, { params, query, response })); return { collections, count: response.count ?? collections.length }; }, async getCollection (params, signal) { if (!params.id) return null; const query = buildDetailQuery(params); const response = await sdk.client.fetch(`${listPath}/${params.id}`, { query, signal }); const collection = response.collection; if (!collection) return null; return mapDetailCollection(collection, { params, query, response }); } }; } export { createMedusaCollectionService };