UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

84 lines (83 loc) • 2.93 kB
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 };