@tanstack/query-core 4.24.10 → 5.0.0-alpha.0
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/focusManager.d.ts +1 -3
- package/build/lib/focusManager.esm.js +19 -36
- package/build/lib/focusManager.esm.js.map +1 -1
- package/build/lib/focusManager.js +19 -38
- package/build/lib/focusManager.js.map +1 -1
- package/build/lib/focusManager.mjs +19 -36
- package/build/lib/focusManager.mjs.map +1 -1
- package/build/lib/hydration.esm.js +21 -23
- package/build/lib/hydration.esm.js.map +1 -1
- package/build/lib/hydration.js +21 -25
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/hydration.mjs +21 -23
- package/build/lib/hydration.mjs.map +1 -1
- package/build/lib/index.d.ts +1 -2
- package/build/lib/index.esm.js +1 -1
- package/build/lib/index.js +2 -8
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -1
- package/build/lib/infiniteQueryBehavior.d.ts +3 -7
- package/build/lib/infiniteQueryBehavior.esm.js +52 -75
- package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.js +50 -77
- package/build/lib/infiniteQueryBehavior.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.mjs +52 -75
- package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
- package/build/lib/infiniteQueryObserver.d.ts +4 -4
- package/build/lib/infiniteQueryObserver.esm.js +18 -26
- package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
- package/build/lib/infiniteQueryObserver.js +18 -28
- package/build/lib/infiniteQueryObserver.js.map +1 -1
- package/build/lib/infiniteQueryObserver.mjs +18 -26
- package/build/lib/infiniteQueryObserver.mjs.map +1 -1
- package/build/lib/mutation.d.ts +11 -22
- package/build/lib/mutation.esm.js +73 -105
- package/build/lib/mutation.esm.js.map +1 -1
- package/build/lib/mutation.js +73 -107
- package/build/lib/mutation.js.map +1 -1
- package/build/lib/mutation.mjs +73 -105
- package/build/lib/mutation.mjs.map +1 -1
- package/build/lib/mutationCache.d.ts +4 -6
- package/build/lib/mutationCache.esm.js +23 -32
- package/build/lib/mutationCache.esm.js.map +1 -1
- package/build/lib/mutationCache.js +23 -34
- package/build/lib/mutationCache.js.map +1 -1
- package/build/lib/mutationCache.mjs +23 -32
- package/build/lib/mutationCache.mjs.map +1 -1
- package/build/lib/mutationObserver.d.ts +4 -9
- package/build/lib/mutationObserver.esm.js +43 -72
- package/build/lib/mutationObserver.esm.js.map +1 -1
- package/build/lib/mutationObserver.js +43 -74
- package/build/lib/mutationObserver.js.map +1 -1
- package/build/lib/mutationObserver.mjs +43 -72
- package/build/lib/mutationObserver.mjs.map +1 -1
- package/build/lib/notifyManager.esm.js +7 -17
- package/build/lib/notifyManager.esm.js.map +1 -1
- package/build/lib/notifyManager.js +7 -19
- package/build/lib/notifyManager.js.map +1 -1
- package/build/lib/notifyManager.mjs +7 -17
- package/build/lib/notifyManager.mjs.map +1 -1
- package/build/lib/onlineManager.d.ts +1 -3
- package/build/lib/onlineManager.esm.js +16 -30
- package/build/lib/onlineManager.esm.js.map +1 -1
- package/build/lib/onlineManager.js +16 -32
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/onlineManager.mjs +16 -30
- package/build/lib/onlineManager.mjs.map +1 -1
- package/build/lib/queriesObserver.d.ts +3 -10
- package/build/lib/queriesObserver.esm.js +47 -71
- package/build/lib/queriesObserver.esm.js.map +1 -1
- package/build/lib/queriesObserver.js +49 -75
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/queriesObserver.mjs +47 -71
- package/build/lib/queriesObserver.mjs.map +1 -1
- package/build/lib/query.d.ts +14 -21
- package/build/lib/query.esm.js +140 -194
- package/build/lib/query.esm.js.map +1 -1
- package/build/lib/query.js +139 -195
- package/build/lib/query.js.map +1 -1
- package/build/lib/query.mjs +140 -194
- package/build/lib/query.mjs.map +1 -1
- package/build/lib/queryCache.d.ts +12 -7
- package/build/lib/queryCache.esm.js +21 -45
- package/build/lib/queryCache.esm.js.map +1 -1
- package/build/lib/queryCache.js +20 -46
- package/build/lib/queryCache.js.map +1 -1
- package/build/lib/queryCache.mjs +21 -45
- package/build/lib/queryCache.mjs.map +1 -1
- package/build/lib/queryClient.d.ts +18 -46
- package/build/lib/queryClient.esm.js +137 -216
- package/build/lib/queryClient.esm.js.map +1 -1
- package/build/lib/queryClient.js +136 -217
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryClient.mjs +137 -216
- package/build/lib/queryClient.mjs.map +1 -1
- package/build/lib/queryObserver.d.ts +4 -29
- package/build/lib/queryObserver.esm.js +176 -258
- package/build/lib/queryObserver.esm.js.map +1 -1
- package/build/lib/queryObserver.js +176 -260
- package/build/lib/queryObserver.js.map +1 -1
- package/build/lib/queryObserver.mjs +176 -258
- package/build/lib/queryObserver.mjs.map +1 -1
- package/build/lib/removable.d.ts +3 -3
- package/build/lib/removable.esm.js +10 -14
- package/build/lib/removable.esm.js.map +1 -1
- package/build/lib/removable.js +10 -16
- package/build/lib/removable.js.map +1 -1
- package/build/lib/removable.mjs +10 -14
- package/build/lib/removable.mjs.map +1 -1
- package/build/lib/retryer.d.ts +5 -5
- package/build/lib/retryer.esm.js +27 -44
- package/build/lib/retryer.esm.js.map +1 -1
- package/build/lib/retryer.js +27 -46
- package/build/lib/retryer.js.map +1 -1
- package/build/lib/retryer.mjs +27 -44
- package/build/lib/retryer.mjs.map +1 -1
- package/build/lib/subscribable.esm.js +4 -7
- package/build/lib/subscribable.esm.js.map +1 -1
- package/build/lib/subscribable.js +4 -9
- package/build/lib/subscribable.js.map +1 -1
- package/build/lib/subscribable.mjs +4 -7
- package/build/lib/subscribable.mjs.map +1 -1
- package/build/lib/tests/utils.d.ts +3 -12
- package/build/lib/types.d.ts +111 -99
- package/build/lib/utils.d.ts +8 -18
- package/build/lib/utils.esm.js +39 -132
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +42 -144
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.mjs +39 -132
- package/build/lib/utils.mjs.map +1 -1
- package/build/umd/index.development.js +868 -1398
- 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 +1 -1
- package/src/focusManager.ts +17 -24
- package/src/index.ts +1 -11
- package/src/infiniteQueryBehavior.ts +54 -94
- package/src/infiniteQueryObserver.ts +10 -12
- package/src/mutation.ts +68 -92
- package/src/mutationCache.ts +27 -27
- package/src/mutationObserver.ts +60 -97
- package/src/onlineManager.ts +14 -14
- package/src/queriesObserver.ts +50 -54
- package/src/query.ts +106 -110
- package/src/queryCache.ts +42 -41
- package/src/queryClient.ts +155 -434
- package/src/queryObserver.ts +155 -192
- package/src/removable.ts +13 -13
- package/src/retryer.ts +5 -5
- package/src/tests/focusManager.test.tsx +25 -25
- package/src/tests/hydration.test.tsx +167 -81
- package/src/tests/infiniteQueryBehavior.test.tsx +209 -17
- package/src/tests/infiniteQueryObserver.test.tsx +6 -2
- package/src/tests/mutationCache.test.tsx +127 -127
- package/src/tests/mutationObserver.test.tsx +1 -31
- package/src/tests/mutations.test.tsx +62 -43
- package/src/tests/onlineManager.test.tsx +12 -4
- package/src/tests/queriesObserver.test.tsx +41 -77
- package/src/tests/query.test.tsx +175 -243
- package/src/tests/queryCache.test.tsx +170 -93
- package/src/tests/queryClient.test.tsx +229 -378
- package/src/tests/queryObserver.test.tsx +23 -147
- package/src/tests/utils.test.tsx +84 -29
- package/src/tests/utils.ts +9 -18
- package/src/types.ts +187 -140
- package/src/utils.ts +31 -124
- package/build/lib/logger.d.ts +0 -8
- package/build/lib/logger.esm.js +0 -4
- package/build/lib/logger.esm.js.map +0 -1
- package/build/lib/logger.js +0 -8
- package/build/lib/logger.js.map +0 -1
- package/build/lib/logger.mjs +0 -4
- package/build/lib/logger.mjs.map +0 -1
- package/build/lib/logger.native.d.ts +0 -6
- package/build/lib/logger.native.esm.js +0 -12
- package/build/lib/logger.native.esm.js.map +0 -1
- package/build/lib/logger.native.js +0 -16
- package/build/lib/logger.native.js.map +0 -1
- package/build/lib/logger.native.mjs +0 -12
- package/build/lib/logger.native.mjs.map +0 -1
- package/src/logger.native.ts +0 -11
- package/src/logger.ts +0 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryBehavior.esm.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\n\nimport type {\n InfiniteData,\n QueryFunctionContext,\n QueryOptions,\n RefetchQueryFilters,\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 refetchPage: RefetchQueryFilters['refetchPage'] | undefined =\n context.fetchOptions?.meta?.refetchPage\n const fetchMore = context.fetchOptions?.meta?.fetchMore\n const pageParam = fetchMore?.pageParam\n const isFetchingNextPage = fetchMore?.direction === 'forward'\n const isFetchingPreviousPage = fetchMore?.direction === 'backward'\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n let newPageParams = oldPageParams\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 || (() => Promise.reject('Missing queryFn'))\n\n const buildNewPages = (\n pages: unknown[],\n param: unknown,\n page: unknown,\n previous?: boolean,\n ) => {\n newPageParams = previous\n ? [param, ...newPageParams]\n : [...newPageParams, param]\n return previous ? [page, ...pages] : [...pages, page]\n }\n\n // Create function to fetch a page\n const fetchPage = (\n pages: unknown[],\n manual?: boolean,\n param?: unknown,\n previous?: boolean,\n ): Promise<unknown[]> => {\n if (cancelled) {\n return Promise.reject('Cancelled')\n }\n\n if (typeof param === 'undefined' && !manual && pages.length) {\n return Promise.resolve(pages)\n }\n\n const queryFnContext: QueryFunctionContext = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const queryFnResult = queryFn(queryFnContext)\n\n const promise = Promise.resolve(queryFnResult).then((page) =>\n buildNewPages(pages, param, page, previous),\n )\n\n return promise\n }\n\n let promise: Promise<unknown[]>\n\n // Fetch first page?\n if (!oldPages.length) {\n promise = fetchPage([])\n }\n\n // Fetch next page?\n else if (isFetchingNextPage) {\n const manual = typeof pageParam !== 'undefined'\n const param = manual\n ? pageParam\n : getNextPageParam(context.options, oldPages)\n promise = fetchPage(oldPages, manual, param)\n }\n\n // Fetch previous page?\n else if (isFetchingPreviousPage) {\n const manual = typeof pageParam !== 'undefined'\n const param = manual\n ? pageParam\n : getPreviousPageParam(context.options, oldPages)\n promise = fetchPage(oldPages, manual, param, true)\n }\n\n // Refetch pages\n else {\n newPageParams = []\n\n const manual = typeof context.options.getNextPageParam === 'undefined'\n\n const shouldFetchFirstPage =\n refetchPage && oldPages[0]\n ? refetchPage(oldPages[0], 0, oldPages)\n : true\n\n // Fetch first page\n promise = shouldFetchFirstPage\n ? fetchPage([], manual, oldPageParams[0])\n : Promise.resolve(buildNewPages([], oldPageParams[0], oldPages[0]))\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then((pages) => {\n const shouldFetchNextPage =\n refetchPage && oldPages[i]\n ? refetchPage(oldPages[i], i, oldPages)\n : true\n\n if (shouldFetchNextPage) {\n const param = manual\n ? oldPageParams[i]\n : getNextPageParam(context.options, pages)\n return fetchPage(pages, manual, param)\n }\n return Promise.resolve(\n buildNewPages(pages, oldPageParams[i], oldPages[i]),\n )\n })\n }\n }\n\n const finalPromise = promise.then((pages) => ({\n pages,\n pageParams: newPageParams,\n }))\n\n return finalPromise\n }\n },\n }\n}\n\nexport function getNextPageParam(\n options: QueryOptions<any, any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getNextPageParam?.(pages[pages.length - 1], pages)\n}\n\nexport function getPreviousPageParam(\n options: QueryOptions<any, any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasNextPage(\n options: QueryOptions<any, any, any, any>,\n pages?: unknown,\n): boolean | undefined {\n if (options.getNextPageParam && Array.isArray(pages)) {\n const nextPageParam = getNextPageParam(options, pages)\n return (\n typeof nextPageParam !== 'undefined' &&\n nextPageParam !== null &&\n nextPageParam !== false\n )\n }\n return\n}\n\n/**\n * Checks if there is a previous page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasPreviousPage(\n options: QueryOptions<any, any, any, any>,\n pages?: unknown,\n): boolean | undefined {\n if (options.getPreviousPageParam && Array.isArray(pages)) {\n const previousPageParam = getPreviousPageParam(options, pages)\n return (\n typeof previousPageParam !== 'undefined' &&\n previousPageParam !== null &&\n previousPageParam !== false\n )\n }\n return\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","refetchPage","fetchOptions","meta","fetchMore","pageParam","isFetchingNextPage","direction","isFetchingPreviousPage","oldPages","state","data","pages","oldPageParams","pageParams","newPageParams","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","options","Promise","reject","buildNewPages","param","page","previous","fetchPage","manual","length","resolve","queryFnContext","queryKey","queryFnResult","promise","then","getNextPageParam","getPreviousPageParam","shouldFetchFirstPage","i","shouldFetchNextPage","finalPromise","hasNextPage","Array","isArray","nextPageParam","hasPreviousPage","previousPageParam"],"mappings":"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"}
|
|
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 let newPageParams = oldPageParams\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 const buildNewPages = (\n pages: unknown[],\n param: unknown,\n page: unknown,\n previous?: boolean,\n ) => {\n const { maxPages } = context.options\n\n if (previous) {\n newPageParams = addToStart(newPageParams, param, maxPages)\n return addToStart(pages, page, maxPages)\n }\n\n newPageParams = addToEnd(newPageParams, param, maxPages)\n return addToEnd(pages, page, maxPages)\n }\n\n // Create function to fetch a page\n const fetchPage = (\n pages: unknown[],\n param: unknown,\n previous?: boolean,\n ): Promise<unknown[]> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (typeof param === 'undefined' && pages.length) {\n return Promise.resolve(pages)\n }\n\n const queryFnContext: Omit<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const queryFnResult = queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const promise = Promise.resolve(queryFnResult).then((page) =>\n buildNewPages(pages, param, page, previous),\n )\n\n return promise\n }\n\n let promise: Promise<unknown[]>\n\n // Fetch first page?\n if (!oldPages.length) {\n promise = fetchPage([], options.defaultPageParam)\n }\n\n // fetch next / previous page?\n else if (direction) {\n const previous = direction === 'backward'\n const param = previous\n ? getPreviousPageParam(options, oldPages)\n : getNextPageParam(options, oldPages)\n promise = fetchPage(oldPages, param, previous)\n }\n\n // Refetch pages\n else {\n newPageParams = []\n\n // Fetch first page\n promise = fetchPage([], oldPageParams[0])\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then((pages) => {\n const param = getNextPageParam(options, pages)\n return fetchPage(pages, param)\n })\n }\n }\n\n const finalPromise = promise.then((pages) => ({\n pages,\n pageParams: newPageParams,\n }))\n\n return finalPromise\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getNextPageParam(pages[pages.length - 1], pages)\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any>,\n pages?: unknown[],\n): boolean {\n if (!pages) return false\n return typeof getNextPageParam(options, pages) !== 'undefined'\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any>,\n pages?: unknown[],\n): boolean {\n if (!pages || !options.getPreviousPageParam) return false\n return typeof getPreviousPageParam(options, pages) !== 'undefined'\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","options","direction","fetchOptions","meta","fetchMore","oldPages","state","data","pages","oldPageParams","pageParams","newPageParams","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","Promise","reject","Error","buildNewPages","param","page","previous","maxPages","addToStart","addToEnd","fetchPage","length","resolve","queryFnContext","queryKey","pageParam","queryFnResult","promise","then","defaultPageParam","getPreviousPageParam","getNextPageParam","i","finalPromise","hasNextPage","hasPreviousPage"],"mappings":"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"}
|
|
@@ -1,62 +1,55 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require('./utils.js');
|
|
4
4
|
|
|
5
5
|
function infiniteQueryBehavior() {
|
|
6
6
|
return {
|
|
7
7
|
onFetch: context => {
|
|
8
8
|
context.fetchFn = () => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const pageParam = fetchMore == null ? void 0 : fetchMore.pageParam;
|
|
14
|
-
const isFetchingNextPage = (fetchMore == null ? void 0 : fetchMore.direction) === 'forward';
|
|
15
|
-
const isFetchingPreviousPage = (fetchMore == null ? void 0 : fetchMore.direction) === 'backward';
|
|
16
|
-
const oldPages = ((_context$state$data = context.state.data) == null ? void 0 : _context$state$data.pages) || [];
|
|
17
|
-
const oldPageParams = ((_context$state$data2 = context.state.data) == null ? void 0 : _context$state$data2.pageParams) || [];
|
|
9
|
+
const options = context.options;
|
|
10
|
+
const direction = context.fetchOptions?.meta?.fetchMore?.direction;
|
|
11
|
+
const oldPages = context.state.data?.pages || [];
|
|
12
|
+
const oldPageParams = context.state.data?.pageParams || [];
|
|
18
13
|
let newPageParams = oldPageParams;
|
|
19
14
|
let cancelled = false;
|
|
20
|
-
|
|
21
15
|
const addSignalProperty = object => {
|
|
22
16
|
Object.defineProperty(object, 'signal', {
|
|
23
17
|
enumerable: true,
|
|
24
18
|
get: () => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if ((_context$signal = context.signal) != null && _context$signal.aborted) {
|
|
19
|
+
if (context.signal.aborted) {
|
|
28
20
|
cancelled = true;
|
|
29
21
|
} else {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
(_context$signal2 = context.signal) == null ? void 0 : _context$signal2.addEventListener('abort', () => {
|
|
22
|
+
context.signal.addEventListener('abort', () => {
|
|
33
23
|
cancelled = true;
|
|
34
24
|
});
|
|
35
25
|
}
|
|
36
|
-
|
|
37
26
|
return context.signal;
|
|
38
27
|
}
|
|
39
28
|
});
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const queryFn = context.options.queryFn || (() => Promise.reject('Missing queryFn'));
|
|
29
|
+
};
|
|
44
30
|
|
|
31
|
+
// Get query function
|
|
32
|
+
const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
|
|
45
33
|
const buildNewPages = (pages, param, page, previous) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
+
};
|
|
50
44
|
|
|
51
|
-
|
|
45
|
+
// Create function to fetch a page
|
|
46
|
+
const fetchPage = (pages, param, previous) => {
|
|
52
47
|
if (cancelled) {
|
|
53
|
-
return Promise.reject(
|
|
48
|
+
return Promise.reject();
|
|
54
49
|
}
|
|
55
|
-
|
|
56
|
-
if (typeof param === 'undefined' && !manual && pages.length) {
|
|
50
|
+
if (typeof param === 'undefined' && pages.length) {
|
|
57
51
|
return Promise.resolve(pages);
|
|
58
52
|
}
|
|
59
|
-
|
|
60
53
|
const queryFnContext = {
|
|
61
54
|
queryKey: context.queryKey,
|
|
62
55
|
pageParam: param,
|
|
@@ -67,43 +60,35 @@ function infiniteQueryBehavior() {
|
|
|
67
60
|
const promise = Promise.resolve(queryFnResult).then(page => buildNewPages(pages, param, page, previous));
|
|
68
61
|
return promise;
|
|
69
62
|
};
|
|
63
|
+
let promise;
|
|
70
64
|
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
// Fetch first page?
|
|
73
66
|
if (!oldPages.length) {
|
|
74
|
-
promise = fetchPage([]);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
} // Refetch pages
|
|
67
|
+
promise = fetchPage([], options.defaultPageParam);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// fetch next / previous page?
|
|
71
|
+
else if (direction) {
|
|
72
|
+
const previous = direction === 'backward';
|
|
73
|
+
const param = previous ? getPreviousPageParam(options, oldPages) : getNextPageParam(options, oldPages);
|
|
74
|
+
promise = fetchPage(oldPages, param, previous);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Refetch pages
|
|
86
78
|
else {
|
|
87
79
|
newPageParams = [];
|
|
88
|
-
const manual = typeof context.options.getNextPageParam === 'undefined';
|
|
89
|
-
const shouldFetchFirstPage = refetchPage && oldPages[0] ? refetchPage(oldPages[0], 0, oldPages) : true; // Fetch first page
|
|
90
80
|
|
|
91
|
-
|
|
81
|
+
// Fetch first page
|
|
82
|
+
promise = fetchPage([], oldPageParams[0]);
|
|
92
83
|
|
|
84
|
+
// Fetch remaining pages
|
|
93
85
|
for (let i = 1; i < oldPages.length; i++) {
|
|
94
86
|
promise = promise.then(pages => {
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
if (shouldFetchNextPage) {
|
|
98
|
-
const param = manual ? oldPageParams[i] : getNextPageParam(context.options, pages);
|
|
99
|
-
return fetchPage(pages, manual, param);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return Promise.resolve(buildNewPages(pages, oldPageParams[i], oldPages[i]));
|
|
87
|
+
const param = getNextPageParam(options, pages);
|
|
88
|
+
return fetchPage(pages, param);
|
|
103
89
|
});
|
|
104
90
|
}
|
|
105
91
|
}
|
|
106
|
-
|
|
107
92
|
const finalPromise = promise.then(pages => ({
|
|
108
93
|
pages,
|
|
109
94
|
pageParams: newPageParams
|
|
@@ -114,40 +99,28 @@ function infiniteQueryBehavior() {
|
|
|
114
99
|
};
|
|
115
100
|
}
|
|
116
101
|
function getNextPageParam(options, pages) {
|
|
117
|
-
return options.getNextPageParam
|
|
102
|
+
return options.getNextPageParam(pages[pages.length - 1], pages);
|
|
118
103
|
}
|
|
119
104
|
function getPreviousPageParam(options, pages) {
|
|
120
|
-
return options.getPreviousPageParam
|
|
105
|
+
return options.getPreviousPageParam?.(pages[0], pages);
|
|
121
106
|
}
|
|
107
|
+
|
|
122
108
|
/**
|
|
123
109
|
* Checks if there is a next page.
|
|
124
|
-
* Returns `undefined` if it cannot be determined.
|
|
125
110
|
*/
|
|
126
|
-
|
|
127
111
|
function hasNextPage(options, pages) {
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
return typeof nextPageParam !== 'undefined' && nextPageParam !== null && nextPageParam !== false;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return;
|
|
112
|
+
if (!pages) return false;
|
|
113
|
+
return typeof getNextPageParam(options, pages) !== 'undefined';
|
|
134
114
|
}
|
|
115
|
+
|
|
135
116
|
/**
|
|
136
117
|
* Checks if there is a previous page.
|
|
137
|
-
* Returns `undefined` if it cannot be determined.
|
|
138
118
|
*/
|
|
139
|
-
|
|
140
119
|
function hasPreviousPage(options, pages) {
|
|
141
|
-
if (options.getPreviousPageParam
|
|
142
|
-
|
|
143
|
-
return typeof previousPageParam !== 'undefined' && previousPageParam !== null && previousPageParam !== false;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return;
|
|
120
|
+
if (!pages || !options.getPreviousPageParam) return false;
|
|
121
|
+
return typeof getPreviousPageParam(options, pages) !== 'undefined';
|
|
147
122
|
}
|
|
148
123
|
|
|
149
|
-
exports.getNextPageParam = getNextPageParam;
|
|
150
|
-
exports.getPreviousPageParam = getPreviousPageParam;
|
|
151
124
|
exports.hasNextPage = hasNextPage;
|
|
152
125
|
exports.hasPreviousPage = hasPreviousPage;
|
|
153
126
|
exports.infiniteQueryBehavior = infiniteQueryBehavior;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryBehavior.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\n\nimport type {\n InfiniteData,\n QueryFunctionContext,\n QueryOptions,\n RefetchQueryFilters,\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 refetchPage: RefetchQueryFilters['refetchPage'] | undefined =\n context.fetchOptions?.meta?.refetchPage\n const fetchMore = context.fetchOptions?.meta?.fetchMore\n const pageParam = fetchMore?.pageParam\n const isFetchingNextPage = fetchMore?.direction === 'forward'\n const isFetchingPreviousPage = fetchMore?.direction === 'backward'\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n let newPageParams = oldPageParams\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 || (() => Promise.reject('Missing queryFn'))\n\n const buildNewPages = (\n pages: unknown[],\n param: unknown,\n page: unknown,\n previous?: boolean,\n ) => {\n newPageParams = previous\n ? [param, ...newPageParams]\n : [...newPageParams, param]\n return previous ? [page, ...pages] : [...pages, page]\n }\n\n // Create function to fetch a page\n const fetchPage = (\n pages: unknown[],\n manual?: boolean,\n param?: unknown,\n previous?: boolean,\n ): Promise<unknown[]> => {\n if (cancelled) {\n return Promise.reject('Cancelled')\n }\n\n if (typeof param === 'undefined' && !manual && pages.length) {\n return Promise.resolve(pages)\n }\n\n const queryFnContext: QueryFunctionContext = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const queryFnResult = queryFn(queryFnContext)\n\n const promise = Promise.resolve(queryFnResult).then((page) =>\n buildNewPages(pages, param, page, previous),\n )\n\n return promise\n }\n\n let promise: Promise<unknown[]>\n\n // Fetch first page?\n if (!oldPages.length) {\n promise = fetchPage([])\n }\n\n // Fetch next page?\n else if (isFetchingNextPage) {\n const manual = typeof pageParam !== 'undefined'\n const param = manual\n ? pageParam\n : getNextPageParam(context.options, oldPages)\n promise = fetchPage(oldPages, manual, param)\n }\n\n // Fetch previous page?\n else if (isFetchingPreviousPage) {\n const manual = typeof pageParam !== 'undefined'\n const param = manual\n ? pageParam\n : getPreviousPageParam(context.options, oldPages)\n promise = fetchPage(oldPages, manual, param, true)\n }\n\n // Refetch pages\n else {\n newPageParams = []\n\n const manual = typeof context.options.getNextPageParam === 'undefined'\n\n const shouldFetchFirstPage =\n refetchPage && oldPages[0]\n ? refetchPage(oldPages[0], 0, oldPages)\n : true\n\n // Fetch first page\n promise = shouldFetchFirstPage\n ? fetchPage([], manual, oldPageParams[0])\n : Promise.resolve(buildNewPages([], oldPageParams[0], oldPages[0]))\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then((pages) => {\n const shouldFetchNextPage =\n refetchPage && oldPages[i]\n ? refetchPage(oldPages[i], i, oldPages)\n : true\n\n if (shouldFetchNextPage) {\n const param = manual\n ? oldPageParams[i]\n : getNextPageParam(context.options, pages)\n return fetchPage(pages, manual, param)\n }\n return Promise.resolve(\n buildNewPages(pages, oldPageParams[i], oldPages[i]),\n )\n })\n }\n }\n\n const finalPromise = promise.then((pages) => ({\n pages,\n pageParams: newPageParams,\n }))\n\n return finalPromise\n }\n },\n }\n}\n\nexport function getNextPageParam(\n options: QueryOptions<any, any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getNextPageParam?.(pages[pages.length - 1], pages)\n}\n\nexport function getPreviousPageParam(\n options: QueryOptions<any, any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasNextPage(\n options: QueryOptions<any, any, any, any>,\n pages?: unknown,\n): boolean | undefined {\n if (options.getNextPageParam && Array.isArray(pages)) {\n const nextPageParam = getNextPageParam(options, pages)\n return (\n typeof nextPageParam !== 'undefined' &&\n nextPageParam !== null &&\n nextPageParam !== false\n )\n }\n return\n}\n\n/**\n * Checks if there is a previous page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasPreviousPage(\n options: QueryOptions<any, any, any, any>,\n pages?: unknown,\n): boolean | undefined {\n if (options.getPreviousPageParam && Array.isArray(pages)) {\n const previousPageParam = getPreviousPageParam(options, pages)\n return (\n typeof previousPageParam !== 'undefined' &&\n previousPageParam !== null &&\n previousPageParam !== false\n )\n }\n return\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","refetchPage","fetchOptions","meta","fetchMore","pageParam","isFetchingNextPage","direction","isFetchingPreviousPage","oldPages","state","data","pages","oldPageParams","pageParams","newPageParams","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","options","Promise","reject","buildNewPages","param","page","previous","fetchPage","manual","length","resolve","queryFnContext","queryKey","queryFnResult","promise","then","getNextPageParam","getPreviousPageParam","shouldFetchFirstPage","i","shouldFetchNextPage","finalPromise","hasNextPage","Array","isArray","nextPageParam","hasPreviousPage","previousPageParam"],"mappings":"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"}
|
|
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 let newPageParams = oldPageParams\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 const buildNewPages = (\n pages: unknown[],\n param: unknown,\n page: unknown,\n previous?: boolean,\n ) => {\n const { maxPages } = context.options\n\n if (previous) {\n newPageParams = addToStart(newPageParams, param, maxPages)\n return addToStart(pages, page, maxPages)\n }\n\n newPageParams = addToEnd(newPageParams, param, maxPages)\n return addToEnd(pages, page, maxPages)\n }\n\n // Create function to fetch a page\n const fetchPage = (\n pages: unknown[],\n param: unknown,\n previous?: boolean,\n ): Promise<unknown[]> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (typeof param === 'undefined' && pages.length) {\n return Promise.resolve(pages)\n }\n\n const queryFnContext: Omit<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const queryFnResult = queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const promise = Promise.resolve(queryFnResult).then((page) =>\n buildNewPages(pages, param, page, previous),\n )\n\n return promise\n }\n\n let promise: Promise<unknown[]>\n\n // Fetch first page?\n if (!oldPages.length) {\n promise = fetchPage([], options.defaultPageParam)\n }\n\n // fetch next / previous page?\n else if (direction) {\n const previous = direction === 'backward'\n const param = previous\n ? getPreviousPageParam(options, oldPages)\n : getNextPageParam(options, oldPages)\n promise = fetchPage(oldPages, param, previous)\n }\n\n // Refetch pages\n else {\n newPageParams = []\n\n // Fetch first page\n promise = fetchPage([], oldPageParams[0])\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then((pages) => {\n const param = getNextPageParam(options, pages)\n return fetchPage(pages, param)\n })\n }\n }\n\n const finalPromise = promise.then((pages) => ({\n pages,\n pageParams: newPageParams,\n }))\n\n return finalPromise\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getNextPageParam(pages[pages.length - 1], pages)\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any>,\n pages?: unknown[],\n): boolean {\n if (!pages) return false\n return typeof getNextPageParam(options, pages) !== 'undefined'\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any>,\n pages?: unknown[],\n): boolean {\n if (!pages || !options.getPreviousPageParam) return false\n return typeof getPreviousPageParam(options, pages) !== 'undefined'\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","options","direction","fetchOptions","meta","fetchMore","oldPages","state","data","pages","oldPageParams","pageParams","newPageParams","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","Promise","reject","Error","buildNewPages","param","page","previous","maxPages","addToStart","addToEnd","fetchPage","length","resolve","queryFnContext","queryKey","pageParam","queryFnResult","promise","then","defaultPageParam","getPreviousPageParam","getNextPageParam","i","finalPromise","hasNextPage","hasPreviousPage"],"mappings":"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"}
|
|
@@ -1,58 +1,53 @@
|
|
|
1
|
+
import { addToStart, addToEnd } from './utils.mjs';
|
|
2
|
+
|
|
1
3
|
function infiniteQueryBehavior() {
|
|
2
4
|
return {
|
|
3
5
|
onFetch: context => {
|
|
4
6
|
context.fetchFn = () => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const pageParam = fetchMore == null ? void 0 : fetchMore.pageParam;
|
|
10
|
-
const isFetchingNextPage = (fetchMore == null ? void 0 : fetchMore.direction) === 'forward';
|
|
11
|
-
const isFetchingPreviousPage = (fetchMore == null ? void 0 : fetchMore.direction) === 'backward';
|
|
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) || [];
|
|
7
|
+
const options = context.options;
|
|
8
|
+
const direction = context.fetchOptions?.meta?.fetchMore?.direction;
|
|
9
|
+
const oldPages = context.state.data?.pages || [];
|
|
10
|
+
const oldPageParams = context.state.data?.pageParams || [];
|
|
14
11
|
let newPageParams = oldPageParams;
|
|
15
12
|
let cancelled = false;
|
|
16
|
-
|
|
17
13
|
const addSignalProperty = object => {
|
|
18
14
|
Object.defineProperty(object, 'signal', {
|
|
19
15
|
enumerable: true,
|
|
20
16
|
get: () => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if ((_context$signal = context.signal) != null && _context$signal.aborted) {
|
|
17
|
+
if (context.signal.aborted) {
|
|
24
18
|
cancelled = true;
|
|
25
19
|
} else {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
(_context$signal2 = context.signal) == null ? void 0 : _context$signal2.addEventListener('abort', () => {
|
|
20
|
+
context.signal.addEventListener('abort', () => {
|
|
29
21
|
cancelled = true;
|
|
30
22
|
});
|
|
31
23
|
}
|
|
32
|
-
|
|
33
24
|
return context.signal;
|
|
34
25
|
}
|
|
35
26
|
});
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const queryFn = context.options.queryFn || (() => Promise.reject('Missing queryFn'));
|
|
27
|
+
};
|
|
40
28
|
|
|
29
|
+
// Get query function
|
|
30
|
+
const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
|
|
41
31
|
const buildNewPages = (pages, param, page, previous) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
+
};
|
|
46
42
|
|
|
47
|
-
|
|
43
|
+
// Create function to fetch a page
|
|
44
|
+
const fetchPage = (pages, param, previous) => {
|
|
48
45
|
if (cancelled) {
|
|
49
|
-
return Promise.reject(
|
|
46
|
+
return Promise.reject();
|
|
50
47
|
}
|
|
51
|
-
|
|
52
|
-
if (typeof param === 'undefined' && !manual && pages.length) {
|
|
48
|
+
if (typeof param === 'undefined' && pages.length) {
|
|
53
49
|
return Promise.resolve(pages);
|
|
54
50
|
}
|
|
55
|
-
|
|
56
51
|
const queryFnContext = {
|
|
57
52
|
queryKey: context.queryKey,
|
|
58
53
|
pageParam: param,
|
|
@@ -63,43 +58,35 @@ function infiniteQueryBehavior() {
|
|
|
63
58
|
const promise = Promise.resolve(queryFnResult).then(page => buildNewPages(pages, param, page, previous));
|
|
64
59
|
return promise;
|
|
65
60
|
};
|
|
61
|
+
let promise;
|
|
66
62
|
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
// Fetch first page?
|
|
69
64
|
if (!oldPages.length) {
|
|
70
|
-
promise = fetchPage([]);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
} // Refetch pages
|
|
65
|
+
promise = fetchPage([], options.defaultPageParam);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// fetch next / previous page?
|
|
69
|
+
else if (direction) {
|
|
70
|
+
const previous = direction === 'backward';
|
|
71
|
+
const param = previous ? getPreviousPageParam(options, oldPages) : getNextPageParam(options, oldPages);
|
|
72
|
+
promise = fetchPage(oldPages, param, previous);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Refetch pages
|
|
82
76
|
else {
|
|
83
77
|
newPageParams = [];
|
|
84
|
-
const manual = typeof context.options.getNextPageParam === 'undefined';
|
|
85
|
-
const shouldFetchFirstPage = refetchPage && oldPages[0] ? refetchPage(oldPages[0], 0, oldPages) : true; // Fetch first page
|
|
86
78
|
|
|
87
|
-
|
|
79
|
+
// Fetch first page
|
|
80
|
+
promise = fetchPage([], oldPageParams[0]);
|
|
88
81
|
|
|
82
|
+
// Fetch remaining pages
|
|
89
83
|
for (let i = 1; i < oldPages.length; i++) {
|
|
90
84
|
promise = promise.then(pages => {
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
if (shouldFetchNextPage) {
|
|
94
|
-
const param = manual ? oldPageParams[i] : getNextPageParam(context.options, pages);
|
|
95
|
-
return fetchPage(pages, manual, param);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return Promise.resolve(buildNewPages(pages, oldPageParams[i], oldPages[i]));
|
|
85
|
+
const param = getNextPageParam(options, pages);
|
|
86
|
+
return fetchPage(pages, param);
|
|
99
87
|
});
|
|
100
88
|
}
|
|
101
89
|
}
|
|
102
|
-
|
|
103
90
|
const finalPromise = promise.then(pages => ({
|
|
104
91
|
pages,
|
|
105
92
|
pageParams: newPageParams
|
|
@@ -110,37 +97,27 @@ function infiniteQueryBehavior() {
|
|
|
110
97
|
};
|
|
111
98
|
}
|
|
112
99
|
function getNextPageParam(options, pages) {
|
|
113
|
-
return options.getNextPageParam
|
|
100
|
+
return options.getNextPageParam(pages[pages.length - 1], pages);
|
|
114
101
|
}
|
|
115
102
|
function getPreviousPageParam(options, pages) {
|
|
116
|
-
return options.getPreviousPageParam
|
|
103
|
+
return options.getPreviousPageParam?.(pages[0], pages);
|
|
117
104
|
}
|
|
105
|
+
|
|
118
106
|
/**
|
|
119
107
|
* Checks if there is a next page.
|
|
120
|
-
* Returns `undefined` if it cannot be determined.
|
|
121
108
|
*/
|
|
122
|
-
|
|
123
109
|
function hasNextPage(options, pages) {
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
return typeof nextPageParam !== 'undefined' && nextPageParam !== null && nextPageParam !== false;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return;
|
|
110
|
+
if (!pages) return false;
|
|
111
|
+
return typeof getNextPageParam(options, pages) !== 'undefined';
|
|
130
112
|
}
|
|
113
|
+
|
|
131
114
|
/**
|
|
132
115
|
* Checks if there is a previous page.
|
|
133
|
-
* Returns `undefined` if it cannot be determined.
|
|
134
116
|
*/
|
|
135
|
-
|
|
136
117
|
function hasPreviousPage(options, pages) {
|
|
137
|
-
if (options.getPreviousPageParam
|
|
138
|
-
|
|
139
|
-
return typeof previousPageParam !== 'undefined' && previousPageParam !== null && previousPageParam !== false;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return;
|
|
118
|
+
if (!pages || !options.getPreviousPageParam) return false;
|
|
119
|
+
return typeof getPreviousPageParam(options, pages) !== 'undefined';
|
|
143
120
|
}
|
|
144
121
|
|
|
145
|
-
export {
|
|
122
|
+
export { hasNextPage, hasPreviousPage, infiniteQueryBehavior };
|
|
146
123
|
//# sourceMappingURL=infiniteQueryBehavior.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryBehavior.mjs","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\n\nimport type {\n InfiniteData,\n QueryFunctionContext,\n QueryOptions,\n RefetchQueryFilters,\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 refetchPage: RefetchQueryFilters['refetchPage'] | undefined =\n context.fetchOptions?.meta?.refetchPage\n const fetchMore = context.fetchOptions?.meta?.fetchMore\n const pageParam = fetchMore?.pageParam\n const isFetchingNextPage = fetchMore?.direction === 'forward'\n const isFetchingPreviousPage = fetchMore?.direction === 'backward'\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n let newPageParams = oldPageParams\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 || (() => Promise.reject('Missing queryFn'))\n\n const buildNewPages = (\n pages: unknown[],\n param: unknown,\n page: unknown,\n previous?: boolean,\n ) => {\n newPageParams = previous\n ? [param, ...newPageParams]\n : [...newPageParams, param]\n return previous ? [page, ...pages] : [...pages, page]\n }\n\n // Create function to fetch a page\n const fetchPage = (\n pages: unknown[],\n manual?: boolean,\n param?: unknown,\n previous?: boolean,\n ): Promise<unknown[]> => {\n if (cancelled) {\n return Promise.reject('Cancelled')\n }\n\n if (typeof param === 'undefined' && !manual && pages.length) {\n return Promise.resolve(pages)\n }\n\n const queryFnContext: QueryFunctionContext = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const queryFnResult = queryFn(queryFnContext)\n\n const promise = Promise.resolve(queryFnResult).then((page) =>\n buildNewPages(pages, param, page, previous),\n )\n\n return promise\n }\n\n let promise: Promise<unknown[]>\n\n // Fetch first page?\n if (!oldPages.length) {\n promise = fetchPage([])\n }\n\n // Fetch next page?\n else if (isFetchingNextPage) {\n const manual = typeof pageParam !== 'undefined'\n const param = manual\n ? pageParam\n : getNextPageParam(context.options, oldPages)\n promise = fetchPage(oldPages, manual, param)\n }\n\n // Fetch previous page?\n else if (isFetchingPreviousPage) {\n const manual = typeof pageParam !== 'undefined'\n const param = manual\n ? pageParam\n : getPreviousPageParam(context.options, oldPages)\n promise = fetchPage(oldPages, manual, param, true)\n }\n\n // Refetch pages\n else {\n newPageParams = []\n\n const manual = typeof context.options.getNextPageParam === 'undefined'\n\n const shouldFetchFirstPage =\n refetchPage && oldPages[0]\n ? refetchPage(oldPages[0], 0, oldPages)\n : true\n\n // Fetch first page\n promise = shouldFetchFirstPage\n ? fetchPage([], manual, oldPageParams[0])\n : Promise.resolve(buildNewPages([], oldPageParams[0], oldPages[0]))\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then((pages) => {\n const shouldFetchNextPage =\n refetchPage && oldPages[i]\n ? refetchPage(oldPages[i], i, oldPages)\n : true\n\n if (shouldFetchNextPage) {\n const param = manual\n ? oldPageParams[i]\n : getNextPageParam(context.options, pages)\n return fetchPage(pages, manual, param)\n }\n return Promise.resolve(\n buildNewPages(pages, oldPageParams[i], oldPages[i]),\n )\n })\n }\n }\n\n const finalPromise = promise.then((pages) => ({\n pages,\n pageParams: newPageParams,\n }))\n\n return finalPromise\n }\n },\n }\n}\n\nexport function getNextPageParam(\n options: QueryOptions<any, any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getNextPageParam?.(pages[pages.length - 1], pages)\n}\n\nexport function getPreviousPageParam(\n options: QueryOptions<any, any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasNextPage(\n options: QueryOptions<any, any, any, any>,\n pages?: unknown,\n): boolean | undefined {\n if (options.getNextPageParam && Array.isArray(pages)) {\n const nextPageParam = getNextPageParam(options, pages)\n return (\n typeof nextPageParam !== 'undefined' &&\n nextPageParam !== null &&\n nextPageParam !== false\n )\n }\n return\n}\n\n/**\n * Checks if there is a previous page.\n * Returns `undefined` if it cannot be determined.\n */\nexport function hasPreviousPage(\n options: QueryOptions<any, any, any, any>,\n pages?: unknown,\n): boolean | undefined {\n if (options.getPreviousPageParam && Array.isArray(pages)) {\n const previousPageParam = getPreviousPageParam(options, pages)\n return (\n typeof previousPageParam !== 'undefined' &&\n previousPageParam !== null &&\n previousPageParam !== false\n )\n }\n return\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","refetchPage","fetchOptions","meta","fetchMore","pageParam","isFetchingNextPage","direction","isFetchingPreviousPage","oldPages","state","data","pages","oldPageParams","pageParams","newPageParams","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","options","Promise","reject","buildNewPages","param","page","previous","fetchPage","manual","length","resolve","queryFnContext","queryKey","queryFnResult","promise","then","getNextPageParam","getPreviousPageParam","shouldFetchFirstPage","i","shouldFetchNextPage","finalPromise","hasNextPage","Array","isArray","nextPageParam","hasPreviousPage","previousPageParam"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"infiniteQueryBehavior.mjs","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 let newPageParams = oldPageParams\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 const buildNewPages = (\n pages: unknown[],\n param: unknown,\n page: unknown,\n previous?: boolean,\n ) => {\n const { maxPages } = context.options\n\n if (previous) {\n newPageParams = addToStart(newPageParams, param, maxPages)\n return addToStart(pages, page, maxPages)\n }\n\n newPageParams = addToEnd(newPageParams, param, maxPages)\n return addToEnd(pages, page, maxPages)\n }\n\n // Create function to fetch a page\n const fetchPage = (\n pages: unknown[],\n param: unknown,\n previous?: boolean,\n ): Promise<unknown[]> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (typeof param === 'undefined' && pages.length) {\n return Promise.resolve(pages)\n }\n\n const queryFnContext: Omit<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const queryFnResult = queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const promise = Promise.resolve(queryFnResult).then((page) =>\n buildNewPages(pages, param, page, previous),\n )\n\n return promise\n }\n\n let promise: Promise<unknown[]>\n\n // Fetch first page?\n if (!oldPages.length) {\n promise = fetchPage([], options.defaultPageParam)\n }\n\n // fetch next / previous page?\n else if (direction) {\n const previous = direction === 'backward'\n const param = previous\n ? getPreviousPageParam(options, oldPages)\n : getNextPageParam(options, oldPages)\n promise = fetchPage(oldPages, param, previous)\n }\n\n // Refetch pages\n else {\n newPageParams = []\n\n // Fetch first page\n promise = fetchPage([], oldPageParams[0])\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then((pages) => {\n const param = getNextPageParam(options, pages)\n return fetchPage(pages, param)\n })\n }\n }\n\n const finalPromise = promise.then((pages) => ({\n pages,\n pageParams: newPageParams,\n }))\n\n return finalPromise\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getNextPageParam(pages[pages.length - 1], pages)\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n pages: unknown[],\n): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages)\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any>,\n pages?: unknown[],\n): boolean {\n if (!pages) return false\n return typeof getNextPageParam(options, pages) !== 'undefined'\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any>,\n pages?: unknown[],\n): boolean {\n if (!pages || !options.getPreviousPageParam) return false\n return typeof getPreviousPageParam(options, pages) !== 'undefined'\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","options","direction","fetchOptions","meta","fetchMore","oldPages","state","data","pages","oldPageParams","pageParams","newPageParams","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","Promise","reject","Error","buildNewPages","param","page","previous","maxPages","addToStart","addToEnd","fetchPage","length","resolve","queryFnContext","queryKey","pageParam","queryFnResult","promise","then","defaultPageParam","getPreviousPageParam","getNextPageParam","i","finalPromise","hasNextPage","hasPreviousPage"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { DefaultedInfiniteQueryObserverOptions, FetchNextPageOptions, FetchPreviousPageOptions, InfiniteData, InfiniteQueryObserverOptions, InfiniteQueryObserverResult, QueryKey } from './types';
|
|
1
|
+
import type { DefaultedInfiniteQueryObserverOptions, FetchNextPageOptions, FetchPreviousPageOptions, InfiniteData, InfiniteQueryObserverOptions, InfiniteQueryObserverResult, QueryKey, RegisteredError } from './types';
|
|
2
2
|
import type { QueryClient } from './queryClient';
|
|
3
3
|
import type { NotifyOptions, ObserverFetchOptions } from './queryObserver';
|
|
4
4
|
import { QueryObserver } from './queryObserver';
|
|
5
5
|
import type { Query } from './query';
|
|
6
6
|
declare type InfiniteQueryObserverListener<TData, TError> = (result: InfiniteQueryObserverResult<TData, TError>) => void;
|
|
7
|
-
export declare class InfiniteQueryObserver<TQueryFnData = unknown, TError =
|
|
7
|
+
export declare class InfiniteQueryObserver<TQueryFnData = unknown, TError = RegisteredError, TData = InfiniteData<TQueryFnData>, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends QueryObserver<TQueryFnData, TError, TData, InfiniteData<TQueryData>, TQueryKey> {
|
|
8
8
|
subscribe: (listener?: InfiniteQueryObserverListener<TData, TError>) => () => void;
|
|
9
9
|
getCurrentResult: () => InfiniteQueryObserverResult<TData, TError>;
|
|
10
10
|
protected fetch: (fetchOptions: ObserverFetchOptions) => Promise<InfiniteQueryObserverResult<TData, TError>>;
|
|
@@ -12,8 +12,8 @@ export declare class InfiniteQueryObserver<TQueryFnData = unknown, TError = unkn
|
|
|
12
12
|
protected bindMethods(): void;
|
|
13
13
|
setOptions(options?: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, notifyOptions?: NotifyOptions): void;
|
|
14
14
|
getOptimisticResult(options: DefaultedInfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): InfiniteQueryObserverResult<TData, TError>;
|
|
15
|
-
fetchNextPage(
|
|
16
|
-
fetchPreviousPage({
|
|
15
|
+
fetchNextPage(options?: FetchNextPageOptions): Promise<InfiniteQueryObserverResult<TData, TError>>;
|
|
16
|
+
fetchPreviousPage({ ...options }?: FetchPreviousPageOptions): Promise<InfiniteQueryObserverResult<TData, TError>>;
|
|
17
17
|
protected createResult(query: Query<TQueryFnData, TError, InfiniteData<TQueryData>, TQueryKey>, options: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): InfiniteQueryObserverResult<TData, TError>;
|
|
18
18
|
}
|
|
19
19
|
export {};
|