@techsio/storefront-data
Version:
Medusa-first storefront data layer built on TanStack Query.
68 lines (67 loc) • 2.41 kB
JavaScript
import { createCacheConfig } from "../shared/cache-config.js";
import { createSimpleListDetailHooks } from "../shared/simple-list-detail-hooks.js";
import { createOrderQueryKeys } from "./query-keys.js";
import { createOrderQueryOptionsFactory } from "./query-options.js";
function createOrderHooks({ service, buildListParams, buildDetailParams, queryKeys, queryKeyNamespace = "storefront-data", cacheConfig, defaultPageSize = 20 }) {
const resolvedCacheConfig = cacheConfig ?? createCacheConfig();
const resolvedQueryKeys = queryKeys ?? createOrderQueryKeys(queryKeyNamespace);
const buildList = buildListParams ?? ((input)=>input);
const buildDetail = buildDetailParams ?? ((input)=>input);
const { getListQueryOptions, getDetailQueryOptions } = createOrderQueryOptionsFactory({
service,
buildListParams: buildList,
buildDetailParams: buildDetail,
queryKeys: resolvedQueryKeys,
cacheConfig: resolvedCacheConfig
});
const simpleHooks = createSimpleListDetailHooks({
buildList,
buildDetail,
getListItems: (data)=>data?.orders ?? [],
getList: service.getOrders,
getDetail: service.getOrder,
getListQueryOptions,
getDetailQueryOptions,
resolvedCacheConfig,
resolvedQueryKeys,
defaultPageSize,
defaultCacheStrategy: "userData"
});
function useOrders(input, options) {
const { items, ...result } = simpleHooks.useList(input, options);
return {
...result,
orders: items
};
}
function useSuspenseOrders(input, options) {
const { items, ...result } = simpleHooks.useSuspenseList(input, options);
return {
...result,
orders: items
};
}
function useOrder(input, options) {
const { item, ...result } = simpleHooks.useDetail(input, options);
return {
...result,
order: item
};
}
function useSuspenseOrder(input, options) {
const { item, ...result } = simpleHooks.useSuspenseDetail(input, options);
return {
...result,
order: item
};
}
return {
getListQueryOptions,
getDetailQueryOptions,
useOrders,
useSuspenseOrders,
useOrder,
useSuspenseOrder
};
}
export { createOrderHooks };