@tanstack/react-query 4.24.9 → 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/HydrationBoundary.d.ts +9 -0
- package/build/lib/{Hydrate.esm.js → HydrationBoundary.esm.js} +14 -17
- package/build/lib/HydrationBoundary.esm.js.map +1 -0
- package/build/lib/{Hydrate.js → HydrationBoundary.js} +17 -24
- package/build/lib/HydrationBoundary.js.map +1 -0
- package/build/lib/{Hydrate.mjs → HydrationBoundary.mjs} +14 -17
- package/build/lib/HydrationBoundary.mjs.map +1 -0
- package/build/lib/QueryClientProvider.d.ts +4 -19
- package/build/lib/QueryClientProvider.esm.js +11 -46
- package/build/lib/QueryClientProvider.esm.js.map +1 -1
- package/build/lib/QueryClientProvider.js +14 -52
- package/build/lib/QueryClientProvider.js.map +1 -1
- package/build/lib/QueryClientProvider.mjs +11 -46
- package/build/lib/QueryClientProvider.mjs.map +1 -1
- package/build/lib/QueryErrorResetBoundary.esm.js +7 -2
- package/build/lib/QueryErrorResetBoundary.esm.js.map +1 -1
- package/build/lib/QueryErrorResetBoundary.js +10 -8
- package/build/lib/QueryErrorResetBoundary.js.map +1 -1
- package/build/lib/QueryErrorResetBoundary.mjs +7 -2
- package/build/lib/QueryErrorResetBoundary.mjs.map +1 -1
- package/build/lib/__tests__/useQuery.types.test.d.ts +1 -2
- package/build/lib/__tests__/utils.d.ts +7 -10
- package/build/lib/errorBoundaryUtils.d.ts +3 -3
- package/build/lib/errorBoundaryUtils.esm.js +3 -3
- package/build/lib/errorBoundaryUtils.esm.js.map +1 -1
- package/build/lib/errorBoundaryUtils.js +6 -9
- package/build/lib/errorBoundaryUtils.js.map +1 -1
- package/build/lib/errorBoundaryUtils.mjs +3 -3
- package/build/lib/errorBoundaryUtils.mjs.map +1 -1
- package/build/lib/index.d.ts +4 -5
- package/build/lib/index.esm.js +3 -4
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +6 -9
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +3 -4
- package/build/lib/index.mjs.map +1 -1
- package/build/lib/isRestoring.esm.js.map +1 -1
- package/build/lib/isRestoring.js +3 -6
- package/build/lib/isRestoring.js.map +1 -1
- package/build/lib/isRestoring.mjs.map +1 -1
- package/build/lib/suspense.esm.js +5 -5
- package/build/lib/suspense.esm.js.map +1 -1
- package/build/lib/suspense.js +5 -7
- package/build/lib/suspense.js.map +1 -1
- package/build/lib/suspense.mjs +5 -5
- package/build/lib/suspense.mjs.map +1 -1
- package/build/lib/types.d.ts +14 -22
- package/build/lib/useBaseQuery.d.ts +2 -2
- package/build/lib/useBaseQuery.esm.js +15 -18
- package/build/lib/useBaseQuery.esm.js.map +1 -1
- package/build/lib/useBaseQuery.js +18 -24
- package/build/lib/useBaseQuery.js.map +1 -1
- package/build/lib/useBaseQuery.mjs +15 -18
- package/build/lib/useBaseQuery.mjs.map +1 -1
- package/build/lib/useInfiniteQuery.d.ts +2 -4
- package/build/lib/useInfiniteQuery.esm.js +4 -4
- package/build/lib/useInfiniteQuery.esm.js.map +1 -1
- package/build/lib/useInfiniteQuery.js +3 -5
- package/build/lib/useInfiniteQuery.js.map +1 -1
- package/build/lib/useInfiniteQuery.mjs +4 -4
- package/build/lib/useInfiniteQuery.mjs.map +1 -1
- package/build/lib/useIsFetching.d.ts +2 -7
- package/build/lib/useIsFetching.esm.js +5 -9
- package/build/lib/useIsFetching.esm.js.map +1 -1
- package/build/lib/useIsFetching.js +7 -14
- package/build/lib/useIsFetching.js.map +1 -1
- package/build/lib/useIsFetching.mjs +5 -9
- package/build/lib/useIsFetching.mjs.map +1 -1
- package/build/lib/useMutation.d.ts +2 -5
- package/build/lib/useMutation.esm.js +12 -14
- package/build/lib/useMutation.esm.js.map +1 -1
- package/build/lib/useMutation.js +14 -19
- package/build/lib/useMutation.js.map +1 -1
- package/build/lib/useMutation.mjs +12 -14
- package/build/lib/useMutation.mjs.map +1 -1
- package/build/lib/useMutationState.d.ts +8 -0
- package/build/lib/useMutationState.esm.js +37 -0
- package/build/lib/useMutationState.esm.js.map +1 -0
- package/build/lib/useMutationState.js +59 -0
- package/build/lib/useMutationState.js.map +1 -0
- package/build/lib/useMutationState.mjs +37 -0
- package/build/lib/useMutationState.mjs.map +1 -0
- package/build/lib/useQueries.d.ts +9 -7
- package/build/lib/useQueries.esm.js +16 -27
- package/build/lib/useQueries.esm.js.map +1 -1
- package/build/lib/useQueries.js +19 -33
- package/build/lib/useQueries.js.map +1 -1
- package/build/lib/useQueries.mjs +16 -27
- package/build/lib/useQueries.mjs.map +1 -1
- package/build/lib/useQuery.d.ts +9 -21
- package/build/lib/useQuery.esm.js +5 -4
- package/build/lib/useQuery.esm.js.map +1 -1
- package/build/lib/useQuery.js +4 -5
- package/build/lib/useQuery.js.map +1 -1
- package/build/lib/useQuery.mjs +5 -4
- package/build/lib/useQuery.mjs.map +1 -1
- package/build/lib/utils.d.ts +1 -1
- package/build/lib/utils.esm.js +5 -6
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +5 -8
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.mjs +5 -6
- package/build/lib/utils.mjs.map +1 -1
- package/build/umd/index.development.js +1007 -1826
- 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 +6 -18
- package/src/{Hydrate.tsx → HydrationBoundary.tsx} +17 -18
- package/src/QueryClientProvider.tsx +11 -65
- package/src/__tests__/{Hydrate.test.tsx → HydrationBoundary.test.tsx} +89 -77
- package/src/__tests__/QueryClientProvider.test.tsx +33 -147
- package/src/__tests__/QueryResetErrorBoundary.test.tsx +118 -85
- package/src/__tests__/ssr-hydration.test.tsx +27 -33
- package/src/__tests__/ssr.test.tsx +23 -9
- package/src/__tests__/suspense.test.tsx +194 -171
- package/src/__tests__/useInfiniteQuery.test.tsx +249 -494
- package/src/__tests__/useInfiniteQuery.type.test.tsx +131 -0
- package/src/__tests__/useIsFetching.test.tsx +65 -108
- package/src/__tests__/useMutation.test.tsx +200 -268
- package/src/__tests__/useMutationState.test.tsx +284 -0
- package/src/__tests__/useQueries.test.tsx +43 -347
- package/src/__tests__/useQuery.test.tsx +890 -686
- package/src/__tests__/useQuery.types.test.tsx +23 -24
- package/src/__tests__/utils.tsx +14 -23
- package/src/errorBoundaryUtils.ts +5 -10
- package/src/index.ts +4 -7
- package/src/types.ts +33 -38
- package/src/useBaseQuery.ts +7 -7
- package/src/useInfiniteQuery.ts +12 -77
- package/src/useIsFetching.ts +8 -20
- package/src/useMutation.ts +8 -66
- package/src/useMutationState.ts +81 -0
- package/src/useQueries.ts +29 -21
- package/src/useQuery.ts +27 -104
- package/src/utils.ts +5 -5
- package/build/lib/Hydrate.d.ts +0 -10
- package/build/lib/Hydrate.esm.js.map +0 -1
- package/build/lib/Hydrate.js.map +0 -1
- package/build/lib/Hydrate.mjs.map +0 -1
- package/build/lib/reactBatchedUpdates.d.ts +0 -2
- package/build/lib/reactBatchedUpdates.esm.js +0 -6
- package/build/lib/reactBatchedUpdates.esm.js.map +0 -1
- package/build/lib/reactBatchedUpdates.js +0 -30
- package/build/lib/reactBatchedUpdates.js.map +0 -1
- package/build/lib/reactBatchedUpdates.mjs +0 -6
- package/build/lib/reactBatchedUpdates.mjs.map +0 -1
- package/build/lib/reactBatchedUpdates.native.d.ts +0 -2
- package/build/lib/reactBatchedUpdates.native.esm.js +0 -2
- package/build/lib/reactBatchedUpdates.native.esm.js.map +0 -1
- package/build/lib/reactBatchedUpdates.native.js +0 -13
- package/build/lib/reactBatchedUpdates.native.js.map +0 -1
- package/build/lib/reactBatchedUpdates.native.mjs +0 -2
- package/build/lib/reactBatchedUpdates.native.mjs.map +0 -1
- package/build/lib/setBatchUpdatesFn.esm.js +0 -5
- package/build/lib/setBatchUpdatesFn.esm.js.map +0 -1
- package/build/lib/setBatchUpdatesFn.js +0 -7
- package/build/lib/setBatchUpdatesFn.js.map +0 -1
- package/build/lib/setBatchUpdatesFn.mjs +0 -5
- package/build/lib/setBatchUpdatesFn.mjs.map +0 -1
- package/build/lib/useIsMutating.d.ts +0 -7
- package/build/lib/useIsMutating.esm.js +0 -16
- package/build/lib/useIsMutating.esm.js.map +0 -1
- package/build/lib/useIsMutating.js +0 -40
- package/build/lib/useIsMutating.js.map +0 -1
- package/build/lib/useIsMutating.mjs +0 -16
- package/build/lib/useIsMutating.mjs.map +0 -1
- package/build/lib/useSyncExternalStore.d.ts +0 -2
- package/build/lib/useSyncExternalStore.esm.js +0 -7
- package/build/lib/useSyncExternalStore.esm.js.map +0 -1
- package/build/lib/useSyncExternalStore.js +0 -11
- package/build/lib/useSyncExternalStore.js.map +0 -1
- package/build/lib/useSyncExternalStore.mjs +0 -7
- package/build/lib/useSyncExternalStore.mjs.map +0 -1
- package/build/lib/useSyncExternalStore.native.d.ts +0 -2
- package/build/lib/useSyncExternalStore.native.esm.js +0 -2
- package/build/lib/useSyncExternalStore.native.esm.js.map +0 -1
- package/build/lib/useSyncExternalStore.native.js +0 -13
- package/build/lib/useSyncExternalStore.native.js.map +0 -1
- package/build/lib/useSyncExternalStore.native.mjs +0 -2
- package/build/lib/useSyncExternalStore.native.mjs.map +0 -1
- package/codemods/v4/key-transformation.js +0 -138
- package/codemods/v4/replace-import-specifier.js +0 -25
- package/codemods/v4/utils/index.js +0 -166
- package/codemods/v4/utils/replacers/key-replacer.js +0 -160
- package/codemods/v4/utils/transformers/query-cache-transformer.js +0 -115
- package/codemods/v4/utils/transformers/query-client-transformer.js +0 -49
- package/codemods/v4/utils/transformers/use-query-like-transformer.js +0 -32
- package/codemods/v4/utils/unprocessable-key-error.js +0 -8
- package/src/__tests__/useIsMutating.test.tsx +0 -259
- package/src/reactBatchedUpdates.native.ts +0 -4
- package/src/reactBatchedUpdates.ts +0 -2
- package/src/setBatchUpdatesFn.ts +0 -4
- package/src/useIsMutating.ts +0 -39
- package/src/useSyncExternalStore.native.ts +0 -5
- package/src/useSyncExternalStore.ts +0 -4
- /package/build/lib/__tests__/{Hydrate.test.d.ts → HydrationBoundary.test.d.ts} +0 -0
- /package/build/lib/__tests__/{useIsMutating.test.d.ts → useInfiniteQuery.type.test.d.ts} +0 -0
- /package/build/lib/{setBatchUpdatesFn.d.ts → __tests__/useMutationState.test.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fireEvent, waitFor } from '@testing-library/react'
|
|
1
|
+
import { fireEvent, render, waitFor } from '@testing-library/react'
|
|
2
2
|
import * as React from 'react'
|
|
3
3
|
|
|
4
4
|
import {
|
|
@@ -13,7 +13,7 @@ import type {
|
|
|
13
13
|
QueryFunctionContext,
|
|
14
14
|
UseInfiniteQueryResult,
|
|
15
15
|
} from '..'
|
|
16
|
-
import { QueryCache, useInfiniteQuery } from '..'
|
|
16
|
+
import { QueryCache, useInfiniteQuery, keepPreviousData } from '..'
|
|
17
17
|
|
|
18
18
|
interface Result {
|
|
19
19
|
items: number[]
|
|
@@ -45,16 +45,15 @@ describe('useInfiniteQuery', () => {
|
|
|
45
45
|
|
|
46
46
|
it('should return the correct states for a successful query', async () => {
|
|
47
47
|
const key = queryKey()
|
|
48
|
-
const states: UseInfiniteQueryResult<number
|
|
48
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
49
49
|
|
|
50
50
|
function Page() {
|
|
51
|
-
const state = useInfiniteQuery(
|
|
52
|
-
key,
|
|
53
|
-
({ pageParam
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
)
|
|
51
|
+
const state = useInfiniteQuery({
|
|
52
|
+
queryKey: key,
|
|
53
|
+
queryFn: ({ pageParam }) => Number(pageParam),
|
|
54
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
55
|
+
defaultPageParam: 0,
|
|
56
|
+
})
|
|
58
57
|
states.push(state)
|
|
59
58
|
return null
|
|
60
59
|
}
|
|
@@ -74,8 +73,8 @@ describe('useInfiniteQuery', () => {
|
|
|
74
73
|
errorUpdateCount: 0,
|
|
75
74
|
fetchNextPage: expect.any(Function),
|
|
76
75
|
fetchPreviousPage: expect.any(Function),
|
|
77
|
-
hasNextPage:
|
|
78
|
-
hasPreviousPage:
|
|
76
|
+
hasNextPage: false,
|
|
77
|
+
hasPreviousPage: false,
|
|
79
78
|
isError: false,
|
|
80
79
|
isFetched: false,
|
|
81
80
|
isFetchedAfterMount: false,
|
|
@@ -84,22 +83,21 @@ describe('useInfiniteQuery', () => {
|
|
|
84
83
|
isFetchingNextPage: false,
|
|
85
84
|
isFetchingPreviousPage: false,
|
|
86
85
|
isLoading: true,
|
|
86
|
+
isPending: true,
|
|
87
87
|
isInitialLoading: true,
|
|
88
88
|
isLoadingError: false,
|
|
89
89
|
isPlaceholderData: false,
|
|
90
|
-
isPreviousData: false,
|
|
91
90
|
isRefetchError: false,
|
|
92
91
|
isRefetching: false,
|
|
93
92
|
isStale: true,
|
|
94
93
|
isSuccess: false,
|
|
95
94
|
refetch: expect.any(Function),
|
|
96
|
-
|
|
97
|
-
status: 'loading',
|
|
95
|
+
status: 'pending',
|
|
98
96
|
fetchStatus: 'fetching',
|
|
99
97
|
})
|
|
100
98
|
|
|
101
99
|
expect(states[1]).toEqual({
|
|
102
|
-
data: { pages: [0], pageParams: [
|
|
100
|
+
data: { pages: [0], pageParams: [0] },
|
|
103
101
|
dataUpdatedAt: expect.any(Number),
|
|
104
102
|
error: null,
|
|
105
103
|
errorUpdatedAt: 0,
|
|
@@ -109,7 +107,7 @@ describe('useInfiniteQuery', () => {
|
|
|
109
107
|
fetchNextPage: expect.any(Function),
|
|
110
108
|
fetchPreviousPage: expect.any(Function),
|
|
111
109
|
hasNextPage: true,
|
|
112
|
-
hasPreviousPage:
|
|
110
|
+
hasPreviousPage: false,
|
|
113
111
|
isError: false,
|
|
114
112
|
isFetched: true,
|
|
115
113
|
isFetchedAfterMount: true,
|
|
@@ -118,16 +116,15 @@ describe('useInfiniteQuery', () => {
|
|
|
118
116
|
isFetchingNextPage: false,
|
|
119
117
|
isFetchingPreviousPage: false,
|
|
120
118
|
isLoading: false,
|
|
119
|
+
isPending: false,
|
|
121
120
|
isInitialLoading: false,
|
|
122
121
|
isLoadingError: false,
|
|
123
122
|
isPlaceholderData: false,
|
|
124
|
-
isPreviousData: false,
|
|
125
123
|
isRefetchError: false,
|
|
126
124
|
isRefetching: false,
|
|
127
125
|
isStale: true,
|
|
128
126
|
isSuccess: true,
|
|
129
127
|
refetch: expect.any(Function),
|
|
130
|
-
remove: expect.any(Function),
|
|
131
128
|
status: 'success',
|
|
132
129
|
fetchStatus: 'idle',
|
|
133
130
|
})
|
|
@@ -139,20 +136,19 @@ describe('useInfiniteQuery', () => {
|
|
|
139
136
|
|
|
140
137
|
function Page() {
|
|
141
138
|
const start = 1
|
|
142
|
-
const state = useInfiniteQuery(
|
|
143
|
-
key,
|
|
144
|
-
async ({ pageParam
|
|
139
|
+
const state = useInfiniteQuery({
|
|
140
|
+
queryKey: key,
|
|
141
|
+
queryFn: async ({ pageParam }) => {
|
|
145
142
|
if (pageParam === 2) {
|
|
146
143
|
throw new Error('error')
|
|
147
144
|
}
|
|
148
145
|
return Number(pageParam)
|
|
149
146
|
},
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
)
|
|
147
|
+
retry: 1,
|
|
148
|
+
retryDelay: 10,
|
|
149
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
150
|
+
defaultPageParam: start,
|
|
151
|
+
})
|
|
156
152
|
|
|
157
153
|
const { fetchNextPage } = state
|
|
158
154
|
|
|
@@ -174,25 +170,24 @@ describe('useInfiniteQuery', () => {
|
|
|
174
170
|
await waitFor(() => expect(noThrow).toBe(true))
|
|
175
171
|
})
|
|
176
172
|
|
|
177
|
-
it('should keep the previous data when
|
|
173
|
+
it('should keep the previous data when placeholderData is set', async () => {
|
|
178
174
|
const key = queryKey()
|
|
179
|
-
const states: UseInfiniteQueryResult<string
|
|
175
|
+
const states: UseInfiniteQueryResult<InfiniteData<string>>[] = []
|
|
180
176
|
|
|
181
177
|
function Page() {
|
|
182
178
|
const [order, setOrder] = React.useState('desc')
|
|
183
179
|
|
|
184
|
-
const state = useInfiniteQuery(
|
|
185
|
-
[key, order],
|
|
186
|
-
async ({ pageParam
|
|
180
|
+
const state = useInfiniteQuery({
|
|
181
|
+
queryKey: [key, order],
|
|
182
|
+
queryFn: async ({ pageParam }) => {
|
|
187
183
|
await sleep(10)
|
|
188
184
|
return `${pageParam}-${order}`
|
|
189
185
|
},
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
)
|
|
186
|
+
getNextPageParam: () => 1,
|
|
187
|
+
defaultPageParam: 0,
|
|
188
|
+
placeholderData: keepPreviousData,
|
|
189
|
+
notifyOnChangeProps: 'all',
|
|
190
|
+
})
|
|
196
191
|
|
|
197
192
|
states.push(state)
|
|
198
193
|
|
|
@@ -223,28 +218,28 @@ describe('useInfiniteQuery', () => {
|
|
|
223
218
|
isFetching: true,
|
|
224
219
|
isFetchingNextPage: false,
|
|
225
220
|
isSuccess: false,
|
|
226
|
-
|
|
221
|
+
isPlaceholderData: false,
|
|
227
222
|
})
|
|
228
223
|
expect(states[1]).toMatchObject({
|
|
229
224
|
data: { pages: ['0-desc'] },
|
|
230
225
|
isFetching: false,
|
|
231
226
|
isFetchingNextPage: false,
|
|
232
227
|
isSuccess: true,
|
|
233
|
-
|
|
228
|
+
isPlaceholderData: false,
|
|
234
229
|
})
|
|
235
230
|
expect(states[2]).toMatchObject({
|
|
236
231
|
data: { pages: ['0-desc'] },
|
|
237
232
|
isFetching: true,
|
|
238
233
|
isFetchingNextPage: true,
|
|
239
234
|
isSuccess: true,
|
|
240
|
-
|
|
235
|
+
isPlaceholderData: false,
|
|
241
236
|
})
|
|
242
237
|
expect(states[3]).toMatchObject({
|
|
243
238
|
data: { pages: ['0-desc', '1-desc'] },
|
|
244
239
|
isFetching: false,
|
|
245
240
|
isFetchingNextPage: false,
|
|
246
241
|
isSuccess: true,
|
|
247
|
-
|
|
242
|
+
isPlaceholderData: false,
|
|
248
243
|
})
|
|
249
244
|
// Set state
|
|
250
245
|
expect(states[4]).toMatchObject({
|
|
@@ -252,7 +247,7 @@ describe('useInfiniteQuery', () => {
|
|
|
252
247
|
isFetching: true,
|
|
253
248
|
isFetchingNextPage: false,
|
|
254
249
|
isSuccess: true,
|
|
255
|
-
|
|
250
|
+
isPlaceholderData: true,
|
|
256
251
|
})
|
|
257
252
|
// Hook state update
|
|
258
253
|
expect(states[5]).toMatchObject({
|
|
@@ -260,27 +255,31 @@ describe('useInfiniteQuery', () => {
|
|
|
260
255
|
isFetching: true,
|
|
261
256
|
isFetchingNextPage: false,
|
|
262
257
|
isSuccess: true,
|
|
263
|
-
|
|
258
|
+
isPlaceholderData: true,
|
|
264
259
|
})
|
|
265
260
|
expect(states[6]).toMatchObject({
|
|
266
261
|
data: { pages: ['0-asc'] },
|
|
267
262
|
isFetching: false,
|
|
268
263
|
isFetchingNextPage: false,
|
|
269
264
|
isSuccess: true,
|
|
270
|
-
|
|
265
|
+
isPlaceholderData: false,
|
|
271
266
|
})
|
|
272
267
|
})
|
|
273
268
|
|
|
274
269
|
it('should be able to select a part of the data', async () => {
|
|
275
270
|
const key = queryKey()
|
|
276
|
-
const states: UseInfiniteQueryResult<string
|
|
271
|
+
const states: UseInfiniteQueryResult<InfiniteData<string>>[] = []
|
|
277
272
|
|
|
278
273
|
function Page() {
|
|
279
|
-
const state = useInfiniteQuery(
|
|
274
|
+
const state = useInfiniteQuery({
|
|
275
|
+
queryKey: key,
|
|
276
|
+
queryFn: () => ({ count: 1 }),
|
|
280
277
|
select: (data) => ({
|
|
281
278
|
pages: data.pages.map((x) => `count: ${x.count}`),
|
|
282
279
|
pageParams: data.pageParams,
|
|
283
280
|
}),
|
|
281
|
+
getNextPageParam: () => undefined,
|
|
282
|
+
defaultPageParam: 0,
|
|
284
283
|
})
|
|
285
284
|
states.push(state)
|
|
286
285
|
|
|
@@ -306,11 +305,15 @@ describe('useInfiniteQuery', () => {
|
|
|
306
305
|
|
|
307
306
|
it('should be able to select a new result and not cause infinite renders', async () => {
|
|
308
307
|
const key = queryKey()
|
|
309
|
-
const states: UseInfiniteQueryResult<
|
|
308
|
+
const states: UseInfiniteQueryResult<
|
|
309
|
+
InfiniteData<{ count: number; id: number }>
|
|
310
|
+
>[] = []
|
|
310
311
|
let selectCalled = 0
|
|
311
312
|
|
|
312
313
|
function Page() {
|
|
313
|
-
const state = useInfiniteQuery(
|
|
314
|
+
const state = useInfiniteQuery({
|
|
315
|
+
queryKey: key,
|
|
316
|
+
queryFn: () => ({ count: 1 }),
|
|
314
317
|
select: React.useCallback((data: InfiniteData<{ count: number }>) => {
|
|
315
318
|
selectCalled++
|
|
316
319
|
return {
|
|
@@ -318,6 +321,8 @@ describe('useInfiniteQuery', () => {
|
|
|
318
321
|
pageParams: data.pageParams,
|
|
319
322
|
}
|
|
320
323
|
}, []),
|
|
324
|
+
getNextPageParam: () => undefined,
|
|
325
|
+
defaultPageParam: 0,
|
|
321
326
|
})
|
|
322
327
|
states.push(state)
|
|
323
328
|
|
|
@@ -350,31 +355,29 @@ describe('useInfiniteQuery', () => {
|
|
|
350
355
|
|
|
351
356
|
it('should be able to reverse the data', async () => {
|
|
352
357
|
const key = queryKey()
|
|
353
|
-
const states: UseInfiniteQueryResult<number
|
|
358
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
354
359
|
|
|
355
360
|
function Page() {
|
|
356
|
-
const state = useInfiniteQuery(
|
|
357
|
-
key,
|
|
358
|
-
async ({ pageParam
|
|
361
|
+
const state = useInfiniteQuery({
|
|
362
|
+
queryKey: key,
|
|
363
|
+
queryFn: async ({ pageParam }) => {
|
|
359
364
|
await sleep(10)
|
|
360
365
|
return Number(pageParam)
|
|
361
366
|
},
|
|
362
|
-
{
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
)
|
|
367
|
+
select: (data) => ({
|
|
368
|
+
pages: [...data.pages].reverse(),
|
|
369
|
+
pageParams: [...data.pageParams].reverse(),
|
|
370
|
+
}),
|
|
371
|
+
notifyOnChangeProps: 'all',
|
|
372
|
+
getNextPageParam: () => 1,
|
|
373
|
+
defaultPageParam: 0,
|
|
374
|
+
})
|
|
370
375
|
|
|
371
376
|
states.push(state)
|
|
372
377
|
|
|
373
378
|
return (
|
|
374
379
|
<div>
|
|
375
|
-
<button onClick={() => state.fetchNextPage(
|
|
376
|
-
fetchNextPage
|
|
377
|
-
</button>
|
|
380
|
+
<button onClick={() => state.fetchNextPage()}>fetchNextPage</button>
|
|
378
381
|
<div>data: {state.data?.pages.join(',') ?? 'null'}</div>
|
|
379
382
|
<div>isFetching: {state.isFetching}</div>
|
|
380
383
|
</div>
|
|
@@ -409,21 +412,21 @@ describe('useInfiniteQuery', () => {
|
|
|
409
412
|
|
|
410
413
|
it('should be able to fetch a previous page', async () => {
|
|
411
414
|
const key = queryKey()
|
|
412
|
-
const states: UseInfiniteQueryResult<number
|
|
415
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
413
416
|
|
|
414
417
|
function Page() {
|
|
415
418
|
const start = 10
|
|
416
|
-
const state = useInfiniteQuery(
|
|
417
|
-
key,
|
|
418
|
-
async ({ pageParam
|
|
419
|
+
const state = useInfiniteQuery({
|
|
420
|
+
queryKey: key,
|
|
421
|
+
queryFn: async ({ pageParam }) => {
|
|
419
422
|
await sleep(10)
|
|
420
423
|
return Number(pageParam)
|
|
421
424
|
},
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
)
|
|
425
|
+
defaultPageParam: start,
|
|
426
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
427
|
+
getPreviousPageParam: (firstPage) => firstPage - 1,
|
|
428
|
+
notifyOnChangeProps: 'all',
|
|
429
|
+
})
|
|
427
430
|
|
|
428
431
|
states.push(state)
|
|
429
432
|
|
|
@@ -454,8 +457,8 @@ describe('useInfiniteQuery', () => {
|
|
|
454
457
|
expect(states.length).toBe(4)
|
|
455
458
|
expect(states[0]).toMatchObject({
|
|
456
459
|
data: undefined,
|
|
457
|
-
hasNextPage:
|
|
458
|
-
hasPreviousPage:
|
|
460
|
+
hasNextPage: false,
|
|
461
|
+
hasPreviousPage: false,
|
|
459
462
|
isFetching: true,
|
|
460
463
|
isFetchingNextPage: false,
|
|
461
464
|
isFetchingPreviousPage: false,
|
|
@@ -463,7 +466,7 @@ describe('useInfiniteQuery', () => {
|
|
|
463
466
|
})
|
|
464
467
|
expect(states[1]).toMatchObject({
|
|
465
468
|
data: { pages: [10] },
|
|
466
|
-
hasNextPage:
|
|
469
|
+
hasNextPage: true,
|
|
467
470
|
hasPreviousPage: true,
|
|
468
471
|
isFetching: false,
|
|
469
472
|
isFetchingNextPage: false,
|
|
@@ -472,7 +475,7 @@ describe('useInfiniteQuery', () => {
|
|
|
472
475
|
})
|
|
473
476
|
expect(states[2]).toMatchObject({
|
|
474
477
|
data: { pages: [10] },
|
|
475
|
-
hasNextPage:
|
|
478
|
+
hasNextPage: true,
|
|
476
479
|
hasPreviousPage: true,
|
|
477
480
|
isFetching: true,
|
|
478
481
|
isFetchingNextPage: false,
|
|
@@ -481,7 +484,7 @@ describe('useInfiniteQuery', () => {
|
|
|
481
484
|
})
|
|
482
485
|
expect(states[3]).toMatchObject({
|
|
483
486
|
data: { pages: [9, 10] },
|
|
484
|
-
hasNextPage:
|
|
487
|
+
hasNextPage: true,
|
|
485
488
|
hasPreviousPage: true,
|
|
486
489
|
isFetching: false,
|
|
487
490
|
isFetchingNextPage: false,
|
|
@@ -490,127 +493,22 @@ describe('useInfiniteQuery', () => {
|
|
|
490
493
|
})
|
|
491
494
|
})
|
|
492
495
|
|
|
493
|
-
it('should be able to refetch when providing page params manually', async () => {
|
|
494
|
-
const key = queryKey()
|
|
495
|
-
const states: UseInfiniteQueryResult<number>[] = []
|
|
496
|
-
|
|
497
|
-
function Page() {
|
|
498
|
-
const state = useInfiniteQuery(key, async ({ pageParam = 10 }) => {
|
|
499
|
-
await sleep(10)
|
|
500
|
-
return Number(pageParam)
|
|
501
|
-
})
|
|
502
|
-
|
|
503
|
-
states.push(state)
|
|
504
|
-
|
|
505
|
-
return (
|
|
506
|
-
<div>
|
|
507
|
-
<button onClick={() => state.fetchNextPage({ pageParam: 11 })}>
|
|
508
|
-
fetchNextPage
|
|
509
|
-
</button>
|
|
510
|
-
<button onClick={() => state.fetchPreviousPage({ pageParam: 9 })}>
|
|
511
|
-
fetchPreviousPage
|
|
512
|
-
</button>
|
|
513
|
-
<button onClick={() => state.refetch()}>refetch</button>
|
|
514
|
-
<div>data: {state.data?.pages.join(',') ?? 'null'}</div>
|
|
515
|
-
<div>isFetching: {String(state.isFetching)}</div>
|
|
516
|
-
</div>
|
|
517
|
-
)
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
const rendered = renderWithClient(queryClient, <Page />)
|
|
521
|
-
|
|
522
|
-
await waitFor(() => rendered.getByText('data: 10'))
|
|
523
|
-
fireEvent.click(rendered.getByRole('button', { name: /fetchNextPage/i }))
|
|
524
|
-
|
|
525
|
-
await waitFor(() => rendered.getByText('data: 10,11'))
|
|
526
|
-
fireEvent.click(
|
|
527
|
-
rendered.getByRole('button', { name: /fetchPreviousPage/i }),
|
|
528
|
-
)
|
|
529
|
-
await waitFor(() => rendered.getByText('data: 9,10,11'))
|
|
530
|
-
fireEvent.click(rendered.getByRole('button', { name: /refetch/i }))
|
|
531
|
-
|
|
532
|
-
await waitFor(() => rendered.getByText('isFetching: false'))
|
|
533
|
-
await waitFor(() => expect(states.length).toBe(8))
|
|
534
|
-
|
|
535
|
-
// Initial fetch
|
|
536
|
-
expect(states[0]).toMatchObject({
|
|
537
|
-
data: undefined,
|
|
538
|
-
isFetching: true,
|
|
539
|
-
isFetchingNextPage: false,
|
|
540
|
-
isRefetching: false,
|
|
541
|
-
})
|
|
542
|
-
// Initial fetch done
|
|
543
|
-
expect(states[1]).toMatchObject({
|
|
544
|
-
data: { pages: [10] },
|
|
545
|
-
isFetching: false,
|
|
546
|
-
isFetchingNextPage: false,
|
|
547
|
-
isRefetching: false,
|
|
548
|
-
})
|
|
549
|
-
// Fetch next page
|
|
550
|
-
expect(states[2]).toMatchObject({
|
|
551
|
-
data: { pages: [10] },
|
|
552
|
-
isFetching: true,
|
|
553
|
-
isFetchingNextPage: true,
|
|
554
|
-
isRefetching: false,
|
|
555
|
-
})
|
|
556
|
-
// Fetch next page done
|
|
557
|
-
expect(states[3]).toMatchObject({
|
|
558
|
-
data: { pages: [10, 11] },
|
|
559
|
-
isFetching: false,
|
|
560
|
-
isFetchingNextPage: false,
|
|
561
|
-
isRefetching: false,
|
|
562
|
-
})
|
|
563
|
-
// Fetch previous page
|
|
564
|
-
expect(states[4]).toMatchObject({
|
|
565
|
-
data: { pages: [10, 11] },
|
|
566
|
-
isFetching: true,
|
|
567
|
-
isFetchingNextPage: false,
|
|
568
|
-
isFetchingPreviousPage: true,
|
|
569
|
-
isRefetching: false,
|
|
570
|
-
})
|
|
571
|
-
// Fetch previous page done
|
|
572
|
-
expect(states[5]).toMatchObject({
|
|
573
|
-
data: { pages: [9, 10, 11] },
|
|
574
|
-
isFetching: false,
|
|
575
|
-
isFetchingNextPage: false,
|
|
576
|
-
isFetchingPreviousPage: false,
|
|
577
|
-
isRefetching: false,
|
|
578
|
-
})
|
|
579
|
-
// Refetch
|
|
580
|
-
expect(states[6]).toMatchObject({
|
|
581
|
-
data: { pages: [9, 10, 11] },
|
|
582
|
-
isFetching: true,
|
|
583
|
-
isFetchingNextPage: false,
|
|
584
|
-
isFetchingPreviousPage: false,
|
|
585
|
-
isRefetching: true,
|
|
586
|
-
})
|
|
587
|
-
// Refetch done
|
|
588
|
-
expect(states[7]).toMatchObject({
|
|
589
|
-
data: { pages: [9, 10, 11] },
|
|
590
|
-
isFetching: false,
|
|
591
|
-
isFetchingNextPage: false,
|
|
592
|
-
isFetchingPreviousPage: false,
|
|
593
|
-
isRefetching: false,
|
|
594
|
-
})
|
|
595
|
-
})
|
|
596
|
-
|
|
597
496
|
it('should be able to refetch when providing page params automatically', async () => {
|
|
598
497
|
const key = queryKey()
|
|
599
|
-
const states: UseInfiniteQueryResult<number
|
|
498
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
600
499
|
|
|
601
500
|
function Page() {
|
|
602
|
-
const state = useInfiniteQuery(
|
|
603
|
-
key,
|
|
604
|
-
async ({ pageParam
|
|
501
|
+
const state = useInfiniteQuery({
|
|
502
|
+
queryKey: key,
|
|
503
|
+
queryFn: async ({ pageParam }) => {
|
|
605
504
|
await sleep(10)
|
|
606
505
|
return Number(pageParam)
|
|
607
506
|
},
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
)
|
|
507
|
+
defaultPageParam: 10,
|
|
508
|
+
getPreviousPageParam: (firstPage) => firstPage - 1,
|
|
509
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
510
|
+
notifyOnChangeProps: 'all',
|
|
511
|
+
})
|
|
614
512
|
|
|
615
513
|
states.push(state)
|
|
616
514
|
|
|
@@ -704,112 +602,22 @@ describe('useInfiniteQuery', () => {
|
|
|
704
602
|
})
|
|
705
603
|
})
|
|
706
604
|
|
|
707
|
-
it('should be able to refetch only specific pages when refetchPages is provided', async () => {
|
|
708
|
-
const key = queryKey()
|
|
709
|
-
const states: UseInfiniteQueryResult<number>[] = []
|
|
710
|
-
|
|
711
|
-
function Page() {
|
|
712
|
-
const multiplier = React.useRef(1)
|
|
713
|
-
const state = useInfiniteQuery(
|
|
714
|
-
key,
|
|
715
|
-
async ({ pageParam = 10 }) => {
|
|
716
|
-
await sleep(10)
|
|
717
|
-
return Number(pageParam) * multiplier.current
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
getNextPageParam: (lastPage) => lastPage + 1,
|
|
721
|
-
notifyOnChangeProps: 'all',
|
|
722
|
-
},
|
|
723
|
-
)
|
|
724
|
-
|
|
725
|
-
states.push(state)
|
|
726
|
-
|
|
727
|
-
return (
|
|
728
|
-
<div>
|
|
729
|
-
<button onClick={() => state.fetchNextPage()}>fetchNextPage</button>
|
|
730
|
-
<button
|
|
731
|
-
onClick={() => {
|
|
732
|
-
multiplier.current = 2
|
|
733
|
-
state.refetch({
|
|
734
|
-
refetchPage: (_, index) => index === 0,
|
|
735
|
-
})
|
|
736
|
-
}}
|
|
737
|
-
>
|
|
738
|
-
refetchPage
|
|
739
|
-
</button>
|
|
740
|
-
<div>data: {state.data?.pages.join(',') ?? 'null'}</div>
|
|
741
|
-
<div>isFetching: {String(state.isFetching)}</div>
|
|
742
|
-
</div>
|
|
743
|
-
)
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
const rendered = renderWithClient(queryClient, <Page />)
|
|
747
|
-
|
|
748
|
-
await waitFor(() => rendered.getByText('data: 10'))
|
|
749
|
-
fireEvent.click(rendered.getByRole('button', { name: /fetchNextPage/i }))
|
|
750
|
-
|
|
751
|
-
await waitFor(() => rendered.getByText('data: 10,11'))
|
|
752
|
-
fireEvent.click(rendered.getByRole('button', { name: /refetchPage/i }))
|
|
753
|
-
|
|
754
|
-
await waitFor(() => rendered.getByText('data: 20,11'))
|
|
755
|
-
await waitFor(() => rendered.getByText('isFetching: false'))
|
|
756
|
-
await waitFor(() => expect(states.length).toBe(6))
|
|
757
|
-
|
|
758
|
-
// Initial fetch
|
|
759
|
-
expect(states[0]).toMatchObject({
|
|
760
|
-
data: undefined,
|
|
761
|
-
isFetching: true,
|
|
762
|
-
isFetchingNextPage: false,
|
|
763
|
-
})
|
|
764
|
-
// Initial fetch done
|
|
765
|
-
expect(states[1]).toMatchObject({
|
|
766
|
-
data: { pages: [10] },
|
|
767
|
-
isFetching: false,
|
|
768
|
-
isFetchingNextPage: false,
|
|
769
|
-
})
|
|
770
|
-
// Fetch next page
|
|
771
|
-
expect(states[2]).toMatchObject({
|
|
772
|
-
data: { pages: [10] },
|
|
773
|
-
isFetching: true,
|
|
774
|
-
isFetchingNextPage: true,
|
|
775
|
-
})
|
|
776
|
-
// Fetch next page done
|
|
777
|
-
expect(states[3]).toMatchObject({
|
|
778
|
-
data: { pages: [10, 11] },
|
|
779
|
-
isFetching: false,
|
|
780
|
-
isFetchingNextPage: false,
|
|
781
|
-
})
|
|
782
|
-
// Refetch
|
|
783
|
-
expect(states[4]).toMatchObject({
|
|
784
|
-
data: { pages: [10, 11] },
|
|
785
|
-
isFetching: true,
|
|
786
|
-
isFetchingNextPage: false,
|
|
787
|
-
})
|
|
788
|
-
// Refetch done, only page one has been refetched and multiplied
|
|
789
|
-
expect(states[5]).toMatchObject({
|
|
790
|
-
data: { pages: [20, 11] },
|
|
791
|
-
isFetching: false,
|
|
792
|
-
isFetchingNextPage: false,
|
|
793
|
-
})
|
|
794
|
-
})
|
|
795
|
-
|
|
796
605
|
it('should silently cancel any ongoing fetch when fetching more', async () => {
|
|
797
606
|
const key = queryKey()
|
|
798
|
-
const states: UseInfiniteQueryResult<number
|
|
607
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
799
608
|
|
|
800
609
|
function Page() {
|
|
801
610
|
const start = 10
|
|
802
|
-
const state = useInfiniteQuery(
|
|
803
|
-
key,
|
|
804
|
-
async ({ pageParam
|
|
611
|
+
const state = useInfiniteQuery({
|
|
612
|
+
queryKey: key,
|
|
613
|
+
queryFn: async ({ pageParam }) => {
|
|
805
614
|
await sleep(50)
|
|
806
615
|
return Number(pageParam)
|
|
807
616
|
},
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
)
|
|
617
|
+
defaultPageParam: start,
|
|
618
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
619
|
+
notifyOnChangeProps: 'all',
|
|
620
|
+
})
|
|
813
621
|
|
|
814
622
|
states.push(state)
|
|
815
623
|
|
|
@@ -833,7 +641,7 @@ describe('useInfiniteQuery', () => {
|
|
|
833
641
|
|
|
834
642
|
expect(states.length).toBe(5)
|
|
835
643
|
expect(states[0]).toMatchObject({
|
|
836
|
-
hasNextPage:
|
|
644
|
+
hasNextPage: false,
|
|
837
645
|
data: undefined,
|
|
838
646
|
isFetching: true,
|
|
839
647
|
isFetchingNextPage: false,
|
|
@@ -877,21 +685,22 @@ describe('useInfiniteQuery', () => {
|
|
|
877
685
|
const fetchPage = jest.fn<
|
|
878
686
|
Promise<number>,
|
|
879
687
|
[QueryFunctionContext<typeof key, number>]
|
|
880
|
-
>(async ({ pageParam
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
signal.addEventListener('abort', abortListener)
|
|
888
|
-
}
|
|
688
|
+
>(async ({ pageParam, signal }) => {
|
|
689
|
+
const onAbort = jest.fn()
|
|
690
|
+
const abortListener = jest.fn()
|
|
691
|
+
onAborts.push(onAbort)
|
|
692
|
+
abortListeners.push(abortListener)
|
|
693
|
+
signal.onabort = onAbort
|
|
694
|
+
signal.addEventListener('abort', abortListener)
|
|
889
695
|
await sleep(50)
|
|
890
696
|
return Number(pageParam)
|
|
891
697
|
})
|
|
892
698
|
|
|
893
699
|
function Page() {
|
|
894
|
-
const { fetchNextPage } = useInfiniteQuery(
|
|
700
|
+
const { fetchNextPage } = useInfiniteQuery({
|
|
701
|
+
queryKey: key,
|
|
702
|
+
queryFn: fetchPage,
|
|
703
|
+
defaultPageParam: start,
|
|
895
704
|
getNextPageParam: (lastPage) => lastPage + 1,
|
|
896
705
|
})
|
|
897
706
|
|
|
@@ -918,10 +727,10 @@ describe('useInfiniteQuery', () => {
|
|
|
918
727
|
|
|
919
728
|
let callIndex = 0
|
|
920
729
|
const firstCtx = fetchPage.mock.calls[callIndex]![0]
|
|
921
|
-
expect(firstCtx.pageParam).
|
|
730
|
+
expect(firstCtx.pageParam).toEqual(start)
|
|
922
731
|
expect(firstCtx.queryKey).toEqual(key)
|
|
923
732
|
expect(firstCtx.signal).toBeInstanceOf(AbortSignal)
|
|
924
|
-
expect(firstCtx.signal
|
|
733
|
+
expect(firstCtx.signal.aborted).toBe(false)
|
|
925
734
|
expect(onAborts[callIndex]).not.toHaveBeenCalled()
|
|
926
735
|
expect(abortListeners[callIndex]).not.toHaveBeenCalled()
|
|
927
736
|
|
|
@@ -930,7 +739,7 @@ describe('useInfiniteQuery', () => {
|
|
|
930
739
|
expect(secondCtx.pageParam).toBe(11)
|
|
931
740
|
expect(secondCtx.queryKey).toEqual(key)
|
|
932
741
|
expect(secondCtx.signal).toBeInstanceOf(AbortSignal)
|
|
933
|
-
expect(secondCtx.signal
|
|
742
|
+
expect(secondCtx.signal.aborted).toBe(true)
|
|
934
743
|
expect(onAborts[callIndex]).toHaveBeenCalledTimes(1)
|
|
935
744
|
expect(abortListeners[callIndex]).toHaveBeenCalledTimes(1)
|
|
936
745
|
|
|
@@ -939,7 +748,7 @@ describe('useInfiniteQuery', () => {
|
|
|
939
748
|
expect(thirdCtx.pageParam).toBe(11)
|
|
940
749
|
expect(thirdCtx.queryKey).toEqual(key)
|
|
941
750
|
expect(thirdCtx.signal).toBeInstanceOf(AbortSignal)
|
|
942
|
-
expect(thirdCtx.signal
|
|
751
|
+
expect(thirdCtx.signal.aborted).toBe(false)
|
|
943
752
|
expect(onAborts[callIndex]).not.toHaveBeenCalled()
|
|
944
753
|
expect(abortListeners[callIndex]).not.toHaveBeenCalled()
|
|
945
754
|
})
|
|
@@ -952,21 +761,23 @@ describe('useInfiniteQuery', () => {
|
|
|
952
761
|
const fetchPage = jest.fn<
|
|
953
762
|
Promise<number>,
|
|
954
763
|
[QueryFunctionContext<typeof key, number>]
|
|
955
|
-
>(async ({ pageParam
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
}
|
|
764
|
+
>(async ({ pageParam, signal }) => {
|
|
765
|
+
const onAbort = jest.fn()
|
|
766
|
+
const abortListener = jest.fn()
|
|
767
|
+
onAborts.push(onAbort)
|
|
768
|
+
abortListeners.push(abortListener)
|
|
769
|
+
signal.onabort = onAbort
|
|
770
|
+
signal.addEventListener('abort', abortListener)
|
|
771
|
+
|
|
964
772
|
await sleep(50)
|
|
965
773
|
return Number(pageParam)
|
|
966
774
|
})
|
|
967
775
|
|
|
968
776
|
function Page() {
|
|
969
|
-
const { fetchNextPage } = useInfiniteQuery(
|
|
777
|
+
const { fetchNextPage } = useInfiniteQuery({
|
|
778
|
+
queryKey: key,
|
|
779
|
+
queryFn: fetchPage,
|
|
780
|
+
defaultPageParam: start,
|
|
970
781
|
getNextPageParam: (lastPage) => lastPage + 1,
|
|
971
782
|
})
|
|
972
783
|
|
|
@@ -993,10 +804,10 @@ describe('useInfiniteQuery', () => {
|
|
|
993
804
|
|
|
994
805
|
let callIndex = 0
|
|
995
806
|
const firstCtx = fetchPage.mock.calls[callIndex]![0]
|
|
996
|
-
expect(firstCtx.pageParam).
|
|
807
|
+
expect(firstCtx.pageParam).toEqual(start)
|
|
997
808
|
expect(firstCtx.queryKey).toEqual(key)
|
|
998
809
|
expect(firstCtx.signal).toBeInstanceOf(AbortSignal)
|
|
999
|
-
expect(firstCtx.signal
|
|
810
|
+
expect(firstCtx.signal.aborted).toBe(false)
|
|
1000
811
|
expect(onAborts[callIndex]).not.toHaveBeenCalled()
|
|
1001
812
|
expect(abortListeners[callIndex]).not.toHaveBeenCalled()
|
|
1002
813
|
|
|
@@ -1005,28 +816,27 @@ describe('useInfiniteQuery', () => {
|
|
|
1005
816
|
expect(secondCtx.pageParam).toBe(11)
|
|
1006
817
|
expect(secondCtx.queryKey).toEqual(key)
|
|
1007
818
|
expect(secondCtx.signal).toBeInstanceOf(AbortSignal)
|
|
1008
|
-
expect(secondCtx.signal
|
|
819
|
+
expect(secondCtx.signal.aborted).toBe(false)
|
|
1009
820
|
expect(onAborts[callIndex]).not.toHaveBeenCalled()
|
|
1010
821
|
expect(abortListeners[callIndex]).not.toHaveBeenCalled()
|
|
1011
822
|
})
|
|
1012
823
|
|
|
1013
824
|
it('should keep fetching first page when not loaded yet and triggering fetch more', async () => {
|
|
1014
825
|
const key = queryKey()
|
|
1015
|
-
const states: UseInfiniteQueryResult<number
|
|
826
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
1016
827
|
|
|
1017
828
|
function Page() {
|
|
1018
829
|
const start = 10
|
|
1019
|
-
const state = useInfiniteQuery(
|
|
1020
|
-
key,
|
|
1021
|
-
async ({ pageParam
|
|
830
|
+
const state = useInfiniteQuery({
|
|
831
|
+
queryKey: key,
|
|
832
|
+
queryFn: async ({ pageParam }) => {
|
|
1022
833
|
await sleep(50)
|
|
1023
834
|
return Number(pageParam)
|
|
1024
835
|
},
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
)
|
|
836
|
+
defaultPageParam: start,
|
|
837
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
838
|
+
notifyOnChangeProps: 'all',
|
|
839
|
+
})
|
|
1030
840
|
|
|
1031
841
|
states.push(state)
|
|
1032
842
|
|
|
@@ -1047,7 +857,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1047
857
|
|
|
1048
858
|
expect(states.length).toBe(2)
|
|
1049
859
|
expect(states[0]).toMatchObject({
|
|
1050
|
-
hasNextPage:
|
|
860
|
+
hasNextPage: false,
|
|
1051
861
|
data: undefined,
|
|
1052
862
|
isFetching: true,
|
|
1053
863
|
isFetchingNextPage: false,
|
|
@@ -1069,20 +879,19 @@ describe('useInfiniteQuery', () => {
|
|
|
1069
879
|
const initialData = { pages: [1, 2, 3, 4], pageParams: [0, 1, 2, 3] }
|
|
1070
880
|
|
|
1071
881
|
function List() {
|
|
1072
|
-
useInfiniteQuery(
|
|
1073
|
-
key,
|
|
1074
|
-
async ({ pageParam
|
|
882
|
+
useInfiniteQuery({
|
|
883
|
+
queryKey: key,
|
|
884
|
+
queryFn: async ({ pageParam, signal: _ }) => {
|
|
1075
885
|
fetches++
|
|
1076
886
|
await sleep(50)
|
|
1077
887
|
return Number(pageParam) * 10
|
|
1078
888
|
},
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
},
|
|
889
|
+
initialData,
|
|
890
|
+
defaultPageParam: 0,
|
|
891
|
+
getNextPageParam: (_, allPages) => {
|
|
892
|
+
return allPages.length === 4 ? undefined : allPages.length
|
|
1084
893
|
},
|
|
1085
|
-
)
|
|
894
|
+
})
|
|
1086
895
|
|
|
1087
896
|
return null
|
|
1088
897
|
}
|
|
@@ -1111,100 +920,23 @@ describe('useInfiniteQuery', () => {
|
|
|
1111
920
|
})
|
|
1112
921
|
})
|
|
1113
922
|
|
|
1114
|
-
it('should be able to override the cursor in the fetchNextPage callback', async () => {
|
|
1115
|
-
const key = queryKey()
|
|
1116
|
-
const states: UseInfiniteQueryResult<number>[] = []
|
|
1117
|
-
|
|
1118
|
-
function Page() {
|
|
1119
|
-
const state = useInfiniteQuery(
|
|
1120
|
-
key,
|
|
1121
|
-
async ({ pageParam = 0 }) => {
|
|
1122
|
-
await sleep(10)
|
|
1123
|
-
return Number(pageParam)
|
|
1124
|
-
},
|
|
1125
|
-
{
|
|
1126
|
-
getNextPageParam: (lastPage) => lastPage + 1,
|
|
1127
|
-
notifyOnChangeProps: 'all',
|
|
1128
|
-
},
|
|
1129
|
-
)
|
|
1130
|
-
|
|
1131
|
-
states.push(state)
|
|
1132
|
-
|
|
1133
|
-
return (
|
|
1134
|
-
<div>
|
|
1135
|
-
<div>page0: {state.data?.pages[0]}</div>
|
|
1136
|
-
<div>page1: {state.data?.pages[1]}</div>
|
|
1137
|
-
<button onClick={() => state.fetchNextPage({ pageParam: 5 })}>
|
|
1138
|
-
Fetch next page
|
|
1139
|
-
</button>
|
|
1140
|
-
</div>
|
|
1141
|
-
)
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
const rendered = renderWithClient(queryClient, <Page />)
|
|
1145
|
-
|
|
1146
|
-
await waitFor(() => {
|
|
1147
|
-
rendered.getByText('page0: 0')
|
|
1148
|
-
})
|
|
1149
|
-
|
|
1150
|
-
fireEvent.click(rendered.getByRole('button', { name: 'Fetch next page' }))
|
|
1151
|
-
|
|
1152
|
-
await waitFor(() => {
|
|
1153
|
-
rendered.getByText('page1: 5')
|
|
1154
|
-
})
|
|
1155
|
-
|
|
1156
|
-
// make sure no additional renders are happening after fetching next page
|
|
1157
|
-
await sleep(20)
|
|
1158
|
-
|
|
1159
|
-
expect(states.length).toBe(4)
|
|
1160
|
-
expect(states[0]).toMatchObject({
|
|
1161
|
-
hasNextPage: undefined,
|
|
1162
|
-
data: undefined,
|
|
1163
|
-
isFetching: true,
|
|
1164
|
-
isFetchingNextPage: false,
|
|
1165
|
-
isSuccess: false,
|
|
1166
|
-
})
|
|
1167
|
-
expect(states[1]).toMatchObject({
|
|
1168
|
-
hasNextPage: true,
|
|
1169
|
-
data: { pages: [0] },
|
|
1170
|
-
isFetching: false,
|
|
1171
|
-
isFetchingNextPage: false,
|
|
1172
|
-
isSuccess: true,
|
|
1173
|
-
})
|
|
1174
|
-
expect(states[2]).toMatchObject({
|
|
1175
|
-
hasNextPage: true,
|
|
1176
|
-
data: { pages: [0] },
|
|
1177
|
-
isFetching: true,
|
|
1178
|
-
isFetchingNextPage: true,
|
|
1179
|
-
isSuccess: true,
|
|
1180
|
-
})
|
|
1181
|
-
expect(states[3]).toMatchObject({
|
|
1182
|
-
hasNextPage: true,
|
|
1183
|
-
data: { pages: [0, 5] },
|
|
1184
|
-
isFetching: false,
|
|
1185
|
-
isFetchingNextPage: false,
|
|
1186
|
-
isSuccess: true,
|
|
1187
|
-
})
|
|
1188
|
-
})
|
|
1189
|
-
|
|
1190
923
|
it('should be able to set new pages with the query client', async () => {
|
|
1191
924
|
const key = queryKey()
|
|
1192
|
-
const states: UseInfiniteQueryResult<number
|
|
925
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
1193
926
|
|
|
1194
927
|
function Page() {
|
|
1195
928
|
const [firstPage, setFirstPage] = React.useState(0)
|
|
1196
929
|
|
|
1197
|
-
const state = useInfiniteQuery(
|
|
1198
|
-
key,
|
|
1199
|
-
async ({ pageParam
|
|
930
|
+
const state = useInfiniteQuery({
|
|
931
|
+
queryKey: key,
|
|
932
|
+
queryFn: async ({ pageParam }) => {
|
|
1200
933
|
await sleep(10)
|
|
1201
934
|
return Number(pageParam)
|
|
1202
935
|
},
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
)
|
|
936
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
937
|
+
defaultPageParam: firstPage,
|
|
938
|
+
notifyOnChangeProps: 'all',
|
|
939
|
+
})
|
|
1208
940
|
|
|
1209
941
|
states.push(state)
|
|
1210
942
|
|
|
@@ -1230,7 +962,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1230
962
|
|
|
1231
963
|
expect(states.length).toBe(5)
|
|
1232
964
|
expect(states[0]).toMatchObject({
|
|
1233
|
-
hasNextPage:
|
|
965
|
+
hasNextPage: false,
|
|
1234
966
|
data: undefined,
|
|
1235
967
|
isFetching: true,
|
|
1236
968
|
isFetchingNextPage: false,
|
|
@@ -1272,21 +1004,20 @@ describe('useInfiniteQuery', () => {
|
|
|
1272
1004
|
|
|
1273
1005
|
it('should only refetch the first page when initialData is provided', async () => {
|
|
1274
1006
|
const key = queryKey()
|
|
1275
|
-
const states: UseInfiniteQueryResult<number
|
|
1007
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
1276
1008
|
|
|
1277
1009
|
function Page() {
|
|
1278
|
-
const state = useInfiniteQuery(
|
|
1279
|
-
key,
|
|
1280
|
-
async ({ pageParam }): Promise<number> => {
|
|
1010
|
+
const state = useInfiniteQuery({
|
|
1011
|
+
queryKey: key,
|
|
1012
|
+
queryFn: async ({ pageParam }): Promise<number> => {
|
|
1281
1013
|
await sleep(10)
|
|
1282
1014
|
return pageParam
|
|
1283
1015
|
},
|
|
1284
|
-
{
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
)
|
|
1016
|
+
initialData: { pages: [1], pageParams: [1] },
|
|
1017
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
1018
|
+
defaultPageParam: 0,
|
|
1019
|
+
notifyOnChangeProps: 'all',
|
|
1020
|
+
})
|
|
1290
1021
|
|
|
1291
1022
|
states.push(state)
|
|
1292
1023
|
|
|
@@ -1338,16 +1069,15 @@ describe('useInfiniteQuery', () => {
|
|
|
1338
1069
|
|
|
1339
1070
|
it('should set hasNextPage to false if getNextPageParam returns undefined', async () => {
|
|
1340
1071
|
const key = queryKey()
|
|
1341
|
-
const states: UseInfiniteQueryResult<number
|
|
1072
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
1342
1073
|
|
|
1343
1074
|
function Page() {
|
|
1344
|
-
const state = useInfiniteQuery(
|
|
1345
|
-
key,
|
|
1346
|
-
({ pageParam
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
)
|
|
1075
|
+
const state = useInfiniteQuery({
|
|
1076
|
+
queryKey: key,
|
|
1077
|
+
queryFn: ({ pageParam }) => Number(pageParam),
|
|
1078
|
+
getNextPageParam: () => undefined,
|
|
1079
|
+
defaultPageParam: 1,
|
|
1080
|
+
})
|
|
1351
1081
|
|
|
1352
1082
|
states.push(state)
|
|
1353
1083
|
|
|
@@ -1361,7 +1091,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1361
1091
|
expect(states.length).toBe(2)
|
|
1362
1092
|
expect(states[0]).toMatchObject({
|
|
1363
1093
|
data: undefined,
|
|
1364
|
-
hasNextPage:
|
|
1094
|
+
hasNextPage: false,
|
|
1365
1095
|
isFetching: true,
|
|
1366
1096
|
isFetchingNextPage: false,
|
|
1367
1097
|
isSuccess: false,
|
|
@@ -1377,17 +1107,16 @@ describe('useInfiniteQuery', () => {
|
|
|
1377
1107
|
|
|
1378
1108
|
it('should compute hasNextPage correctly using initialData', async () => {
|
|
1379
1109
|
const key = queryKey()
|
|
1380
|
-
const states: UseInfiniteQueryResult<number
|
|
1110
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
1381
1111
|
|
|
1382
1112
|
function Page() {
|
|
1383
|
-
const state = useInfiniteQuery(
|
|
1384
|
-
key,
|
|
1385
|
-
({ pageParam
|
|
1386
|
-
{
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
)
|
|
1113
|
+
const state = useInfiniteQuery({
|
|
1114
|
+
queryKey: key,
|
|
1115
|
+
queryFn: ({ pageParam }): number => pageParam,
|
|
1116
|
+
initialData: { pages: [10], pageParams: [10] },
|
|
1117
|
+
getNextPageParam: (lastPage) => (lastPage === 10 ? 11 : undefined),
|
|
1118
|
+
defaultPageParam: 10,
|
|
1119
|
+
})
|
|
1391
1120
|
|
|
1392
1121
|
states.push(state)
|
|
1393
1122
|
|
|
@@ -1417,17 +1146,16 @@ describe('useInfiniteQuery', () => {
|
|
|
1417
1146
|
|
|
1418
1147
|
it('should compute hasNextPage correctly for falsy getFetchMore return value using initialData', async () => {
|
|
1419
1148
|
const key = queryKey()
|
|
1420
|
-
const states: UseInfiniteQueryResult<number
|
|
1149
|
+
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
1421
1150
|
|
|
1422
1151
|
function Page() {
|
|
1423
|
-
const state = useInfiniteQuery(
|
|
1424
|
-
key,
|
|
1425
|
-
({ pageParam
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
)
|
|
1152
|
+
const state = useInfiniteQuery({
|
|
1153
|
+
queryKey: key,
|
|
1154
|
+
queryFn: ({ pageParam }): number => pageParam,
|
|
1155
|
+
defaultPageParam: 10,
|
|
1156
|
+
initialData: { pages: [10], pageParams: [10] },
|
|
1157
|
+
getNextPageParam: () => undefined,
|
|
1158
|
+
})
|
|
1431
1159
|
|
|
1432
1160
|
states.push(state)
|
|
1433
1161
|
|
|
@@ -1457,20 +1185,19 @@ describe('useInfiniteQuery', () => {
|
|
|
1457
1185
|
|
|
1458
1186
|
it('should not use selected data when computing hasNextPage', async () => {
|
|
1459
1187
|
const key = queryKey()
|
|
1460
|
-
const states: UseInfiniteQueryResult<string
|
|
1188
|
+
const states: UseInfiniteQueryResult<InfiniteData<string>>[] = []
|
|
1461
1189
|
|
|
1462
1190
|
function Page() {
|
|
1463
|
-
const state = useInfiniteQuery(
|
|
1464
|
-
key,
|
|
1465
|
-
({ pageParam
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
)
|
|
1191
|
+
const state = useInfiniteQuery({
|
|
1192
|
+
queryKey: key,
|
|
1193
|
+
queryFn: ({ pageParam }) => Number(pageParam),
|
|
1194
|
+
getNextPageParam: (lastPage) => (lastPage === 1 ? 2 : undefined),
|
|
1195
|
+
select: (data) => ({
|
|
1196
|
+
pages: data.pages.map((x) => x.toString()),
|
|
1197
|
+
pageParams: data.pageParams,
|
|
1198
|
+
}),
|
|
1199
|
+
defaultPageParam: 1,
|
|
1200
|
+
})
|
|
1474
1201
|
|
|
1475
1202
|
states.push(state)
|
|
1476
1203
|
|
|
@@ -1484,7 +1211,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1484
1211
|
expect(states.length).toBe(2)
|
|
1485
1212
|
expect(states[0]).toMatchObject({
|
|
1486
1213
|
data: undefined,
|
|
1487
|
-
hasNextPage:
|
|
1214
|
+
hasNextPage: false,
|
|
1488
1215
|
isFetching: true,
|
|
1489
1216
|
isFetchingNextPage: false,
|
|
1490
1217
|
isSuccess: false,
|
|
@@ -1525,19 +1252,18 @@ describe('useInfiniteQuery', () => {
|
|
|
1525
1252
|
fetchNextPage,
|
|
1526
1253
|
hasNextPage,
|
|
1527
1254
|
refetch,
|
|
1528
|
-
} = useInfiniteQuery
|
|
1529
|
-
key,
|
|
1530
|
-
({ pageParam
|
|
1255
|
+
} = useInfiniteQuery({
|
|
1256
|
+
queryKey: key,
|
|
1257
|
+
queryFn: ({ pageParam }) =>
|
|
1531
1258
|
fetchItemsWithLimit(pageParam, fetchCountRef.current++),
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
)
|
|
1259
|
+
defaultPageParam: 0,
|
|
1260
|
+
getNextPageParam: (lastPage) => lastPage.nextId,
|
|
1261
|
+
})
|
|
1536
1262
|
|
|
1537
1263
|
return (
|
|
1538
1264
|
<div>
|
|
1539
1265
|
<h1>Pagination</h1>
|
|
1540
|
-
{status === '
|
|
1266
|
+
{status === 'pending' ? (
|
|
1541
1267
|
'Loading...'
|
|
1542
1268
|
) : status === 'error' ? (
|
|
1543
1269
|
<span>Error: {error.message}</span>
|
|
@@ -1559,7 +1285,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1559
1285
|
<div>
|
|
1560
1286
|
<button
|
|
1561
1287
|
onClick={() => fetchNextPage()}
|
|
1562
|
-
disabled={!hasNextPage ||
|
|
1288
|
+
disabled={!hasNextPage || isFetchingNextPage}
|
|
1563
1289
|
>
|
|
1564
1290
|
{isFetchingNextPage
|
|
1565
1291
|
? 'Loading more...'
|
|
@@ -1574,7 +1300,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1574
1300
|
// makes an actual network request
|
|
1575
1301
|
// and calls invalidateQueries in an onSuccess
|
|
1576
1302
|
items.splice(4, 1)
|
|
1577
|
-
queryClient.invalidateQueries(key)
|
|
1303
|
+
queryClient.invalidateQueries({ queryKey: key })
|
|
1578
1304
|
}}
|
|
1579
1305
|
>
|
|
1580
1306
|
Remove item
|
|
@@ -1651,23 +1377,22 @@ describe('useInfiniteQuery', () => {
|
|
|
1651
1377
|
fetchNextPage,
|
|
1652
1378
|
hasNextPage,
|
|
1653
1379
|
refetch,
|
|
1654
|
-
} = useInfiniteQuery
|
|
1655
|
-
key,
|
|
1656
|
-
({ pageParam
|
|
1380
|
+
} = useInfiniteQuery({
|
|
1381
|
+
queryKey: key,
|
|
1382
|
+
queryFn: ({ pageParam }) =>
|
|
1657
1383
|
fetchItems(
|
|
1658
1384
|
pageParam,
|
|
1659
1385
|
fetchCountRef.current++,
|
|
1660
1386
|
pageParam === MAX || (pageParam === MAX - 1 && isRemovedLastPage),
|
|
1661
1387
|
),
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
)
|
|
1388
|
+
getNextPageParam: (lastPage) => lastPage.nextId,
|
|
1389
|
+
defaultPageParam: 0,
|
|
1390
|
+
})
|
|
1666
1391
|
|
|
1667
1392
|
return (
|
|
1668
1393
|
<div>
|
|
1669
1394
|
<h1>Pagination</h1>
|
|
1670
|
-
{status === '
|
|
1395
|
+
{status === 'pending' ? (
|
|
1671
1396
|
'Loading...'
|
|
1672
1397
|
) : status === 'error' ? (
|
|
1673
1398
|
<span>Error: {error.message}</span>
|
|
@@ -1689,7 +1414,7 @@ describe('useInfiniteQuery', () => {
|
|
|
1689
1414
|
<div>
|
|
1690
1415
|
<button
|
|
1691
1416
|
onClick={() => fetchNextPage()}
|
|
1692
|
-
disabled={!hasNextPage ||
|
|
1417
|
+
disabled={!hasNextPage || isFetchingNextPage}
|
|
1693
1418
|
>
|
|
1694
1419
|
{isFetchingNextPage
|
|
1695
1420
|
? 'Loading more...'
|
|
@@ -1779,7 +1504,12 @@ describe('useInfiniteQuery', () => {
|
|
|
1779
1504
|
}
|
|
1780
1505
|
|
|
1781
1506
|
function Inner() {
|
|
1782
|
-
const state = useInfiniteQuery(
|
|
1507
|
+
const state = useInfiniteQuery({
|
|
1508
|
+
queryKey: key,
|
|
1509
|
+
queryFn,
|
|
1510
|
+
getNextPageParam: () => undefined,
|
|
1511
|
+
defaultPageParam: 0,
|
|
1512
|
+
})
|
|
1783
1513
|
return (
|
|
1784
1514
|
<div>
|
|
1785
1515
|
<h1>Status: {state.status}</h1>
|
|
@@ -1809,4 +1539,29 @@ describe('useInfiniteQuery', () => {
|
|
|
1809
1539
|
|
|
1810
1540
|
expect(cancelFn).toHaveBeenCalled()
|
|
1811
1541
|
})
|
|
1542
|
+
|
|
1543
|
+
it('should use provided custom queryClient', async () => {
|
|
1544
|
+
const key = queryKey()
|
|
1545
|
+
const queryFn = async () => {
|
|
1546
|
+
return Promise.resolve('custom client')
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
function Page() {
|
|
1550
|
+
const { data } = useInfiniteQuery(
|
|
1551
|
+
{
|
|
1552
|
+
queryKey: key,
|
|
1553
|
+
queryFn,
|
|
1554
|
+
getNextPageParam: () => undefined,
|
|
1555
|
+
defaultPageParam: 0,
|
|
1556
|
+
},
|
|
1557
|
+
queryClient,
|
|
1558
|
+
)
|
|
1559
|
+
|
|
1560
|
+
return <div>data: {data?.pages[0]}</div>
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
const rendered = render(<Page></Page>)
|
|
1564
|
+
|
|
1565
|
+
await waitFor(() => rendered.getByText('data: custom client'))
|
|
1566
|
+
})
|
|
1812
1567
|
})
|