UNPKG

@tanstack/query-core

Version:

The framework agnostic core that powers TanStack Query

152 lines (151 loc) 5.62 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/infiniteQueryBehavior.ts var infiniteQueryBehavior_exports = {}; __export(infiniteQueryBehavior_exports, { hasNextPage: () => hasNextPage, hasPreviousPage: () => hasPreviousPage, infiniteQueryBehavior: () => infiniteQueryBehavior }); module.exports = __toCommonJS(infiniteQueryBehavior_exports); var import_utils = require("./utils.cjs"); function infiniteQueryBehavior(pages) { return { onFetch: (context, query) => { var _a, _b, _c, _d, _e; const options = context.options; const direction = (_c = (_b = (_a = context.fetchOptions) == null ? void 0 : _a.meta) == null ? void 0 : _b.fetchMore) == null ? void 0 : _c.direction; const oldPages = ((_d = context.state.data) == null ? void 0 : _d.pages) || []; const oldPageParams = ((_e = context.state.data) == null ? void 0 : _e.pageParams) || []; let result = { pages: [], pageParams: [] }; let currentPage = 0; const fetchFn = async () => { let cancelled = false; const addSignalProperty = (object) => { Object.defineProperty(object, "signal", { enumerable: true, get: () => { if (context.signal.aborted) { cancelled = true; } else { context.signal.addEventListener("abort", () => { cancelled = true; }); } return context.signal; } }); }; const queryFn = (0, import_utils.ensureQueryFn)(context.options, context.fetchOptions); const fetchPage = async (data, param, previous) => { if (cancelled) { return Promise.reject(); } if (param == null && data.pages.length) { return Promise.resolve(data); } const queryFnContext = { client: context.client, queryKey: context.queryKey, pageParam: param, direction: previous ? "backward" : "forward", meta: context.options.meta }; addSignalProperty(queryFnContext); const page = await queryFn( queryFnContext ); const { maxPages } = context.options; const addTo = previous ? import_utils.addToStart : import_utils.addToEnd; return { pages: addTo(data.pages, page, maxPages), pageParams: addTo(data.pageParams, param, maxPages) }; }; if (direction && oldPages.length) { const previous = direction === "backward"; const pageParamFn = previous ? getPreviousPageParam : getNextPageParam; const oldData = { pages: oldPages, pageParams: oldPageParams }; const param = pageParamFn(options, oldData); result = await fetchPage(oldData, param, previous); } else { const remainingPages = pages ?? oldPages.length; do { const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result); if (currentPage > 0 && param == null) { break; } result = await fetchPage(result, param); currentPage++; } while (currentPage < remainingPages); } return result; }; if (context.options.persister) { context.fetchFn = () => { var _a2, _b2; return (_b2 = (_a2 = context.options).persister) == null ? void 0 : _b2.call( _a2, fetchFn, { client: context.client, queryKey: context.queryKey, meta: context.options.meta, signal: context.signal }, query ); }; } else { context.fetchFn = fetchFn; } } }; } function getNextPageParam(options, { pages, pageParams }) { const lastIndex = pages.length - 1; return pages.length > 0 ? options.getNextPageParam( pages[lastIndex], pages, pageParams[lastIndex], pageParams ) : void 0; } function getPreviousPageParam(options, { pages, pageParams }) { var _a; return pages.length > 0 ? (_a = options.getPreviousPageParam) == null ? void 0 : _a.call(options, pages[0], pages, pageParams[0], pageParams) : void 0; } function hasNextPage(options, data) { if (!data) return false; return getNextPageParam(options, data) != null; } function hasPreviousPage(options, data) { if (!data || !options.getPreviousPageParam) return false; return getPreviousPageParam(options, data) != null; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { hasNextPage, hasPreviousPage, infiniteQueryBehavior }); //# sourceMappingURL=infiniteQueryBehavior.cjs.map