@tanstack/query-core 5.0.0-alpha.2 → 5.0.0-alpha.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js +13 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js +16 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/build/lib/focusManager.esm.js +31 -15
- package/build/lib/focusManager.esm.js.map +1 -1
- package/build/lib/focusManager.js +31 -15
- package/build/lib/focusManager.js.map +1 -1
- package/build/lib/hydration.d.ts +2 -6
- package/build/lib/hydration.esm.js +9 -20
- package/build/lib/hydration.esm.js.map +1 -1
- package/build/lib/hydration.js +9 -20
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/hydration.mjs +4 -18
- package/build/lib/hydration.mjs.map +1 -1
- package/build/lib/index.d.ts +3 -3
- package/build/lib/infiniteQueryBehavior.d.ts +2 -2
- package/build/lib/infiniteQueryBehavior.esm.js +52 -48
- package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.js +52 -48
- package/build/lib/infiniteQueryBehavior.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.mjs +48 -45
- package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
- package/build/lib/infiniteQueryObserver.d.ts +6 -6
- package/build/lib/infiniteQueryObserver.esm.js +7 -8
- package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
- package/build/lib/infiniteQueryObserver.js +7 -8
- package/build/lib/infiniteQueryObserver.js.map +1 -1
- package/build/lib/infiniteQueryObserver.mjs +4 -6
- package/build/lib/infiniteQueryObserver.mjs.map +1 -1
- package/build/lib/mutation.d.ts +2 -1
- package/build/lib/mutation.esm.js +134 -101
- package/build/lib/mutation.esm.js.map +1 -1
- package/build/lib/mutation.js +134 -101
- package/build/lib/mutation.js.map +1 -1
- package/build/lib/mutation.mjs +10 -2
- package/build/lib/mutation.mjs.map +1 -1
- package/build/lib/mutationCache.d.ts +2 -2
- package/build/lib/mutationCache.esm.js +34 -20
- package/build/lib/mutationCache.esm.js.map +1 -1
- package/build/lib/mutationCache.js +34 -20
- package/build/lib/mutationCache.js.map +1 -1
- package/build/lib/mutationCache.mjs +5 -4
- package/build/lib/mutationCache.mjs.map +1 -1
- package/build/lib/mutationObserver.esm.js +81 -50
- package/build/lib/mutationObserver.esm.js.map +1 -1
- package/build/lib/mutationObserver.js +81 -50
- package/build/lib/mutationObserver.js.map +1 -1
- package/build/lib/mutationObserver.mjs +1 -0
- package/build/lib/mutationObserver.mjs.map +1 -1
- package/build/lib/onlineManager.esm.js +29 -14
- package/build/lib/onlineManager.esm.js.map +1 -1
- package/build/lib/onlineManager.js +29 -14
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/queriesObserver.esm.js +95 -65
- package/build/lib/queriesObserver.esm.js.map +1 -1
- package/build/lib/queriesObserver.js +95 -65
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/queriesObserver.mjs +4 -3
- package/build/lib/queriesObserver.mjs.map +1 -1
- package/build/lib/query.d.ts +4 -3
- package/build/lib/query.esm.js +210 -161
- package/build/lib/query.esm.js.map +1 -1
- package/build/lib/query.js +210 -161
- package/build/lib/query.js.map +1 -1
- package/build/lib/query.mjs +1 -1
- package/build/lib/query.mjs.map +1 -1
- package/build/lib/queryCache.d.ts +2 -2
- package/build/lib/queryCache.esm.js +21 -13
- package/build/lib/queryCache.esm.js.map +1 -1
- package/build/lib/queryCache.js +21 -13
- package/build/lib/queryCache.js.map +1 -1
- package/build/lib/queryCache.mjs +5 -4
- package/build/lib/queryCache.mjs.map +1 -1
- package/build/lib/queryClient.esm.js +109 -68
- package/build/lib/queryClient.esm.js.map +1 -1
- package/build/lib/queryClient.js +109 -68
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryClient.mjs +7 -6
- package/build/lib/queryClient.mjs.map +1 -1
- package/build/lib/queryObserver.d.ts +2 -4
- package/build/lib/queryObserver.esm.js +299 -211
- package/build/lib/queryObserver.esm.js.map +1 -1
- package/build/lib/queryObserver.js +297 -209
- package/build/lib/queryObserver.js.map +1 -1
- package/build/lib/queryObserver.mjs +13 -25
- package/build/lib/queryObserver.mjs.map +1 -1
- package/build/lib/removable.esm.js +13 -6
- package/build/lib/removable.esm.js.map +1 -1
- package/build/lib/removable.js +13 -6
- package/build/lib/removable.js.map +1 -1
- package/build/lib/retryer.esm.js +15 -14
- package/build/lib/retryer.esm.js.map +1 -1
- package/build/lib/retryer.js +15 -14
- package/build/lib/retryer.js.map +1 -1
- package/build/lib/tests/utils.d.ts +4 -5
- package/build/lib/types.d.ts +10 -20
- package/build/lib/utils.esm.js +1 -1
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/utils.js.map +1 -1
- package/build/umd/index.development.js +101 -113
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/hydration.ts +18 -37
- package/src/index.ts +2 -4
- package/src/infiniteQueryBehavior.ts +52 -60
- package/src/infiniteQueryObserver.ts +15 -10
- package/src/mutation.ts +14 -5
- package/src/mutationCache.ts +6 -6
- package/src/mutationObserver.ts +1 -0
- package/src/queriesObserver.ts +8 -8
- package/src/query.ts +13 -8
- package/src/queryCache.ts +9 -8
- package/src/queryClient.ts +4 -6
- package/src/queryObserver.ts +26 -38
- package/src/tests/focusManager.test.tsx +12 -14
- package/src/tests/hydration.test.tsx +22 -17
- package/src/tests/infiniteQueryBehavior.test.tsx +16 -9
- package/src/tests/infiniteQueryObserver.test.tsx +62 -1
- package/src/tests/mutationCache.test.tsx +11 -10
- package/src/tests/mutationObserver.test.tsx +3 -2
- package/src/tests/mutations.test.tsx +41 -9
- package/src/tests/notifyManager.test.tsx +7 -6
- package/src/tests/onlineManager.test.tsx +12 -17
- package/src/tests/queriesObserver.test.tsx +18 -17
- package/src/tests/query.test.tsx +18 -17
- package/src/tests/queryCache.test.tsx +14 -13
- package/src/tests/queryClient.test.tsx +49 -48
- package/src/tests/queryObserver.test.tsx +65 -9
- package/src/tests/utils.test.tsx +2 -1
- package/src/tests/utils.ts +5 -4
- package/src/types.ts +15 -19
|
@@ -3,12 +3,16 @@ import { addToStart, addToEnd } from './utils.esm.js';
|
|
|
3
3
|
function infiniteQueryBehavior() {
|
|
4
4
|
return {
|
|
5
5
|
onFetch: context => {
|
|
6
|
-
context.fetchFn = () => {
|
|
6
|
+
context.fetchFn = async () => {
|
|
7
|
+
var _context$fetchOptions, _context$fetchOptions2, _context$fetchOptions3, _context$state$data, _context$state$data2;
|
|
7
8
|
const options = context.options;
|
|
8
|
-
const direction = context.fetchOptions
|
|
9
|
-
const oldPages = context.state.data
|
|
10
|
-
const oldPageParams = context.state.data
|
|
11
|
-
|
|
9
|
+
const direction = (_context$fetchOptions = context.fetchOptions) == null ? void 0 : (_context$fetchOptions2 = _context$fetchOptions.meta) == null ? void 0 : (_context$fetchOptions3 = _context$fetchOptions2.fetchMore) == null ? void 0 : _context$fetchOptions3.direction;
|
|
10
|
+
const oldPages = ((_context$state$data = context.state.data) == null ? void 0 : _context$state$data.pages) || [];
|
|
11
|
+
const oldPageParams = ((_context$state$data2 = context.state.data) == null ? void 0 : _context$state$data2.pageParams) || [];
|
|
12
|
+
const empty = {
|
|
13
|
+
pages: [],
|
|
14
|
+
pageParams: []
|
|
15
|
+
};
|
|
12
16
|
let cancelled = false;
|
|
13
17
|
const addSignalProperty = object => {
|
|
14
18
|
Object.defineProperty(object, 'signal', {
|
|
@@ -28,95 +32,95 @@ function infiniteQueryBehavior() {
|
|
|
28
32
|
|
|
29
33
|
// Get query function
|
|
30
34
|
const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
|
|
31
|
-
const buildNewPages = (pages, param, page, previous) => {
|
|
32
|
-
const {
|
|
33
|
-
maxPages
|
|
34
|
-
} = context.options;
|
|
35
|
-
if (previous) {
|
|
36
|
-
newPageParams = addToStart(newPageParams, param, maxPages);
|
|
37
|
-
return addToStart(pages, page, maxPages);
|
|
38
|
-
}
|
|
39
|
-
newPageParams = addToEnd(newPageParams, param, maxPages);
|
|
40
|
-
return addToEnd(pages, page, maxPages);
|
|
41
|
-
};
|
|
42
35
|
|
|
43
36
|
// Create function to fetch a page
|
|
44
|
-
const fetchPage = (
|
|
37
|
+
const fetchPage = async (data, param, previous) => {
|
|
45
38
|
if (cancelled) {
|
|
46
39
|
return Promise.reject();
|
|
47
40
|
}
|
|
48
|
-
if (typeof param === 'undefined' && pages.length) {
|
|
49
|
-
return Promise.resolve(
|
|
41
|
+
if (typeof param === 'undefined' && data.pages.length) {
|
|
42
|
+
return Promise.resolve(data);
|
|
50
43
|
}
|
|
51
44
|
const queryFnContext = {
|
|
52
45
|
queryKey: context.queryKey,
|
|
53
46
|
pageParam: param,
|
|
47
|
+
direction: previous ? 'backward' : 'forward',
|
|
54
48
|
meta: context.options.meta
|
|
55
49
|
};
|
|
56
50
|
addSignalProperty(queryFnContext);
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
51
|
+
const page = await queryFn(queryFnContext);
|
|
52
|
+
const {
|
|
53
|
+
maxPages
|
|
54
|
+
} = context.options;
|
|
55
|
+
const addTo = previous ? addToStart : addToEnd;
|
|
56
|
+
return {
|
|
57
|
+
pages: addTo(data.pages, page, maxPages),
|
|
58
|
+
pageParams: addTo(data.pageParams, param, maxPages)
|
|
59
|
+
};
|
|
60
60
|
};
|
|
61
|
-
let
|
|
61
|
+
let result;
|
|
62
62
|
|
|
63
63
|
// Fetch first page?
|
|
64
64
|
if (!oldPages.length) {
|
|
65
|
-
|
|
65
|
+
result = await fetchPage(empty, options.defaultPageParam);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
// fetch next / previous page?
|
|
69
69
|
else if (direction) {
|
|
70
70
|
const previous = direction === 'backward';
|
|
71
|
-
const
|
|
72
|
-
|
|
71
|
+
const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
|
|
72
|
+
const oldData = {
|
|
73
|
+
pages: oldPages,
|
|
74
|
+
pageParams: oldPageParams
|
|
75
|
+
};
|
|
76
|
+
const param = pageParamFn(options, oldData);
|
|
77
|
+
result = await fetchPage(oldData, param, previous);
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
// Refetch pages
|
|
76
81
|
else {
|
|
77
|
-
newPageParams = [];
|
|
78
|
-
|
|
79
82
|
// Fetch first page
|
|
80
|
-
|
|
83
|
+
result = await fetchPage(empty, oldPageParams[0]);
|
|
81
84
|
|
|
82
85
|
// Fetch remaining pages
|
|
83
86
|
for (let i = 1; i < oldPages.length; i++) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return fetchPage(pages, param);
|
|
87
|
-
});
|
|
87
|
+
const param = getNextPageParam(options, result);
|
|
88
|
+
result = await fetchPage(result, param);
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
|
-
|
|
91
|
-
pages,
|
|
92
|
-
pageParams: newPageParams
|
|
93
|
-
}));
|
|
94
|
-
return finalPromise;
|
|
91
|
+
return result;
|
|
95
92
|
};
|
|
96
93
|
}
|
|
97
94
|
};
|
|
98
95
|
}
|
|
99
|
-
function getNextPageParam(options,
|
|
100
|
-
|
|
96
|
+
function getNextPageParam(options, {
|
|
97
|
+
pages,
|
|
98
|
+
pageParams
|
|
99
|
+
}) {
|
|
100
|
+
const lastIndex = pages.length - 1;
|
|
101
|
+
return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);
|
|
101
102
|
}
|
|
102
|
-
function getPreviousPageParam(options,
|
|
103
|
-
|
|
103
|
+
function getPreviousPageParam(options, {
|
|
104
|
+
pages,
|
|
105
|
+
pageParams
|
|
106
|
+
}) {
|
|
107
|
+
return options.getPreviousPageParam == null ? void 0 : options.getPreviousPageParam(pages[0], pages, pageParams[0], pageParams);
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
/**
|
|
107
111
|
* Checks if there is a next page.
|
|
108
112
|
*/
|
|
109
|
-
function hasNextPage(options,
|
|
110
|
-
if (!
|
|
111
|
-
return typeof getNextPageParam(options,
|
|
113
|
+
function hasNextPage(options, data) {
|
|
114
|
+
if (!data) return false;
|
|
115
|
+
return typeof getNextPageParam(options, data) !== 'undefined';
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
/**
|
|
115
119
|
* Checks if there is a previous page.
|
|
116
120
|
*/
|
|
117
|
-
function hasPreviousPage(options,
|
|
118
|
-
if (!
|
|
119
|
-
return typeof getPreviousPageParam(options,
|
|
121
|
+
function hasPreviousPage(options, data) {
|
|
122
|
+
if (!data || !options.getPreviousPageParam) return false;
|
|
123
|
+
return typeof getPreviousPageParam(options, data) !== 'undefined';
|
|
120
124
|
}
|
|
121
125
|
|
|
122
126
|
export { hasNextPage, hasPreviousPage, infiniteQueryBehavior };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryBehavior.esm.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\nimport { addToEnd, addToStart } from './utils'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n>(): QueryBehavior<TQueryFnData, TError, InfiniteData<TData>> {\n return {\n onFetch: (context) => {\n context.fetchFn = () => {\n const options = context.options as InfiniteQueryPageParamsOptions<TData>\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n
|
|
1
|
+
{"version":3,"file":"infiniteQueryBehavior.esm.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\nimport { addToEnd, addToStart } from './utils'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n>(): QueryBehavior<TQueryFnData, TError, InfiniteData<TData>> {\n return {\n onFetch: (context) => {\n context.fetchFn = async () => {\n const options = context.options as InfiniteQueryPageParamsOptions<TData>\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n const empty = { pages: [], pageParams: [] }\n let cancelled = false\n\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true\n } else {\n context.signal.addEventListener('abort', () => {\n cancelled = true\n })\n }\n return context.signal\n },\n })\n }\n\n // Get query function\n const queryFn =\n context.options.queryFn ||\n (() => Promise.reject(new Error('Missing queryFn')))\n\n // Create function to fetch a page\n const fetchPage = async (\n data: InfiniteData<unknown>,\n param: unknown,\n previous?: boolean,\n ): Promise<InfiniteData<unknown>> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (typeof param === 'undefined' && data.pages.length) {\n return Promise.resolve(data)\n }\n\n const queryFnContext: Omit<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? 'backward' : 'forward',\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const page = await queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const { maxPages } = context.options\n const addTo = previous ? addToStart : addToEnd\n\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages),\n }\n }\n\n let result: InfiniteData<unknown>\n\n // Fetch first page?\n if (!oldPages.length) {\n result = await fetchPage(empty, options.defaultPageParam)\n }\n\n // fetch next / previous page?\n else if (direction) {\n const previous = direction === 'backward'\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams,\n }\n const param = pageParamFn(options, oldData)\n\n result = await fetchPage(oldData, param, previous)\n }\n\n // Refetch pages\n else {\n // Fetch first page\n result = await fetchPage(empty, oldPageParams[0])\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n const param = getNextPageParam(options, result)\n result = await fetchPage(result, param)\n }\n }\n\n return result\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n const lastIndex = pages.length - 1\n return options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams,\n )\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n return options.getPreviousPageParam?.(\n pages[0],\n pages,\n pageParams[0],\n pageParams,\n )\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data) return false\n return typeof getNextPageParam(options, data) !== 'undefined'\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data || !options.getPreviousPageParam) return false\n return typeof getPreviousPageParam(options, data) !== 'undefined'\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","options","direction","fetchOptions","meta","fetchMore","oldPages","state","data","pages","oldPageParams","pageParams","empty","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","Promise","reject","Error","fetchPage","param","previous","length","resolve","queryFnContext","queryKey","pageParam","page","maxPages","addTo","addToStart","addToEnd","result","defaultPageParam","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","i","lastIndex","hasNextPage","hasPreviousPage"],"mappings":"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"}
|
|
@@ -5,12 +5,16 @@ var utils = require('./utils.js');
|
|
|
5
5
|
function infiniteQueryBehavior() {
|
|
6
6
|
return {
|
|
7
7
|
onFetch: context => {
|
|
8
|
-
context.fetchFn = () => {
|
|
8
|
+
context.fetchFn = async () => {
|
|
9
|
+
var _context$fetchOptions, _context$fetchOptions2, _context$fetchOptions3, _context$state$data, _context$state$data2;
|
|
9
10
|
const options = context.options;
|
|
10
|
-
const direction = context.fetchOptions
|
|
11
|
-
const oldPages = context.state.data
|
|
12
|
-
const oldPageParams = context.state.data
|
|
13
|
-
|
|
11
|
+
const direction = (_context$fetchOptions = context.fetchOptions) == null ? void 0 : (_context$fetchOptions2 = _context$fetchOptions.meta) == null ? void 0 : (_context$fetchOptions3 = _context$fetchOptions2.fetchMore) == null ? void 0 : _context$fetchOptions3.direction;
|
|
12
|
+
const oldPages = ((_context$state$data = context.state.data) == null ? void 0 : _context$state$data.pages) || [];
|
|
13
|
+
const oldPageParams = ((_context$state$data2 = context.state.data) == null ? void 0 : _context$state$data2.pageParams) || [];
|
|
14
|
+
const empty = {
|
|
15
|
+
pages: [],
|
|
16
|
+
pageParams: []
|
|
17
|
+
};
|
|
14
18
|
let cancelled = false;
|
|
15
19
|
const addSignalProperty = object => {
|
|
16
20
|
Object.defineProperty(object, 'signal', {
|
|
@@ -30,95 +34,95 @@ function infiniteQueryBehavior() {
|
|
|
30
34
|
|
|
31
35
|
// Get query function
|
|
32
36
|
const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
|
|
33
|
-
const buildNewPages = (pages, param, page, previous) => {
|
|
34
|
-
const {
|
|
35
|
-
maxPages
|
|
36
|
-
} = context.options;
|
|
37
|
-
if (previous) {
|
|
38
|
-
newPageParams = utils.addToStart(newPageParams, param, maxPages);
|
|
39
|
-
return utils.addToStart(pages, page, maxPages);
|
|
40
|
-
}
|
|
41
|
-
newPageParams = utils.addToEnd(newPageParams, param, maxPages);
|
|
42
|
-
return utils.addToEnd(pages, page, maxPages);
|
|
43
|
-
};
|
|
44
37
|
|
|
45
38
|
// Create function to fetch a page
|
|
46
|
-
const fetchPage = (
|
|
39
|
+
const fetchPage = async (data, param, previous) => {
|
|
47
40
|
if (cancelled) {
|
|
48
41
|
return Promise.reject();
|
|
49
42
|
}
|
|
50
|
-
if (typeof param === 'undefined' && pages.length) {
|
|
51
|
-
return Promise.resolve(
|
|
43
|
+
if (typeof param === 'undefined' && data.pages.length) {
|
|
44
|
+
return Promise.resolve(data);
|
|
52
45
|
}
|
|
53
46
|
const queryFnContext = {
|
|
54
47
|
queryKey: context.queryKey,
|
|
55
48
|
pageParam: param,
|
|
49
|
+
direction: previous ? 'backward' : 'forward',
|
|
56
50
|
meta: context.options.meta
|
|
57
51
|
};
|
|
58
52
|
addSignalProperty(queryFnContext);
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
53
|
+
const page = await queryFn(queryFnContext);
|
|
54
|
+
const {
|
|
55
|
+
maxPages
|
|
56
|
+
} = context.options;
|
|
57
|
+
const addTo = previous ? utils.addToStart : utils.addToEnd;
|
|
58
|
+
return {
|
|
59
|
+
pages: addTo(data.pages, page, maxPages),
|
|
60
|
+
pageParams: addTo(data.pageParams, param, maxPages)
|
|
61
|
+
};
|
|
62
62
|
};
|
|
63
|
-
let
|
|
63
|
+
let result;
|
|
64
64
|
|
|
65
65
|
// Fetch first page?
|
|
66
66
|
if (!oldPages.length) {
|
|
67
|
-
|
|
67
|
+
result = await fetchPage(empty, options.defaultPageParam);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// fetch next / previous page?
|
|
71
71
|
else if (direction) {
|
|
72
72
|
const previous = direction === 'backward';
|
|
73
|
-
const
|
|
74
|
-
|
|
73
|
+
const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
|
|
74
|
+
const oldData = {
|
|
75
|
+
pages: oldPages,
|
|
76
|
+
pageParams: oldPageParams
|
|
77
|
+
};
|
|
78
|
+
const param = pageParamFn(options, oldData);
|
|
79
|
+
result = await fetchPage(oldData, param, previous);
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
// Refetch pages
|
|
78
83
|
else {
|
|
79
|
-
newPageParams = [];
|
|
80
|
-
|
|
81
84
|
// Fetch first page
|
|
82
|
-
|
|
85
|
+
result = await fetchPage(empty, oldPageParams[0]);
|
|
83
86
|
|
|
84
87
|
// Fetch remaining pages
|
|
85
88
|
for (let i = 1; i < oldPages.length; i++) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return fetchPage(pages, param);
|
|
89
|
-
});
|
|
89
|
+
const param = getNextPageParam(options, result);
|
|
90
|
+
result = await fetchPage(result, param);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
|
|
93
|
-
pages,
|
|
94
|
-
pageParams: newPageParams
|
|
95
|
-
}));
|
|
96
|
-
return finalPromise;
|
|
93
|
+
return result;
|
|
97
94
|
};
|
|
98
95
|
}
|
|
99
96
|
};
|
|
100
97
|
}
|
|
101
|
-
function getNextPageParam(options,
|
|
102
|
-
|
|
98
|
+
function getNextPageParam(options, {
|
|
99
|
+
pages,
|
|
100
|
+
pageParams
|
|
101
|
+
}) {
|
|
102
|
+
const lastIndex = pages.length - 1;
|
|
103
|
+
return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);
|
|
103
104
|
}
|
|
104
|
-
function getPreviousPageParam(options,
|
|
105
|
-
|
|
105
|
+
function getPreviousPageParam(options, {
|
|
106
|
+
pages,
|
|
107
|
+
pageParams
|
|
108
|
+
}) {
|
|
109
|
+
return options.getPreviousPageParam == null ? void 0 : options.getPreviousPageParam(pages[0], pages, pageParams[0], pageParams);
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
/**
|
|
109
113
|
* Checks if there is a next page.
|
|
110
114
|
*/
|
|
111
|
-
function hasNextPage(options,
|
|
112
|
-
if (!
|
|
113
|
-
return typeof getNextPageParam(options,
|
|
115
|
+
function hasNextPage(options, data) {
|
|
116
|
+
if (!data) return false;
|
|
117
|
+
return typeof getNextPageParam(options, data) !== 'undefined';
|
|
114
118
|
}
|
|
115
119
|
|
|
116
120
|
/**
|
|
117
121
|
* Checks if there is a previous page.
|
|
118
122
|
*/
|
|
119
|
-
function hasPreviousPage(options,
|
|
120
|
-
if (!
|
|
121
|
-
return typeof getPreviousPageParam(options,
|
|
123
|
+
function hasPreviousPage(options, data) {
|
|
124
|
+
if (!data || !options.getPreviousPageParam) return false;
|
|
125
|
+
return typeof getPreviousPageParam(options, data) !== 'undefined';
|
|
122
126
|
}
|
|
123
127
|
|
|
124
128
|
exports.hasNextPage = hasNextPage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryBehavior.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\nimport { addToEnd, addToStart } from './utils'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n>(): QueryBehavior<TQueryFnData, TError, InfiniteData<TData>> {\n return {\n onFetch: (context) => {\n context.fetchFn = () => {\n const options = context.options as InfiniteQueryPageParamsOptions<TData>\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n
|
|
1
|
+
{"version":3,"file":"infiniteQueryBehavior.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\nimport { addToEnd, addToStart } from './utils'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n>(): QueryBehavior<TQueryFnData, TError, InfiniteData<TData>> {\n return {\n onFetch: (context) => {\n context.fetchFn = async () => {\n const options = context.options as InfiniteQueryPageParamsOptions<TData>\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n const empty = { pages: [], pageParams: [] }\n let cancelled = false\n\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true\n } else {\n context.signal.addEventListener('abort', () => {\n cancelled = true\n })\n }\n return context.signal\n },\n })\n }\n\n // Get query function\n const queryFn =\n context.options.queryFn ||\n (() => Promise.reject(new Error('Missing queryFn')))\n\n // Create function to fetch a page\n const fetchPage = async (\n data: InfiniteData<unknown>,\n param: unknown,\n previous?: boolean,\n ): Promise<InfiniteData<unknown>> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (typeof param === 'undefined' && data.pages.length) {\n return Promise.resolve(data)\n }\n\n const queryFnContext: Omit<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? 'backward' : 'forward',\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const page = await queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const { maxPages } = context.options\n const addTo = previous ? addToStart : addToEnd\n\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages),\n }\n }\n\n let result: InfiniteData<unknown>\n\n // Fetch first page?\n if (!oldPages.length) {\n result = await fetchPage(empty, options.defaultPageParam)\n }\n\n // fetch next / previous page?\n else if (direction) {\n const previous = direction === 'backward'\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams,\n }\n const param = pageParamFn(options, oldData)\n\n result = await fetchPage(oldData, param, previous)\n }\n\n // Refetch pages\n else {\n // Fetch first page\n result = await fetchPage(empty, oldPageParams[0])\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n const param = getNextPageParam(options, result)\n result = await fetchPage(result, param)\n }\n }\n\n return result\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n const lastIndex = pages.length - 1\n return options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams,\n )\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n return options.getPreviousPageParam?.(\n pages[0],\n pages,\n pageParams[0],\n pageParams,\n )\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data) return false\n return typeof getNextPageParam(options, data) !== 'undefined'\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data || !options.getPreviousPageParam) return false\n return typeof getPreviousPageParam(options, data) !== 'undefined'\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","options","direction","fetchOptions","meta","fetchMore","oldPages","state","data","pages","oldPageParams","pageParams","empty","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","Promise","reject","Error","fetchPage","param","previous","length","resolve","queryFnContext","queryKey","pageParam","page","maxPages","addTo","addToStart","addToEnd","result","defaultPageParam","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","i","lastIndex","hasNextPage","hasPreviousPage"],"mappings":"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"}
|
|
@@ -3,12 +3,15 @@ import { addToStart, addToEnd } from './utils.mjs';
|
|
|
3
3
|
function infiniteQueryBehavior() {
|
|
4
4
|
return {
|
|
5
5
|
onFetch: context => {
|
|
6
|
-
context.fetchFn = () => {
|
|
6
|
+
context.fetchFn = async () => {
|
|
7
7
|
const options = context.options;
|
|
8
8
|
const direction = context.fetchOptions?.meta?.fetchMore?.direction;
|
|
9
9
|
const oldPages = context.state.data?.pages || [];
|
|
10
10
|
const oldPageParams = context.state.data?.pageParams || [];
|
|
11
|
-
|
|
11
|
+
const empty = {
|
|
12
|
+
pages: [],
|
|
13
|
+
pageParams: []
|
|
14
|
+
};
|
|
12
15
|
let cancelled = false;
|
|
13
16
|
const addSignalProperty = object => {
|
|
14
17
|
Object.defineProperty(object, 'signal', {
|
|
@@ -28,95 +31,95 @@ function infiniteQueryBehavior() {
|
|
|
28
31
|
|
|
29
32
|
// Get query function
|
|
30
33
|
const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
|
|
31
|
-
const buildNewPages = (pages, param, page, previous) => {
|
|
32
|
-
const {
|
|
33
|
-
maxPages
|
|
34
|
-
} = context.options;
|
|
35
|
-
if (previous) {
|
|
36
|
-
newPageParams = addToStart(newPageParams, param, maxPages);
|
|
37
|
-
return addToStart(pages, page, maxPages);
|
|
38
|
-
}
|
|
39
|
-
newPageParams = addToEnd(newPageParams, param, maxPages);
|
|
40
|
-
return addToEnd(pages, page, maxPages);
|
|
41
|
-
};
|
|
42
34
|
|
|
43
35
|
// Create function to fetch a page
|
|
44
|
-
const fetchPage = (
|
|
36
|
+
const fetchPage = async (data, param, previous) => {
|
|
45
37
|
if (cancelled) {
|
|
46
38
|
return Promise.reject();
|
|
47
39
|
}
|
|
48
|
-
if (typeof param === 'undefined' && pages.length) {
|
|
49
|
-
return Promise.resolve(
|
|
40
|
+
if (typeof param === 'undefined' && data.pages.length) {
|
|
41
|
+
return Promise.resolve(data);
|
|
50
42
|
}
|
|
51
43
|
const queryFnContext = {
|
|
52
44
|
queryKey: context.queryKey,
|
|
53
45
|
pageParam: param,
|
|
46
|
+
direction: previous ? 'backward' : 'forward',
|
|
54
47
|
meta: context.options.meta
|
|
55
48
|
};
|
|
56
49
|
addSignalProperty(queryFnContext);
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
50
|
+
const page = await queryFn(queryFnContext);
|
|
51
|
+
const {
|
|
52
|
+
maxPages
|
|
53
|
+
} = context.options;
|
|
54
|
+
const addTo = previous ? addToStart : addToEnd;
|
|
55
|
+
return {
|
|
56
|
+
pages: addTo(data.pages, page, maxPages),
|
|
57
|
+
pageParams: addTo(data.pageParams, param, maxPages)
|
|
58
|
+
};
|
|
60
59
|
};
|
|
61
|
-
let
|
|
60
|
+
let result;
|
|
62
61
|
|
|
63
62
|
// Fetch first page?
|
|
64
63
|
if (!oldPages.length) {
|
|
65
|
-
|
|
64
|
+
result = await fetchPage(empty, options.defaultPageParam);
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
// fetch next / previous page?
|
|
69
68
|
else if (direction) {
|
|
70
69
|
const previous = direction === 'backward';
|
|
71
|
-
const
|
|
72
|
-
|
|
70
|
+
const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
|
|
71
|
+
const oldData = {
|
|
72
|
+
pages: oldPages,
|
|
73
|
+
pageParams: oldPageParams
|
|
74
|
+
};
|
|
75
|
+
const param = pageParamFn(options, oldData);
|
|
76
|
+
result = await fetchPage(oldData, param, previous);
|
|
73
77
|
}
|
|
74
78
|
|
|
75
79
|
// Refetch pages
|
|
76
80
|
else {
|
|
77
|
-
newPageParams = [];
|
|
78
|
-
|
|
79
81
|
// Fetch first page
|
|
80
|
-
|
|
82
|
+
result = await fetchPage(empty, oldPageParams[0]);
|
|
81
83
|
|
|
82
84
|
// Fetch remaining pages
|
|
83
85
|
for (let i = 1; i < oldPages.length; i++) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return fetchPage(pages, param);
|
|
87
|
-
});
|
|
86
|
+
const param = getNextPageParam(options, result);
|
|
87
|
+
result = await fetchPage(result, param);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
|
|
91
|
-
pages,
|
|
92
|
-
pageParams: newPageParams
|
|
93
|
-
}));
|
|
94
|
-
return finalPromise;
|
|
90
|
+
return result;
|
|
95
91
|
};
|
|
96
92
|
}
|
|
97
93
|
};
|
|
98
94
|
}
|
|
99
|
-
function getNextPageParam(options,
|
|
100
|
-
|
|
95
|
+
function getNextPageParam(options, {
|
|
96
|
+
pages,
|
|
97
|
+
pageParams
|
|
98
|
+
}) {
|
|
99
|
+
const lastIndex = pages.length - 1;
|
|
100
|
+
return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);
|
|
101
101
|
}
|
|
102
|
-
function getPreviousPageParam(options,
|
|
103
|
-
|
|
102
|
+
function getPreviousPageParam(options, {
|
|
103
|
+
pages,
|
|
104
|
+
pageParams
|
|
105
|
+
}) {
|
|
106
|
+
return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams);
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
/**
|
|
107
110
|
* Checks if there is a next page.
|
|
108
111
|
*/
|
|
109
|
-
function hasNextPage(options,
|
|
110
|
-
if (!
|
|
111
|
-
return typeof getNextPageParam(options,
|
|
112
|
+
function hasNextPage(options, data) {
|
|
113
|
+
if (!data) return false;
|
|
114
|
+
return typeof getNextPageParam(options, data) !== 'undefined';
|
|
112
115
|
}
|
|
113
116
|
|
|
114
117
|
/**
|
|
115
118
|
* Checks if there is a previous page.
|
|
116
119
|
*/
|
|
117
|
-
function hasPreviousPage(options,
|
|
118
|
-
if (!
|
|
119
|
-
return typeof getPreviousPageParam(options,
|
|
120
|
+
function hasPreviousPage(options, data) {
|
|
121
|
+
if (!data || !options.getPreviousPageParam) return false;
|
|
122
|
+
return typeof getPreviousPageParam(options, data) !== 'undefined';
|
|
120
123
|
}
|
|
121
124
|
|
|
122
125
|
export { hasNextPage, hasPreviousPage, infiniteQueryBehavior };
|