UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

37 lines (36 loc) • 1.79 kB
import { appendQueryKey } from "../shared/query-keys.js"; import { applyRegion } from "../shared/region.js"; const resolveProductQueryInput = (input, region)=>{ const { enabled: _inputEnabled, ...baseInput } = input; return applyRegion(baseInput, region); }; const createProductListQueryDefinition = ({ input, region, service, buildListParams, queryKeys, useGlobalFetcher, transformInput })=>{ const resolvedInput = resolveProductQueryInput(input, region); const normalizedInput = transformInput ? transformInput(resolvedInput) : resolvedInput; const listParams = buildListParams(normalizedInput); const globalFetcher = useGlobalFetcher ? service.getProductsGlobal : void 0; const queryKey = globalFetcher ? appendQueryKey(queryKeys.list(listParams), { fetcher: "global" }) : queryKeys.list(listParams); return { resolvedInput: normalizedInput, listParams, useGlobalFetcher: Boolean(globalFetcher), queryKey, queryFn: ({ signal })=>globalFetcher ? globalFetcher(listParams, signal) : service.getProducts(listParams, signal) }; }; const createProductDetailQueryDefinition = ({ input, region, service, buildDetailParams, queryKeys })=>{ const resolvedInput = resolveProductQueryInput(input, region); const detailParams = buildDetailParams(resolvedInput); return { resolvedInput, detailParams, queryKey: queryKeys.detail(detailParams), queryFn: ({ signal })=>{ if (!resolvedInput.handle) throw new Error("Product handle is required for product queries"); return service.getProductByHandle(detailParams, signal); } }; }; export { createProductDetailQueryDefinition, createProductListQueryDefinition, resolveProductQueryInput };