UNPKG

@techsio/storefront-data

Version:

Medusa-first storefront data layer built on TanStack Query.

50 lines (49 loc) • 2.17 kB
const uniquePages = (pages)=>Array.from(new Set(pages)); const pushPageIfValid = (pages, page, input)=>{ if (null == page) return; if (page < 1 || page > input.totalPages) return; pages.push(page); }; const createSimplePrefetchPagesPlan = (input)=>{ const pagesToPrefetch = []; pushPageIfValid(pagesToPrefetch, 1 !== input.currentPage ? 1 : null, input); pushPageIfValid(pagesToPrefetch, input.hasPrevPage ? input.currentPage - 1 : null, input); pushPageIfValid(pagesToPrefetch, input.hasPrevPage ? input.currentPage - 2 : null, input); pushPageIfValid(pagesToPrefetch, input.hasNextPage ? input.currentPage + 1 : null, input); pushPageIfValid(pagesToPrefetch, input.hasNextPage ? input.currentPage + 2 : null, input); pushPageIfValid(pagesToPrefetch, input.currentPage !== input.totalPages ? input.totalPages : null, input); return { immediate: uniquePages(pagesToPrefetch), medium: [], low: [] }; }; const createPriorityPrefetchPagesPlan = (input)=>{ const high = input.hasNextPage ? [ input.currentPage + 1 ] : []; const medium = input.hasNextPage && input.currentPage + 2 <= input.totalPages ? [ input.currentPage + 2 ] : []; const lowCandidates = [ input.hasPrevPage ? input.currentPage - 1 : null, 1 !== input.currentPage ? 1 : null, input.totalPages > 1 && input.currentPage !== input.totalPages ? input.totalPages : null ].filter((page)=>null !== page); const immediate = uniquePages(high); const immediateSet = new Set(immediate); const mediumPages = uniquePages(medium).filter((page)=>!immediateSet.has(page)); const mediumSet = new Set(mediumPages); const lowPages = uniquePages(lowCandidates).filter((page)=>!(immediateSet.has(page) || mediumSet.has(page))); return { immediate, medium: mediumPages, low: lowPages }; }; const createPrefetchPagesPlan = (input)=>{ const mode = input.mode ?? "priority"; if ("simple" === mode) return createSimplePrefetchPagesPlan(input); return createPriorityPrefetchPagesPlan(input); }; export { createPrefetchPagesPlan };