@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
84 lines (83 loc) • 3.04 kB
JavaScript
import { createCacheConfig } from "../shared/cache-config.js";
import { createSimpleListDetailHooks } from "../shared/simple-list-detail-hooks.js";
import { createCollectionQueryKeys } from "./query-keys.js";
import { createCollectionQueryOptionsFactory } from "./query-options.js";
function createCollectionHooks({ service, buildListParams, buildDetailParams, queryKeys, queryKeyNamespace = "storefront-data", cacheConfig, defaultPageSize = 20 }) {
const resolvedCacheConfig = cacheConfig ?? createCacheConfig();
const resolvedQueryKeys = queryKeys ?? createCollectionQueryKeys(queryKeyNamespace);
const buildList = buildListParams ?? ((input)=>input);
const buildDetail = buildDetailParams ?? ((input)=>input);
const { getListQueryOptions, getDetailQueryOptions } = createCollectionQueryOptionsFactory({
service,
buildListParams: buildList,
buildDetailParams: buildDetail,
queryKeys: resolvedQueryKeys,
cacheConfig: resolvedCacheConfig
});
const simpleHooks = createSimpleListDetailHooks({
buildList,
buildDetail,
getListItems: (data)=>data?.collections ?? [],
getList: service.getCollections,
getDetail: service.getCollection,
getListQueryOptions,
getDetailQueryOptions,
resolvedCacheConfig,
resolvedQueryKeys,
defaultPageSize,
defaultCacheStrategy: "static"
});
function useCollections(input, options) {
const { items, ...result } = simpleHooks.useList(input, options);
return {
...result,
collections: items
};
}
function useSuspenseCollections(input, options) {
const { items, ...result } = simpleHooks.useSuspenseList(input, options);
return {
...result,
collections: items
};
}
function useCollection(input, options) {
const { item, ...result } = simpleHooks.useDetail(input, options);
return {
...result,
collection: item
};
}
function useSuspenseCollection(input, options) {
const { item, ...result } = simpleHooks.useSuspenseDetail(input, options);
return {
...result,
collection: item
};
}
function usePrefetchCollections(options) {
const { prefetchList, ...result } = simpleHooks.usePrefetchList(options);
return {
...result,
prefetchCollections: prefetchList
};
}
function usePrefetchCollection(options) {
const { prefetchDetail, ...result } = simpleHooks.usePrefetchDetail(options);
return {
...result,
prefetchCollection: prefetchDetail
};
}
return {
getListQueryOptions,
getDetailQueryOptions,
useCollections,
useSuspenseCollections,
useCollection,
useSuspenseCollection,
usePrefetchCollections,
usePrefetchCollection
};
}
export { createCollectionHooks };