UNPKG

vue-use-query

Version:

vue use query

142 lines (141 loc) 6.89 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasPreviousPage = exports.hasNextPage = exports.getPreviousPageParam = exports.getNextPageParam = exports.infiniteQueryBehavior = void 0; var retryer_1 = require("./retryer"); function infiniteQueryBehavior() { return { onFetch: function (context) { context.fetchFn = function () { var _a, _b, _c, _d; var fetchMore = (_b = (_a = context.fetchOptions) === null || _a === void 0 ? void 0 : _a.meta) === null || _b === void 0 ? void 0 : _b.fetchMore; var pageParam = fetchMore === null || fetchMore === void 0 ? void 0 : fetchMore.pageParam; var isFetchingNextPage = (fetchMore === null || fetchMore === void 0 ? void 0 : fetchMore.direction) === 'forward'; var isFetchingPreviousPage = (fetchMore === null || fetchMore === void 0 ? void 0 : fetchMore.direction) === 'backward'; var oldPages = ((_c = context.state.data) === null || _c === void 0 ? void 0 : _c.pages) || []; var oldPageParams = ((_d = context.state.data) === null || _d === void 0 ? void 0 : _d.pageParams) || []; var newPageParams = oldPageParams; var cancelled = false; // Get query function var queryFn = context.options.queryFn || (function () { return Promise.reject('Missing queryFn'); }); // Create function to fetch a page var fetchPage = function (pages, manual, param, previous) { if (cancelled) { return Promise.reject('Cancelled'); } if (typeof param === 'undefined' && !manual && pages.length) { return Promise.resolve(pages); } var queryFnContext = { queryKey: context.queryKey, pageParam: param, }; var queryFnResult = queryFn(queryFnContext); var promise = Promise.resolve(queryFnResult).then(function (page) { newPageParams = previous ? __spreadArray([param], newPageParams) : __spreadArray(__spreadArray([], newPageParams), [param]); return previous ? __spreadArray([page], pages) : __spreadArray(__spreadArray([], pages), [page]); }); if (retryer_1.isCancelable(queryFnResult)) { var promiseAsAny = promise; promiseAsAny.cancel = queryFnResult.cancel; } return promise; }; var promise; // Fetch first page? if (!oldPages.length) { promise = fetchPage([]); } // Fetch next page? else if (isFetchingNextPage) { var manual = typeof pageParam !== 'undefined'; var param = manual ? pageParam : getNextPageParam(context.options, oldPages); promise = fetchPage(oldPages, manual, param); } // Fetch previous page? else if (isFetchingPreviousPage) { var manual = typeof pageParam !== 'undefined'; var param = manual ? pageParam : getPreviousPageParam(context.options, oldPages); promise = fetchPage(oldPages, manual, param, true); } // Refetch pages else { newPageParams = []; var manual_1 = typeof context.options.getNextPageParam === 'undefined'; // Fetch first page promise = fetchPage([], manual_1, oldPageParams[0]); var _loop_1 = function (i) { promise = promise.then(function (pages) { var param = manual_1 ? oldPageParams[i] : getNextPageParam(context.options, pages); return fetchPage(pages, manual_1, param); }); }; // Fetch remaining pages for (var i = 1; i < oldPages.length; i++) { _loop_1(i); } } var finalPromise = promise.then(function (pages) { return ({ pages: pages, pageParams: newPageParams, }); }); var finalPromiseAsAny = finalPromise; finalPromiseAsAny.cancel = function () { cancelled = true; if (retryer_1.isCancelable(promise)) { promise.cancel(); } }; return finalPromise; }; }, }; } exports.infiniteQueryBehavior = infiniteQueryBehavior; function getNextPageParam(options, pages) { var _a; return (_a = options.getNextPageParam) === null || _a === void 0 ? void 0 : _a.call(options, pages[pages.length - 1], pages); } exports.getNextPageParam = getNextPageParam; function getPreviousPageParam(options, pages) { var _a; return (_a = options.getPreviousPageParam) === null || _a === void 0 ? void 0 : _a.call(options, pages[0], pages); } exports.getPreviousPageParam = getPreviousPageParam; /** * Checks if there is a next page. * Returns `undefined` if it cannot be determined. */ function hasNextPage(options, pages) { if (options.getNextPageParam && Array.isArray(pages)) { var nextPageParam = getNextPageParam(options, pages); return (typeof nextPageParam !== 'undefined' && nextPageParam !== null && nextPageParam !== false); } } exports.hasNextPage = hasNextPage; /** * Checks if there is a previous page. * Returns `undefined` if it cannot be determined. */ function hasPreviousPage(options, pages) { if (options.getPreviousPageParam && Array.isArray(pages)) { var previousPageParam = getPreviousPageParam(options, pages); return (typeof previousPageParam !== 'undefined' && previousPageParam !== null && previousPageParam !== false); } } exports.hasPreviousPage = hasPreviousPage;