@tanstack/react-query 5.59.3 → 5.59.5
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/legacy/infiniteQueryOptions.cjs.map +1 -1
- package/build/legacy/infiniteQueryOptions.d.cts +2 -2
- package/build/legacy/infiniteQueryOptions.d.ts +2 -2
- package/build/legacy/infiniteQueryOptions.js.map +1 -1
- package/build/modern/infiniteQueryOptions.cjs.map +1 -1
- package/build/modern/infiniteQueryOptions.d.cts +2 -2
- package/build/modern/infiniteQueryOptions.d.ts +2 -2
- package/build/modern/infiniteQueryOptions.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/infiniteQueryOptions.test-d.tsx +20 -1
- package/src/__tests__/useQueries.test.tsx +117 -0
- package/src/infiniteQueryOptions.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData
|
|
1
|
+
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n InitialDataFunction,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData?:\n | undefined\n | InitialDataFunction<\n NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n >\n}\n\ntype NonUndefinedGuard<T> = T extends undefined ? never : T\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData:\n | NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n | (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmGO,SAAS,qBAAqB,SAAkB;AACrD,SAAO;AACT;","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DefaultError, InfiniteData, QueryKey, DataTag } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, InfiniteData, QueryKey, InitialDataFunction, DataTag } from '@tanstack/query-core';
|
|
2
2
|
import { UseInfiniteQueryOptions } from './types.cjs';
|
|
3
3
|
|
|
4
4
|
type UndefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
5
|
-
initialData?: undefined
|
|
5
|
+
initialData?: undefined | InitialDataFunction<NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>>;
|
|
6
6
|
};
|
|
7
7
|
type NonUndefinedGuard<T> = T extends undefined ? never : T;
|
|
8
8
|
type DefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DefaultError, InfiniteData, QueryKey, DataTag } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, InfiniteData, QueryKey, InitialDataFunction, DataTag } from '@tanstack/query-core';
|
|
2
2
|
import { UseInfiniteQueryOptions } from './types.js';
|
|
3
3
|
|
|
4
4
|
type UndefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
5
|
-
initialData?: undefined
|
|
5
|
+
initialData?: undefined | InitialDataFunction<NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>>;
|
|
6
6
|
};
|
|
7
7
|
type NonUndefinedGuard<T> = T extends undefined ? never : T;
|
|
8
8
|
type DefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData
|
|
1
|
+
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n InitialDataFunction,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData?:\n | undefined\n | InitialDataFunction<\n NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n >\n}\n\ntype NonUndefinedGuard<T> = T extends undefined ? never : T\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData:\n | NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n | (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n"],"mappings":";AAmGO,SAAS,qBAAqB,SAAkB;AACrD,SAAO;AACT;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData
|
|
1
|
+
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n InitialDataFunction,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData?:\n | undefined\n | InitialDataFunction<\n NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n >\n}\n\ntype NonUndefinedGuard<T> = T extends undefined ? never : T\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData:\n | NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n | (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmGO,SAAS,qBAAqB,SAAkB;AACrD,SAAO;AACT;","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DefaultError, InfiniteData, QueryKey, DataTag } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, InfiniteData, QueryKey, InitialDataFunction, DataTag } from '@tanstack/query-core';
|
|
2
2
|
import { UseInfiniteQueryOptions } from './types.cjs';
|
|
3
3
|
|
|
4
4
|
type UndefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
5
|
-
initialData?: undefined
|
|
5
|
+
initialData?: undefined | InitialDataFunction<NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>>;
|
|
6
6
|
};
|
|
7
7
|
type NonUndefinedGuard<T> = T extends undefined ? never : T;
|
|
8
8
|
type DefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DefaultError, InfiniteData, QueryKey, DataTag } from '@tanstack/query-core';
|
|
1
|
+
import { DefaultError, InfiniteData, QueryKey, InitialDataFunction, DataTag } from '@tanstack/query-core';
|
|
2
2
|
import { UseInfiniteQueryOptions } from './types.js';
|
|
3
3
|
|
|
4
4
|
type UndefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
5
|
-
initialData?: undefined
|
|
5
|
+
initialData?: undefined | InitialDataFunction<NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>>;
|
|
6
6
|
};
|
|
7
7
|
type NonUndefinedGuard<T> = T extends undefined ? never : T;
|
|
8
8
|
type DefinedInitialDataInfiniteOptions<TQueryFnData, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey, TPageParam> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData
|
|
1
|
+
{"version":3,"sources":["../../src/infiniteQueryOptions.ts"],"sourcesContent":["import type {\n DataTag,\n DefaultError,\n InfiniteData,\n InitialDataFunction,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData?:\n | undefined\n | InitialDataFunction<\n NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n >\n}\n\ntype NonUndefinedGuard<T> = T extends undefined ? never : T\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData:\n | NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>\n | (() => NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>)\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n"],"mappings":";AAmGO,SAAS,qBAAqB,SAAkB;AACrD,SAAO;AACT;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-query",
|
|
3
|
-
"version": "5.59.
|
|
3
|
+
"version": "5.59.5",
|
|
4
4
|
"description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"!build/codemods/**/__tests__"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@tanstack/query-core": "5.59.
|
|
44
|
+
"@tanstack/query-core": "5.59.4"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/react": "npm:types-react@rc",
|
|
@@ -4,7 +4,7 @@ import { infiniteQueryOptions } from '../infiniteQueryOptions'
|
|
|
4
4
|
import { useInfiniteQuery } from '../useInfiniteQuery'
|
|
5
5
|
import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery'
|
|
6
6
|
import { useQuery } from '../useQuery'
|
|
7
|
-
import type { InfiniteData } from '@tanstack/query-core'
|
|
7
|
+
import type { InfiniteData, InitialDataFunction } from '@tanstack/query-core'
|
|
8
8
|
|
|
9
9
|
describe('queryOptions', () => {
|
|
10
10
|
it('should not allow excess properties', () => {
|
|
@@ -152,4 +152,23 @@ describe('queryOptions', () => {
|
|
|
152
152
|
// @ts-expect-error cannot pass infinite options to non-infinite query functions
|
|
153
153
|
queryClient.prefetchQuery(options)
|
|
154
154
|
})
|
|
155
|
+
|
|
156
|
+
test('allow optional initialData', () => {
|
|
157
|
+
const initialData: { example: boolean } | undefined = { example: true }
|
|
158
|
+
const queryOptions = infiniteQueryOptions({
|
|
159
|
+
queryKey: ['example'],
|
|
160
|
+
queryFn: async () => initialData,
|
|
161
|
+
// initialData below errors
|
|
162
|
+
initialData: initialData
|
|
163
|
+
? () => ({ pages: [initialData], pageParams: [] })
|
|
164
|
+
: undefined,
|
|
165
|
+
getNextPageParam: () => 1,
|
|
166
|
+
initialPageParam: 1,
|
|
167
|
+
})
|
|
168
|
+
queryOptions.initialData
|
|
169
|
+
expectTypeOf(queryOptions.initialData).toMatchTypeOf<
|
|
170
|
+
| InitialDataFunction<InfiniteData<{ example: boolean }, number>>
|
|
171
|
+
| undefined
|
|
172
|
+
>()
|
|
173
|
+
})
|
|
155
174
|
})
|
|
@@ -1431,4 +1431,121 @@ describe('useQueries', () => {
|
|
|
1431
1431
|
// state changed, re-run combine
|
|
1432
1432
|
expect(spy).toHaveBeenCalledTimes(4)
|
|
1433
1433
|
})
|
|
1434
|
+
|
|
1435
|
+
it('should not re-render if combine returns a stable reference', async () => {
|
|
1436
|
+
const key1 = queryKey()
|
|
1437
|
+
const key2 = queryKey()
|
|
1438
|
+
|
|
1439
|
+
const client = new QueryClient()
|
|
1440
|
+
|
|
1441
|
+
const queryFns: Array<string> = []
|
|
1442
|
+
let renders = 0
|
|
1443
|
+
|
|
1444
|
+
function Page() {
|
|
1445
|
+
const data = useQueries(
|
|
1446
|
+
{
|
|
1447
|
+
queries: [
|
|
1448
|
+
{
|
|
1449
|
+
queryKey: [key1],
|
|
1450
|
+
queryFn: async () => {
|
|
1451
|
+
await sleep(10)
|
|
1452
|
+
queryFns.push('first result')
|
|
1453
|
+
return 'first result'
|
|
1454
|
+
},
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
queryKey: [key2],
|
|
1458
|
+
queryFn: async () => {
|
|
1459
|
+
await sleep(20)
|
|
1460
|
+
queryFns.push('second result')
|
|
1461
|
+
return 'second result'
|
|
1462
|
+
},
|
|
1463
|
+
},
|
|
1464
|
+
],
|
|
1465
|
+
combine: () => 'foo',
|
|
1466
|
+
},
|
|
1467
|
+
client,
|
|
1468
|
+
)
|
|
1469
|
+
|
|
1470
|
+
renders++
|
|
1471
|
+
|
|
1472
|
+
return (
|
|
1473
|
+
<div>
|
|
1474
|
+
<div>data: {data}</div>
|
|
1475
|
+
</div>
|
|
1476
|
+
)
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
const rendered = render(<Page />)
|
|
1480
|
+
|
|
1481
|
+
await waitFor(() => rendered.getByText('data: foo'))
|
|
1482
|
+
|
|
1483
|
+
await waitFor(() =>
|
|
1484
|
+
expect(queryFns).toEqual(['first result', 'second result']),
|
|
1485
|
+
)
|
|
1486
|
+
|
|
1487
|
+
expect(renders).toBe(1)
|
|
1488
|
+
})
|
|
1489
|
+
|
|
1490
|
+
it('should re-render once combine returns a different reference', async () => {
|
|
1491
|
+
const key1 = queryKey()
|
|
1492
|
+
const key2 = queryKey()
|
|
1493
|
+
const key3 = queryKey()
|
|
1494
|
+
|
|
1495
|
+
const client = new QueryClient()
|
|
1496
|
+
|
|
1497
|
+
let renders = 0
|
|
1498
|
+
|
|
1499
|
+
function Page() {
|
|
1500
|
+
const data = useQueries(
|
|
1501
|
+
{
|
|
1502
|
+
queries: [
|
|
1503
|
+
{
|
|
1504
|
+
queryKey: [key1],
|
|
1505
|
+
queryFn: async () => {
|
|
1506
|
+
await sleep(10)
|
|
1507
|
+
return 'first result'
|
|
1508
|
+
},
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
queryKey: [key2],
|
|
1512
|
+
queryFn: async () => {
|
|
1513
|
+
await sleep(15)
|
|
1514
|
+
return 'second result'
|
|
1515
|
+
},
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
queryKey: [key3],
|
|
1519
|
+
queryFn: async () => {
|
|
1520
|
+
await sleep(20)
|
|
1521
|
+
return 'third result'
|
|
1522
|
+
},
|
|
1523
|
+
},
|
|
1524
|
+
],
|
|
1525
|
+
combine: (results) => {
|
|
1526
|
+
const isPending = results.some((res) => res.isPending)
|
|
1527
|
+
|
|
1528
|
+
return isPending ? 'pending' : 'foo'
|
|
1529
|
+
},
|
|
1530
|
+
},
|
|
1531
|
+
client,
|
|
1532
|
+
)
|
|
1533
|
+
|
|
1534
|
+
renders++
|
|
1535
|
+
|
|
1536
|
+
return (
|
|
1537
|
+
<div>
|
|
1538
|
+
<div>data: {data}</div>
|
|
1539
|
+
</div>
|
|
1540
|
+
)
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
const rendered = render(<Page />)
|
|
1544
|
+
|
|
1545
|
+
await waitFor(() => rendered.getByText('data: pending'))
|
|
1546
|
+
await waitFor(() => rendered.getByText('data: foo'))
|
|
1547
|
+
|
|
1548
|
+
// one with pending, one with foo
|
|
1549
|
+
expect(renders).toBe(2)
|
|
1550
|
+
})
|
|
1434
1551
|
})
|
|
@@ -2,6 +2,7 @@ import type {
|
|
|
2
2
|
DataTag,
|
|
3
3
|
DefaultError,
|
|
4
4
|
InfiniteData,
|
|
5
|
+
InitialDataFunction,
|
|
5
6
|
QueryKey,
|
|
6
7
|
} from '@tanstack/query-core'
|
|
7
8
|
import type { UseInfiniteQueryOptions } from './types'
|
|
@@ -20,7 +21,11 @@ export type UndefinedInitialDataInfiniteOptions<
|
|
|
20
21
|
TQueryKey,
|
|
21
22
|
TPageParam
|
|
22
23
|
> & {
|
|
23
|
-
initialData?:
|
|
24
|
+
initialData?:
|
|
25
|
+
| undefined
|
|
26
|
+
| InitialDataFunction<
|
|
27
|
+
NonUndefinedGuard<InfiniteData<TQueryFnData, TPageParam>>
|
|
28
|
+
>
|
|
24
29
|
}
|
|
25
30
|
|
|
26
31
|
type NonUndefinedGuard<T> = T extends undefined ? never : T
|