UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

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