vue-use-query
Version:
vue use query
142 lines (141 loc) • 6.89 kB
JavaScript
;
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;