@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
84 lines (83 loc) • 2.93 kB
JavaScript
import { createCacheConfig } from "../shared/cache-config.js";
import { createSimpleListDetailHooks } from "../shared/simple-list-detail-hooks.js";
import { createRegionQueryKeys } from "./query-keys.js";
import { createRegionQueryOptionsFactory } from "./query-options.js";
function createRegionHooks({ service, buildListParams, buildDetailParams, queryKeys, queryKeyNamespace = "storefront-data", cacheConfig, defaultPageSize = 20 }) {
const resolvedCacheConfig = cacheConfig ?? createCacheConfig();
const resolvedQueryKeys = queryKeys ?? createRegionQueryKeys(queryKeyNamespace);
const buildList = buildListParams ?? ((input)=>input);
const buildDetail = buildDetailParams ?? ((input)=>input);
const { getListQueryOptions, getDetailQueryOptions } = createRegionQueryOptionsFactory({
service,
buildListParams: buildList,
buildDetailParams: buildDetail,
queryKeys: resolvedQueryKeys,
cacheConfig: resolvedCacheConfig
});
const simpleHooks = createSimpleListDetailHooks({
buildList,
buildDetail,
getListItems: (data)=>data?.regions ?? [],
getList: service.getRegions,
getDetail: service.getRegion,
getListQueryOptions,
getDetailQueryOptions,
resolvedCacheConfig,
resolvedQueryKeys,
defaultPageSize,
defaultCacheStrategy: "static"
});
function useRegions(input, options) {
const { items, ...result } = simpleHooks.useList(input, options);
return {
...result,
regions: items
};
}
function useSuspenseRegions(input, options) {
const { items, ...result } = simpleHooks.useSuspenseList(input, options);
return {
...result,
regions: items
};
}
function useRegion(input, options) {
const { item, ...result } = simpleHooks.useDetail(input, options);
return {
...result,
region: item
};
}
function useSuspenseRegion(input, options) {
const { item, ...result } = simpleHooks.useSuspenseDetail(input, options);
return {
...result,
region: item
};
}
function usePrefetchRegions(options) {
const { prefetchList, ...result } = simpleHooks.usePrefetchList(options);
return {
...result,
prefetchRegions: prefetchList
};
}
function usePrefetchRegion(options) {
const { prefetchDetail, ...result } = simpleHooks.usePrefetchDetail(options);
return {
...result,
prefetchRegion: prefetchDetail
};
}
return {
getListQueryOptions,
getDetailQueryOptions,
useRegions,
useSuspenseRegions,
useRegion,
useSuspenseRegion,
usePrefetchRegions,
usePrefetchRegion
};
}
export { createRegionHooks };