UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

37 lines (36 loc) • 1.76 kB
import { createCacheConfig } from "./cache-config.js"; const stripEnabled = (input)=>{ const { enabled: _inputEnabled, ...rest } = input; return rest; }; function createSimpleListDetailQueryOptionsFactory({ getList, getDetail, buildListParams, buildDetailParams, queryKeys, cacheConfig, defaultCacheStrategy = "static", isDetailInputReady = (input)=>Boolean(input.id), missingDetailErrorMessage }) { const resolvedCacheConfig = cacheConfig ?? createCacheConfig(); const buildList = buildListParams ?? ((input)=>input); const buildDetail = buildDetailParams ?? ((input)=>input); return { getListQueryOptions: (input, options)=>{ const listParams = buildList(stripEnabled(input)); const cacheStrategy = options?.cacheStrategy ?? defaultCacheStrategy; return { queryKey: queryKeys.list(listParams), queryFn: ({ signal })=>getList(listParams, signal), ...resolvedCacheConfig[cacheStrategy], ...options?.queryOptions ?? {} }; }, getDetailQueryOptions: (input, options)=>{ const detailParams = buildDetail(stripEnabled(input)); const cacheStrategy = options?.cacheStrategy ?? defaultCacheStrategy; return { queryKey: queryKeys.detail(detailParams), queryFn: ({ signal })=>{ if (!isDetailInputReady(input)) throw new Error(missingDetailErrorMessage); return getDetail(detailParams, signal); }, ...resolvedCacheConfig[cacheStrategy], ...options?.queryOptions ?? {} }; } }; } export { createSimpleListDetailQueryOptionsFactory };