@tanstack/react-query 4.12.0 → 4.13.4
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/umd/index.development.js +25 -9
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/useInfiniteQuery.test.tsx +2 -0
- package/src/__tests__/useMutation.test.tsx +58 -1
- package/src/__tests__/useQuery.test.tsx +84 -33
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-query",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.13.4",
|
|
4
4
|
"description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"react-error-boundary": "^3.1.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@tanstack/query-core": "4.
|
|
49
|
+
"@tanstack/query-core": "4.13.4",
|
|
50
50
|
"use-sync-external-store": "^1.2.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
@@ -71,6 +71,7 @@ describe('useInfiniteQuery', () => {
|
|
|
71
71
|
error: null,
|
|
72
72
|
errorUpdatedAt: 0,
|
|
73
73
|
failureCount: 0,
|
|
74
|
+
failureReason: null,
|
|
74
75
|
errorUpdateCount: 0,
|
|
75
76
|
fetchNextPage: expect.any(Function),
|
|
76
77
|
fetchPreviousPage: expect.any(Function),
|
|
@@ -104,6 +105,7 @@ describe('useInfiniteQuery', () => {
|
|
|
104
105
|
error: null,
|
|
105
106
|
errorUpdatedAt: 0,
|
|
106
107
|
failureCount: 0,
|
|
108
|
+
failureReason: null,
|
|
107
109
|
errorUpdateCount: 0,
|
|
108
110
|
fetchNextPage: expect.any(Function),
|
|
109
111
|
fetchPreviousPage: expect.any(Function),
|
|
@@ -147,6 +147,57 @@ describe('useMutation', () => {
|
|
|
147
147
|
expect(onSettledMock).toHaveBeenCalledWith(3)
|
|
148
148
|
})
|
|
149
149
|
|
|
150
|
+
it('should set correct values for `failureReason` and `failureCount` on multiple mutate calls', async () => {
|
|
151
|
+
let count = 0
|
|
152
|
+
type Value = { count: number }
|
|
153
|
+
|
|
154
|
+
const mutateFn = jest.fn<Promise<Value>, [value: Value]>()
|
|
155
|
+
|
|
156
|
+
mutateFn.mockImplementationOnce(() => {
|
|
157
|
+
return Promise.reject('Error test Jonas')
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
mutateFn.mockImplementation(async (value) => {
|
|
161
|
+
await sleep(10)
|
|
162
|
+
return Promise.resolve(value)
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
function Page() {
|
|
166
|
+
const { mutate, failureCount, failureReason, data, status } = useMutation<
|
|
167
|
+
Value,
|
|
168
|
+
string,
|
|
169
|
+
Value
|
|
170
|
+
>(mutateFn)
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
<div>
|
|
174
|
+
<h1>Data {data?.count}</h1>
|
|
175
|
+
<h2>Status {status}</h2>
|
|
176
|
+
<h2>Failed {failureCount} times</h2>
|
|
177
|
+
<h2>Failed because {failureReason ?? 'null'}</h2>
|
|
178
|
+
<button onClick={() => mutate({ count: ++count })}>mutate</button>
|
|
179
|
+
</div>
|
|
180
|
+
)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
184
|
+
|
|
185
|
+
await waitFor(() => rendered.getByText('Data'))
|
|
186
|
+
|
|
187
|
+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
|
|
188
|
+
await waitFor(() => rendered.getByText('Data'))
|
|
189
|
+
await waitFor(() => rendered.getByText('Status error'))
|
|
190
|
+
await waitFor(() => rendered.getByText('Failed 1 times'))
|
|
191
|
+
await waitFor(() => rendered.getByText('Failed because Error test Jonas'))
|
|
192
|
+
|
|
193
|
+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
|
|
194
|
+
await waitFor(() => rendered.getByText('Status loading'))
|
|
195
|
+
await waitFor(() => rendered.getByText('Status success'))
|
|
196
|
+
await waitFor(() => rendered.getByText('Data 2'))
|
|
197
|
+
await waitFor(() => rendered.getByText('Failed 0 times'))
|
|
198
|
+
await waitFor(() => rendered.getByText('Failed because null'))
|
|
199
|
+
})
|
|
200
|
+
|
|
150
201
|
it('should be able to call `onError` and `onSettled` after each failed mutate', async () => {
|
|
151
202
|
const onErrorMock = jest.fn()
|
|
152
203
|
const onSettledMock = jest.fn()
|
|
@@ -581,21 +632,25 @@ describe('useMutation', () => {
|
|
|
581
632
|
isLoading: false,
|
|
582
633
|
isPaused: false,
|
|
583
634
|
failureCount: 0,
|
|
635
|
+
failureReason: null,
|
|
584
636
|
})
|
|
585
637
|
expect(states[1]).toMatchObject({
|
|
586
638
|
isLoading: true,
|
|
587
639
|
isPaused: false,
|
|
588
640
|
failureCount: 0,
|
|
641
|
+
failureReason: null,
|
|
589
642
|
})
|
|
590
643
|
expect(states[2]).toMatchObject({
|
|
591
644
|
isLoading: true,
|
|
592
645
|
isPaused: false,
|
|
593
646
|
failureCount: 1,
|
|
647
|
+
failureReason: 'oops',
|
|
594
648
|
})
|
|
595
649
|
expect(states[3]).toMatchObject({
|
|
596
650
|
isLoading: true,
|
|
597
651
|
isPaused: true,
|
|
598
652
|
failureCount: 1,
|
|
653
|
+
failureReason: 'oops',
|
|
599
654
|
})
|
|
600
655
|
|
|
601
656
|
onlineMock.mockReturnValue(true)
|
|
@@ -608,11 +663,13 @@ describe('useMutation', () => {
|
|
|
608
663
|
isLoading: true,
|
|
609
664
|
isPaused: false,
|
|
610
665
|
failureCount: 1,
|
|
666
|
+
failureReason: 'oops',
|
|
611
667
|
})
|
|
612
668
|
expect(states[5]).toMatchObject({
|
|
613
669
|
isLoading: false,
|
|
614
670
|
isPaused: false,
|
|
615
|
-
failureCount:
|
|
671
|
+
failureCount: 0,
|
|
672
|
+
failureReason: null,
|
|
616
673
|
data: 'data',
|
|
617
674
|
})
|
|
618
675
|
|
|
@@ -233,6 +233,7 @@ describe('useQuery', () => {
|
|
|
233
233
|
error: null,
|
|
234
234
|
errorUpdatedAt: 0,
|
|
235
235
|
failureCount: 0,
|
|
236
|
+
failureReason: null,
|
|
236
237
|
errorUpdateCount: 0,
|
|
237
238
|
isError: false,
|
|
238
239
|
isFetched: false,
|
|
@@ -260,6 +261,7 @@ describe('useQuery', () => {
|
|
|
260
261
|
error: null,
|
|
261
262
|
errorUpdatedAt: 0,
|
|
262
263
|
failureCount: 0,
|
|
264
|
+
failureReason: null,
|
|
263
265
|
errorUpdateCount: 0,
|
|
264
266
|
isError: false,
|
|
265
267
|
isFetched: true,
|
|
@@ -303,6 +305,7 @@ describe('useQuery', () => {
|
|
|
303
305
|
<div>
|
|
304
306
|
<h1>Status: {state.status}</h1>
|
|
305
307
|
<div>Failure Count: {state.failureCount}</div>
|
|
308
|
+
<div>Failure Reason: {state.failureReason}</div>
|
|
306
309
|
</div>
|
|
307
310
|
)
|
|
308
311
|
}
|
|
@@ -317,6 +320,7 @@ describe('useQuery', () => {
|
|
|
317
320
|
error: null,
|
|
318
321
|
errorUpdatedAt: 0,
|
|
319
322
|
failureCount: 0,
|
|
323
|
+
failureReason: null,
|
|
320
324
|
errorUpdateCount: 0,
|
|
321
325
|
isError: false,
|
|
322
326
|
isFetched: false,
|
|
@@ -344,6 +348,7 @@ describe('useQuery', () => {
|
|
|
344
348
|
error: null,
|
|
345
349
|
errorUpdatedAt: 0,
|
|
346
350
|
failureCount: 1,
|
|
351
|
+
failureReason: 'rejected',
|
|
347
352
|
errorUpdateCount: 0,
|
|
348
353
|
isError: false,
|
|
349
354
|
isFetched: false,
|
|
@@ -371,6 +376,7 @@ describe('useQuery', () => {
|
|
|
371
376
|
error: 'rejected',
|
|
372
377
|
errorUpdatedAt: expect.any(Number),
|
|
373
378
|
failureCount: 2,
|
|
379
|
+
failureReason: 'rejected',
|
|
374
380
|
errorUpdateCount: 1,
|
|
375
381
|
isError: true,
|
|
376
382
|
isFetched: true,
|
|
@@ -395,30 +401,33 @@ describe('useQuery', () => {
|
|
|
395
401
|
|
|
396
402
|
it('should set isFetchedAfterMount to true after a query has been fetched', async () => {
|
|
397
403
|
const key = queryKey()
|
|
398
|
-
const states: UseQueryResult<string>[] = []
|
|
399
404
|
|
|
400
405
|
await queryClient.prefetchQuery(key, () => 'prefetched')
|
|
401
406
|
|
|
402
407
|
function Page() {
|
|
403
|
-
const
|
|
404
|
-
|
|
405
|
-
return
|
|
408
|
+
const result = useQuery(key, () => 'new data')
|
|
409
|
+
|
|
410
|
+
return (
|
|
411
|
+
<>
|
|
412
|
+
<div>data: {result.data}</div>
|
|
413
|
+
<div>isFetched: {result.isFetched ? 'true' : 'false'}</div>
|
|
414
|
+
<div>
|
|
415
|
+
isFetchedAfterMount: {result.isFetchedAfterMount ? 'true' : 'false'}
|
|
416
|
+
</div>
|
|
417
|
+
</>
|
|
418
|
+
)
|
|
406
419
|
}
|
|
407
420
|
|
|
408
|
-
renderWithClient(queryClient, <Page />)
|
|
421
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
409
422
|
|
|
410
|
-
|
|
411
|
-
|
|
423
|
+
rendered.getByText('data: prefetched')
|
|
424
|
+
rendered.getByText('isFetched: true')
|
|
425
|
+
rendered.getByText('isFetchedAfterMount: false')
|
|
412
426
|
|
|
413
|
-
|
|
414
|
-
data: '
|
|
415
|
-
isFetched: true
|
|
416
|
-
isFetchedAfterMount:
|
|
417
|
-
})
|
|
418
|
-
expect(states[1]).toMatchObject({
|
|
419
|
-
data: 'data',
|
|
420
|
-
isFetched: true,
|
|
421
|
-
isFetchedAfterMount: true,
|
|
427
|
+
await waitFor(() => {
|
|
428
|
+
rendered.getByText('data: new data')
|
|
429
|
+
rendered.getByText('isFetched: true')
|
|
430
|
+
rendered.getByText('isFetchedAfterMount: true')
|
|
422
431
|
})
|
|
423
432
|
})
|
|
424
433
|
|
|
@@ -595,7 +604,8 @@ describe('useQuery', () => {
|
|
|
595
604
|
|
|
596
605
|
const rendered = renderWithClient(queryClient, <Page />)
|
|
597
606
|
|
|
598
|
-
|
|
607
|
+
rendered.getByText('status: loading, fetchStatus: fetching')
|
|
608
|
+
|
|
599
609
|
await queryClient.cancelQueries(key)
|
|
600
610
|
// query cancellation will reset the query to it's initial state
|
|
601
611
|
await waitFor(() =>
|
|
@@ -2280,15 +2290,22 @@ describe('useQuery', () => {
|
|
|
2280
2290
|
}
|
|
2281
2291
|
|
|
2282
2292
|
function Page() {
|
|
2283
|
-
useQuery(key, queryFn)
|
|
2284
|
-
useQuery(key, queryFn)
|
|
2293
|
+
const query1 = useQuery(key, queryFn)
|
|
2294
|
+
const query2 = useQuery(key, queryFn)
|
|
2285
2295
|
renders++
|
|
2286
|
-
|
|
2296
|
+
|
|
2297
|
+
return (
|
|
2298
|
+
<div>
|
|
2299
|
+
{query1.data} {query2.data}
|
|
2300
|
+
</div>
|
|
2301
|
+
)
|
|
2287
2302
|
}
|
|
2288
2303
|
|
|
2289
|
-
renderWithClient(queryClient, <Page />)
|
|
2304
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
2290
2305
|
|
|
2291
|
-
await
|
|
2306
|
+
await waitFor(() => {
|
|
2307
|
+
rendered.getByText('data data')
|
|
2308
|
+
})
|
|
2292
2309
|
|
|
2293
2310
|
// Should be 2 instead of 3
|
|
2294
2311
|
expect(renders).toBe(2)
|
|
@@ -2877,6 +2894,7 @@ describe('useQuery', () => {
|
|
|
2877
2894
|
<div>
|
|
2878
2895
|
<div>error: {result.error ?? 'null'}</div>
|
|
2879
2896
|
<div>failureCount: {result.failureCount}</div>
|
|
2897
|
+
<div>failureReason: {result.failureReason}</div>
|
|
2880
2898
|
</div>
|
|
2881
2899
|
)
|
|
2882
2900
|
}
|
|
@@ -2895,6 +2913,7 @@ describe('useQuery', () => {
|
|
|
2895
2913
|
const rendered = renderWithClient(queryClient, <App />)
|
|
2896
2914
|
|
|
2897
2915
|
await waitFor(() => rendered.getByText('failureCount: 1'))
|
|
2916
|
+
await waitFor(() => rendered.getByText('failureReason: some error'))
|
|
2898
2917
|
fireEvent.click(rendered.getByRole('button', { name: /hide/i }))
|
|
2899
2918
|
await waitFor(() => rendered.getByRole('button', { name: /show/i }))
|
|
2900
2919
|
fireEvent.click(rendered.getByRole('button', { name: /show/i }))
|
|
@@ -2925,6 +2944,7 @@ describe('useQuery', () => {
|
|
|
2925
2944
|
<div>
|
|
2926
2945
|
<div>error: {result.error ?? 'null'}</div>
|
|
2927
2946
|
<div>failureCount: {result.failureCount}</div>
|
|
2947
|
+
<div>failureReason: {result.failureReason}</div>
|
|
2928
2948
|
</div>
|
|
2929
2949
|
)
|
|
2930
2950
|
}
|
|
@@ -2946,6 +2966,7 @@ describe('useQuery', () => {
|
|
|
2946
2966
|
const rendered = renderWithClient(queryClient, <App />)
|
|
2947
2967
|
|
|
2948
2968
|
await waitFor(() => rendered.getByText('failureCount: 1'))
|
|
2969
|
+
await waitFor(() => rendered.getByText('failureReason: some error'))
|
|
2949
2970
|
fireEvent.click(rendered.getByRole('button', { name: /hide/i }))
|
|
2950
2971
|
fireEvent.click(rendered.getByRole('button', { name: /cancel/i }))
|
|
2951
2972
|
await waitFor(() => rendered.getByRole('button', { name: /show/i }))
|
|
@@ -3169,15 +3190,20 @@ describe('useQuery', () => {
|
|
|
3169
3190
|
})
|
|
3170
3191
|
|
|
3171
3192
|
function Page() {
|
|
3172
|
-
const { status, failureCount } = useQuery
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3193
|
+
const { status, failureCount, failureReason } = useQuery<unknown, string>(
|
|
3194
|
+
key,
|
|
3195
|
+
queryFn,
|
|
3196
|
+
{
|
|
3197
|
+
retry: 1,
|
|
3198
|
+
retryDelay: 1,
|
|
3199
|
+
},
|
|
3200
|
+
)
|
|
3176
3201
|
|
|
3177
3202
|
return (
|
|
3178
3203
|
<div>
|
|
3179
3204
|
<h1>{status}</h1>
|
|
3180
3205
|
<h2>Failed {failureCount} times</h2>
|
|
3206
|
+
<h2>Failed because {failureReason}</h2>
|
|
3181
3207
|
</div>
|
|
3182
3208
|
)
|
|
3183
3209
|
}
|
|
@@ -3189,6 +3215,7 @@ describe('useQuery', () => {
|
|
|
3189
3215
|
|
|
3190
3216
|
// query should fail `retry + 1` times, since first time isn't a "retry"
|
|
3191
3217
|
await waitFor(() => rendered.getByText('Failed 2 times'))
|
|
3218
|
+
await waitFor(() => rendered.getByText('Failed because Error test Barrett'))
|
|
3192
3219
|
|
|
3193
3220
|
expect(queryFn).toHaveBeenCalledTimes(2)
|
|
3194
3221
|
})
|
|
@@ -3207,7 +3234,7 @@ describe('useQuery', () => {
|
|
|
3207
3234
|
})
|
|
3208
3235
|
|
|
3209
3236
|
function Page() {
|
|
3210
|
-
const { status, failureCount, error } = useQuery<
|
|
3237
|
+
const { status, failureCount, failureReason, error } = useQuery<
|
|
3211
3238
|
unknown,
|
|
3212
3239
|
string,
|
|
3213
3240
|
[string]
|
|
@@ -3220,6 +3247,7 @@ describe('useQuery', () => {
|
|
|
3220
3247
|
<div>
|
|
3221
3248
|
<h1>{status}</h1>
|
|
3222
3249
|
<h2>Failed {failureCount} times</h2>
|
|
3250
|
+
<h2>Failed because {failureReason}</h2>
|
|
3223
3251
|
<h2>{error}</h2>
|
|
3224
3252
|
</div>
|
|
3225
3253
|
)
|
|
@@ -3231,6 +3259,8 @@ describe('useQuery', () => {
|
|
|
3231
3259
|
await waitFor(() => rendered.getByText('error'))
|
|
3232
3260
|
|
|
3233
3261
|
await waitFor(() => rendered.getByText('Failed 2 times'))
|
|
3262
|
+
await waitFor(() => rendered.getByText('Failed because NoRetry'))
|
|
3263
|
+
|
|
3234
3264
|
await waitFor(() => rendered.getByText('NoRetry'))
|
|
3235
3265
|
|
|
3236
3266
|
expect(queryFn).toHaveBeenCalledTimes(2)
|
|
@@ -3247,7 +3277,7 @@ describe('useQuery', () => {
|
|
|
3247
3277
|
})
|
|
3248
3278
|
|
|
3249
3279
|
function Page() {
|
|
3250
|
-
const { status, failureCount } = useQuery(key, queryFn, {
|
|
3280
|
+
const { status, failureCount, failureReason } = useQuery(key, queryFn, {
|
|
3251
3281
|
retry: 1,
|
|
3252
3282
|
retryDelay: (_, error: DelayError) => error.delay,
|
|
3253
3283
|
})
|
|
@@ -3256,6 +3286,7 @@ describe('useQuery', () => {
|
|
|
3256
3286
|
<div>
|
|
3257
3287
|
<h1>{status}</h1>
|
|
3258
3288
|
<h2>Failed {failureCount} times</h2>
|
|
3289
|
+
<h2>Failed because DelayError: {failureReason?.delay}ms</h2>
|
|
3259
3290
|
</div>
|
|
3260
3291
|
)
|
|
3261
3292
|
}
|
|
@@ -3266,6 +3297,7 @@ describe('useQuery', () => {
|
|
|
3266
3297
|
|
|
3267
3298
|
expect(queryFn).toHaveBeenCalledTimes(1)
|
|
3268
3299
|
|
|
3300
|
+
await waitFor(() => rendered.getByText('Failed because DelayError: 50ms'))
|
|
3269
3301
|
await waitFor(() => rendered.getByText('Failed 2 times'))
|
|
3270
3302
|
|
|
3271
3303
|
expect(queryFn).toHaveBeenCalledTimes(2)
|
|
@@ -3281,7 +3313,7 @@ describe('useQuery', () => {
|
|
|
3281
3313
|
let count = 0
|
|
3282
3314
|
|
|
3283
3315
|
function Page() {
|
|
3284
|
-
const query = useQuery(
|
|
3316
|
+
const query = useQuery<unknown, string>(
|
|
3285
3317
|
key,
|
|
3286
3318
|
() => {
|
|
3287
3319
|
count++
|
|
@@ -3298,6 +3330,7 @@ describe('useQuery', () => {
|
|
|
3298
3330
|
<div>error {String(query.error)}</div>
|
|
3299
3331
|
<div>status {query.status}</div>
|
|
3300
3332
|
<div>failureCount {query.failureCount}</div>
|
|
3333
|
+
<div>failureReason {query.failureReason}</div>
|
|
3301
3334
|
</div>
|
|
3302
3335
|
)
|
|
3303
3336
|
}
|
|
@@ -3306,12 +3339,14 @@ describe('useQuery', () => {
|
|
|
3306
3339
|
|
|
3307
3340
|
// The query should display the first error result
|
|
3308
3341
|
await waitFor(() => rendered.getByText('failureCount 1'))
|
|
3342
|
+
await waitFor(() => rendered.getByText('failureReason fetching error 1'))
|
|
3309
3343
|
await waitFor(() => rendered.getByText('status loading'))
|
|
3310
3344
|
await waitFor(() => rendered.getByText('error null'))
|
|
3311
3345
|
|
|
3312
3346
|
// Check if the query really paused
|
|
3313
3347
|
await sleep(10)
|
|
3314
3348
|
await waitFor(() => rendered.getByText('failureCount 1'))
|
|
3349
|
+
await waitFor(() => rendered.getByText('failureReason fetching error 1'))
|
|
3315
3350
|
|
|
3316
3351
|
act(() => {
|
|
3317
3352
|
// reset visibilityState to original value
|
|
@@ -3321,12 +3356,14 @@ describe('useQuery', () => {
|
|
|
3321
3356
|
|
|
3322
3357
|
// Wait for the final result
|
|
3323
3358
|
await waitFor(() => rendered.getByText('failureCount 4'))
|
|
3359
|
+
await waitFor(() => rendered.getByText('failureReason fetching error 4'))
|
|
3324
3360
|
await waitFor(() => rendered.getByText('status error'))
|
|
3325
3361
|
await waitFor(() => rendered.getByText('error fetching error 4'))
|
|
3326
3362
|
|
|
3327
3363
|
// Check if the query really stopped
|
|
3328
3364
|
await sleep(10)
|
|
3329
3365
|
await waitFor(() => rendered.getByText('failureCount 4'))
|
|
3366
|
+
await waitFor(() => rendered.getByText('failureReason fetching error 4'))
|
|
3330
3367
|
|
|
3331
3368
|
// Check if the error has been logged in the console
|
|
3332
3369
|
expect(mockLogger.error).toHaveBeenCalledWith('fetching error 4')
|
|
@@ -3493,7 +3530,7 @@ describe('useQuery', () => {
|
|
|
3493
3530
|
function Page() {
|
|
3494
3531
|
let counter = 0
|
|
3495
3532
|
|
|
3496
|
-
const query = useQuery(
|
|
3533
|
+
const query = useQuery<string, Error>(
|
|
3497
3534
|
key,
|
|
3498
3535
|
async () => {
|
|
3499
3536
|
if (counter < 2) {
|
|
@@ -3509,6 +3546,7 @@ describe('useQuery', () => {
|
|
|
3509
3546
|
return (
|
|
3510
3547
|
<div>
|
|
3511
3548
|
<div>failureCount {query.failureCount}</div>
|
|
3549
|
+
<div>failureReason {query.failureReason?.message ?? 'null'}</div>
|
|
3512
3550
|
</div>
|
|
3513
3551
|
)
|
|
3514
3552
|
}
|
|
@@ -3516,7 +3554,9 @@ describe('useQuery', () => {
|
|
|
3516
3554
|
const rendered = renderWithClient(queryClient, <Page />)
|
|
3517
3555
|
|
|
3518
3556
|
await waitFor(() => rendered.getByText('failureCount 2'))
|
|
3557
|
+
await waitFor(() => rendered.getByText('failureReason error'))
|
|
3519
3558
|
await waitFor(() => rendered.getByText('failureCount 0'))
|
|
3559
|
+
await waitFor(() => rendered.getByText('failureReason null'))
|
|
3520
3560
|
})
|
|
3521
3561
|
|
|
3522
3562
|
// See https://github.com/tannerlinsley/react-query/issues/199
|
|
@@ -4909,7 +4949,7 @@ describe('useQuery', () => {
|
|
|
4909
4949
|
let count = 0
|
|
4910
4950
|
|
|
4911
4951
|
function Page() {
|
|
4912
|
-
const state = useQuery({
|
|
4952
|
+
const state = useQuery<string, string>({
|
|
4913
4953
|
queryKey: key,
|
|
4914
4954
|
queryFn: async () => {
|
|
4915
4955
|
count++
|
|
@@ -4924,6 +4964,7 @@ describe('useQuery', () => {
|
|
|
4924
4964
|
status: {state.status}, fetchStatus: {state.fetchStatus},
|
|
4925
4965
|
failureCount: {state.failureCount}
|
|
4926
4966
|
</div>
|
|
4967
|
+
<div>failureReason: {state.failureReason ?? 'null'}</div>
|
|
4927
4968
|
<div>data: {state.data}</div>
|
|
4928
4969
|
<button
|
|
4929
4970
|
onClick={() => queryClient.invalidateQueries({ queryKey: key })}
|
|
@@ -4946,6 +4987,7 @@ describe('useQuery', () => {
|
|
|
4946
4987
|
'status: success, fetchStatus: paused, failureCount: 0',
|
|
4947
4988
|
),
|
|
4948
4989
|
)
|
|
4990
|
+
await waitFor(() => rendered.getByText('failureReason: null'))
|
|
4949
4991
|
|
|
4950
4992
|
onlineMock.mockReturnValue(true)
|
|
4951
4993
|
window.dispatchEvent(new Event('online'))
|
|
@@ -4955,11 +4997,13 @@ describe('useQuery', () => {
|
|
|
4955
4997
|
'status: success, fetchStatus: fetching, failureCount: 0',
|
|
4956
4998
|
),
|
|
4957
4999
|
)
|
|
5000
|
+
await waitFor(() => rendered.getByText('failureReason: null'))
|
|
4958
5001
|
await waitFor(() =>
|
|
4959
5002
|
rendered.getByText(
|
|
4960
5003
|
'status: success, fetchStatus: idle, failureCount: 0',
|
|
4961
5004
|
),
|
|
4962
5005
|
)
|
|
5006
|
+
await waitFor(() => rendered.getByText('failureReason: null'))
|
|
4963
5007
|
|
|
4964
5008
|
await waitFor(() => {
|
|
4965
5009
|
expect(rendered.getByText('data: data2')).toBeInTheDocument()
|
|
@@ -5198,7 +5242,7 @@ describe('useQuery', () => {
|
|
|
5198
5242
|
let count = 0
|
|
5199
5243
|
|
|
5200
5244
|
function Page() {
|
|
5201
|
-
const state = useQuery({
|
|
5245
|
+
const state = useQuery<unknown, Error>({
|
|
5202
5246
|
queryKey: key,
|
|
5203
5247
|
queryFn: async (): Promise<unknown> => {
|
|
5204
5248
|
count++
|
|
@@ -5215,6 +5259,7 @@ describe('useQuery', () => {
|
|
|
5215
5259
|
status: {state.status}, fetchStatus: {state.fetchStatus},
|
|
5216
5260
|
failureCount: {state.failureCount}
|
|
5217
5261
|
</div>
|
|
5262
|
+
<div>failureReason: {state.failureReason?.message ?? 'null'}</div>
|
|
5218
5263
|
</div>
|
|
5219
5264
|
)
|
|
5220
5265
|
}
|
|
@@ -5226,6 +5271,7 @@ describe('useQuery', () => {
|
|
|
5226
5271
|
'status: loading, fetchStatus: fetching, failureCount: 1',
|
|
5227
5272
|
),
|
|
5228
5273
|
)
|
|
5274
|
+
await waitFor(() => rendered.getByText('failureReason: failed1'))
|
|
5229
5275
|
|
|
5230
5276
|
const onlineMock = mockNavigatorOnLine(false)
|
|
5231
5277
|
|
|
@@ -5236,6 +5282,7 @@ describe('useQuery', () => {
|
|
|
5236
5282
|
'status: loading, fetchStatus: paused, failureCount: 1',
|
|
5237
5283
|
),
|
|
5238
5284
|
)
|
|
5285
|
+
await waitFor(() => rendered.getByText('failureReason: failed1'))
|
|
5239
5286
|
|
|
5240
5287
|
expect(count).toBe(1)
|
|
5241
5288
|
|
|
@@ -5245,6 +5292,7 @@ describe('useQuery', () => {
|
|
|
5245
5292
|
await waitFor(() =>
|
|
5246
5293
|
rendered.getByText('status: error, fetchStatus: idle, failureCount: 3'),
|
|
5247
5294
|
)
|
|
5295
|
+
await waitFor(() => rendered.getByText('failureReason: failed3'))
|
|
5248
5296
|
|
|
5249
5297
|
expect(count).toBe(3)
|
|
5250
5298
|
|
|
@@ -5539,7 +5587,7 @@ describe('useQuery', () => {
|
|
|
5539
5587
|
let count = 0
|
|
5540
5588
|
|
|
5541
5589
|
function Page() {
|
|
5542
|
-
const state = useQuery({
|
|
5590
|
+
const state = useQuery<unknown, Error>({
|
|
5543
5591
|
queryKey: key,
|
|
5544
5592
|
queryFn: async (): Promise<unknown> => {
|
|
5545
5593
|
count++
|
|
@@ -5557,6 +5605,7 @@ describe('useQuery', () => {
|
|
|
5557
5605
|
status: {state.status}, fetchStatus: {state.fetchStatus},
|
|
5558
5606
|
failureCount: {state.failureCount}
|
|
5559
5607
|
</div>
|
|
5608
|
+
<div>failureReason: {state.failureReason?.message ?? 'null'}</div>
|
|
5560
5609
|
</div>
|
|
5561
5610
|
)
|
|
5562
5611
|
}
|
|
@@ -5568,6 +5617,7 @@ describe('useQuery', () => {
|
|
|
5568
5617
|
'status: loading, fetchStatus: paused, failureCount: 1',
|
|
5569
5618
|
),
|
|
5570
5619
|
)
|
|
5620
|
+
await waitFor(() => rendered.getByText('failureReason: failed1'))
|
|
5571
5621
|
|
|
5572
5622
|
expect(count).toBe(1)
|
|
5573
5623
|
|
|
@@ -5577,6 +5627,7 @@ describe('useQuery', () => {
|
|
|
5577
5627
|
await waitFor(() =>
|
|
5578
5628
|
rendered.getByText('status: error, fetchStatus: idle, failureCount: 3'),
|
|
5579
5629
|
)
|
|
5630
|
+
await waitFor(() => rendered.getByText('failureReason: failed3'))
|
|
5580
5631
|
|
|
5581
5632
|
expect(count).toBe(3)
|
|
5582
5633
|
|