@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
37 lines (36 loc) • 1.76 kB
JavaScript
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 };