@tanstack/react-query 4.24.10 → 5.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/build/lib/HydrationBoundary.d.ts +9 -0
  2. package/build/lib/{Hydrate.esm.js → HydrationBoundary.esm.js} +14 -17
  3. package/build/lib/HydrationBoundary.esm.js.map +1 -0
  4. package/build/lib/{Hydrate.js → HydrationBoundary.js} +17 -24
  5. package/build/lib/HydrationBoundary.js.map +1 -0
  6. package/build/lib/{Hydrate.mjs → HydrationBoundary.mjs} +14 -17
  7. package/build/lib/HydrationBoundary.mjs.map +1 -0
  8. package/build/lib/QueryClientProvider.d.ts +4 -19
  9. package/build/lib/QueryClientProvider.esm.js +11 -46
  10. package/build/lib/QueryClientProvider.esm.js.map +1 -1
  11. package/build/lib/QueryClientProvider.js +14 -52
  12. package/build/lib/QueryClientProvider.js.map +1 -1
  13. package/build/lib/QueryClientProvider.mjs +11 -46
  14. package/build/lib/QueryClientProvider.mjs.map +1 -1
  15. package/build/lib/QueryErrorResetBoundary.esm.js +7 -2
  16. package/build/lib/QueryErrorResetBoundary.esm.js.map +1 -1
  17. package/build/lib/QueryErrorResetBoundary.js +10 -8
  18. package/build/lib/QueryErrorResetBoundary.js.map +1 -1
  19. package/build/lib/QueryErrorResetBoundary.mjs +7 -2
  20. package/build/lib/QueryErrorResetBoundary.mjs.map +1 -1
  21. package/build/lib/__tests__/useQuery.types.test.d.ts +1 -2
  22. package/build/lib/__tests__/utils.d.ts +7 -10
  23. package/build/lib/errorBoundaryUtils.d.ts +3 -3
  24. package/build/lib/errorBoundaryUtils.esm.js +3 -3
  25. package/build/lib/errorBoundaryUtils.esm.js.map +1 -1
  26. package/build/lib/errorBoundaryUtils.js +6 -9
  27. package/build/lib/errorBoundaryUtils.js.map +1 -1
  28. package/build/lib/errorBoundaryUtils.mjs +3 -3
  29. package/build/lib/errorBoundaryUtils.mjs.map +1 -1
  30. package/build/lib/index.d.ts +4 -5
  31. package/build/lib/index.esm.js +3 -4
  32. package/build/lib/index.esm.js.map +1 -1
  33. package/build/lib/index.js +6 -9
  34. package/build/lib/index.js.map +1 -1
  35. package/build/lib/index.mjs +3 -4
  36. package/build/lib/index.mjs.map +1 -1
  37. package/build/lib/isRestoring.esm.js.map +1 -1
  38. package/build/lib/isRestoring.js +3 -6
  39. package/build/lib/isRestoring.js.map +1 -1
  40. package/build/lib/isRestoring.mjs.map +1 -1
  41. package/build/lib/suspense.esm.js +5 -5
  42. package/build/lib/suspense.esm.js.map +1 -1
  43. package/build/lib/suspense.js +5 -7
  44. package/build/lib/suspense.js.map +1 -1
  45. package/build/lib/suspense.mjs +5 -5
  46. package/build/lib/suspense.mjs.map +1 -1
  47. package/build/lib/types.d.ts +14 -22
  48. package/build/lib/useBaseQuery.d.ts +2 -2
  49. package/build/lib/useBaseQuery.esm.js +15 -18
  50. package/build/lib/useBaseQuery.esm.js.map +1 -1
  51. package/build/lib/useBaseQuery.js +18 -24
  52. package/build/lib/useBaseQuery.js.map +1 -1
  53. package/build/lib/useBaseQuery.mjs +15 -18
  54. package/build/lib/useBaseQuery.mjs.map +1 -1
  55. package/build/lib/useInfiniteQuery.d.ts +2 -4
  56. package/build/lib/useInfiniteQuery.esm.js +4 -4
  57. package/build/lib/useInfiniteQuery.esm.js.map +1 -1
  58. package/build/lib/useInfiniteQuery.js +3 -5
  59. package/build/lib/useInfiniteQuery.js.map +1 -1
  60. package/build/lib/useInfiniteQuery.mjs +4 -4
  61. package/build/lib/useInfiniteQuery.mjs.map +1 -1
  62. package/build/lib/useIsFetching.d.ts +2 -7
  63. package/build/lib/useIsFetching.esm.js +5 -9
  64. package/build/lib/useIsFetching.esm.js.map +1 -1
  65. package/build/lib/useIsFetching.js +7 -14
  66. package/build/lib/useIsFetching.js.map +1 -1
  67. package/build/lib/useIsFetching.mjs +5 -9
  68. package/build/lib/useIsFetching.mjs.map +1 -1
  69. package/build/lib/useMutation.d.ts +2 -5
  70. package/build/lib/useMutation.esm.js +12 -14
  71. package/build/lib/useMutation.esm.js.map +1 -1
  72. package/build/lib/useMutation.js +14 -19
  73. package/build/lib/useMutation.js.map +1 -1
  74. package/build/lib/useMutation.mjs +12 -14
  75. package/build/lib/useMutation.mjs.map +1 -1
  76. package/build/lib/useMutationState.d.ts +8 -0
  77. package/build/lib/useMutationState.esm.js +37 -0
  78. package/build/lib/useMutationState.esm.js.map +1 -0
  79. package/build/lib/useMutationState.js +59 -0
  80. package/build/lib/useMutationState.js.map +1 -0
  81. package/build/lib/useMutationState.mjs +37 -0
  82. package/build/lib/useMutationState.mjs.map +1 -0
  83. package/build/lib/useQueries.d.ts +9 -7
  84. package/build/lib/useQueries.esm.js +16 -27
  85. package/build/lib/useQueries.esm.js.map +1 -1
  86. package/build/lib/useQueries.js +19 -33
  87. package/build/lib/useQueries.js.map +1 -1
  88. package/build/lib/useQueries.mjs +16 -27
  89. package/build/lib/useQueries.mjs.map +1 -1
  90. package/build/lib/useQuery.d.ts +9 -21
  91. package/build/lib/useQuery.esm.js +5 -4
  92. package/build/lib/useQuery.esm.js.map +1 -1
  93. package/build/lib/useQuery.js +4 -5
  94. package/build/lib/useQuery.js.map +1 -1
  95. package/build/lib/useQuery.mjs +5 -4
  96. package/build/lib/useQuery.mjs.map +1 -1
  97. package/build/lib/utils.d.ts +1 -1
  98. package/build/lib/utils.esm.js +5 -6
  99. package/build/lib/utils.esm.js.map +1 -1
  100. package/build/lib/utils.js +5 -8
  101. package/build/lib/utils.js.map +1 -1
  102. package/build/lib/utils.mjs +5 -6
  103. package/build/lib/utils.mjs.map +1 -1
  104. package/build/umd/index.development.js +1003 -1827
  105. package/build/umd/index.development.js.map +1 -1
  106. package/build/umd/index.production.js +1 -1
  107. package/build/umd/index.production.js.map +1 -1
  108. package/package.json +6 -18
  109. package/src/{Hydrate.tsx → HydrationBoundary.tsx} +17 -18
  110. package/src/QueryClientProvider.tsx +11 -65
  111. package/src/__tests__/{Hydrate.test.tsx → HydrationBoundary.test.tsx} +89 -77
  112. package/src/__tests__/QueryClientProvider.test.tsx +33 -147
  113. package/src/__tests__/QueryResetErrorBoundary.test.tsx +118 -85
  114. package/src/__tests__/ssr-hydration.test.tsx +27 -33
  115. package/src/__tests__/ssr.test.tsx +23 -9
  116. package/src/__tests__/suspense.test.tsx +194 -171
  117. package/src/__tests__/useInfiniteQuery.test.tsx +249 -494
  118. package/src/__tests__/useInfiniteQuery.type.test.tsx +131 -0
  119. package/src/__tests__/useIsFetching.test.tsx +65 -108
  120. package/src/__tests__/useMutation.test.tsx +200 -268
  121. package/src/__tests__/useMutationState.test.tsx +284 -0
  122. package/src/__tests__/useQueries.test.tsx +43 -347
  123. package/src/__tests__/useQuery.test.tsx +890 -686
  124. package/src/__tests__/useQuery.types.test.tsx +23 -24
  125. package/src/__tests__/utils.tsx +14 -23
  126. package/src/errorBoundaryUtils.ts +5 -10
  127. package/src/index.ts +4 -7
  128. package/src/types.ts +33 -38
  129. package/src/useBaseQuery.ts +7 -7
  130. package/src/useInfiniteQuery.ts +12 -77
  131. package/src/useIsFetching.ts +8 -20
  132. package/src/useMutation.ts +8 -66
  133. package/src/useMutationState.ts +81 -0
  134. package/src/useQueries.ts +29 -21
  135. package/src/useQuery.ts +27 -104
  136. package/src/utils.ts +5 -5
  137. package/build/lib/Hydrate.d.ts +0 -10
  138. package/build/lib/Hydrate.esm.js.map +0 -1
  139. package/build/lib/Hydrate.js.map +0 -1
  140. package/build/lib/Hydrate.mjs.map +0 -1
  141. package/build/lib/reactBatchedUpdates.d.ts +0 -2
  142. package/build/lib/reactBatchedUpdates.esm.js +0 -6
  143. package/build/lib/reactBatchedUpdates.esm.js.map +0 -1
  144. package/build/lib/reactBatchedUpdates.js +0 -30
  145. package/build/lib/reactBatchedUpdates.js.map +0 -1
  146. package/build/lib/reactBatchedUpdates.mjs +0 -6
  147. package/build/lib/reactBatchedUpdates.mjs.map +0 -1
  148. package/build/lib/reactBatchedUpdates.native.d.ts +0 -2
  149. package/build/lib/reactBatchedUpdates.native.esm.js +0 -2
  150. package/build/lib/reactBatchedUpdates.native.esm.js.map +0 -1
  151. package/build/lib/reactBatchedUpdates.native.js +0 -13
  152. package/build/lib/reactBatchedUpdates.native.js.map +0 -1
  153. package/build/lib/reactBatchedUpdates.native.mjs +0 -2
  154. package/build/lib/reactBatchedUpdates.native.mjs.map +0 -1
  155. package/build/lib/setBatchUpdatesFn.esm.js +0 -5
  156. package/build/lib/setBatchUpdatesFn.esm.js.map +0 -1
  157. package/build/lib/setBatchUpdatesFn.js +0 -7
  158. package/build/lib/setBatchUpdatesFn.js.map +0 -1
  159. package/build/lib/setBatchUpdatesFn.mjs +0 -5
  160. package/build/lib/setBatchUpdatesFn.mjs.map +0 -1
  161. package/build/lib/useIsMutating.d.ts +0 -7
  162. package/build/lib/useIsMutating.esm.js +0 -16
  163. package/build/lib/useIsMutating.esm.js.map +0 -1
  164. package/build/lib/useIsMutating.js +0 -40
  165. package/build/lib/useIsMutating.js.map +0 -1
  166. package/build/lib/useIsMutating.mjs +0 -16
  167. package/build/lib/useIsMutating.mjs.map +0 -1
  168. package/build/lib/useSyncExternalStore.d.ts +0 -2
  169. package/build/lib/useSyncExternalStore.esm.js +0 -7
  170. package/build/lib/useSyncExternalStore.esm.js.map +0 -1
  171. package/build/lib/useSyncExternalStore.js +0 -11
  172. package/build/lib/useSyncExternalStore.js.map +0 -1
  173. package/build/lib/useSyncExternalStore.mjs +0 -7
  174. package/build/lib/useSyncExternalStore.mjs.map +0 -1
  175. package/build/lib/useSyncExternalStore.native.d.ts +0 -2
  176. package/build/lib/useSyncExternalStore.native.esm.js +0 -2
  177. package/build/lib/useSyncExternalStore.native.esm.js.map +0 -1
  178. package/build/lib/useSyncExternalStore.native.js +0 -13
  179. package/build/lib/useSyncExternalStore.native.js.map +0 -1
  180. package/build/lib/useSyncExternalStore.native.mjs +0 -2
  181. package/build/lib/useSyncExternalStore.native.mjs.map +0 -1
  182. package/codemods/v4/key-transformation.js +0 -138
  183. package/codemods/v4/replace-import-specifier.js +0 -25
  184. package/codemods/v4/utils/index.js +0 -166
  185. package/codemods/v4/utils/replacers/key-replacer.js +0 -160
  186. package/codemods/v4/utils/transformers/query-cache-transformer.js +0 -115
  187. package/codemods/v4/utils/transformers/query-client-transformer.js +0 -49
  188. package/codemods/v4/utils/transformers/use-query-like-transformer.js +0 -32
  189. package/codemods/v4/utils/unprocessable-key-error.js +0 -8
  190. package/src/__tests__/useIsMutating.test.tsx +0 -259
  191. package/src/reactBatchedUpdates.native.ts +0 -4
  192. package/src/reactBatchedUpdates.ts +0 -2
  193. package/src/setBatchUpdatesFn.ts +0 -4
  194. package/src/useIsMutating.ts +0 -39
  195. package/src/useSyncExternalStore.native.ts +0 -5
  196. package/src/useSyncExternalStore.ts +0 -4
  197. /package/build/lib/__tests__/{Hydrate.test.d.ts → HydrationBoundary.test.d.ts} +0 -0
  198. /package/build/lib/__tests__/{useIsMutating.test.d.ts → useInfiniteQuery.type.test.d.ts} +0 -0
  199. /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
  import { ErrorBoundary } from 'react-error-boundary'
4
4
 
@@ -13,7 +13,6 @@ import {
13
13
  sleep,
14
14
  } from './utils'
15
15
  import type {
16
- QueryClient,
17
16
  QueryFunction,
18
17
  QueryKey,
19
18
  QueryObserverResult,
@@ -73,251 +72,6 @@ describe('useQueries', () => {
73
72
  expect(results[2]).toMatchObject([{ data: 1 }, { data: 2 }])
74
73
  })
75
74
 
76
- it('should keep previous data if amount of queries is the same', async () => {
77
- const key1 = queryKey()
78
- const key2 = queryKey()
79
- const states: UseQueryResult[][] = []
80
-
81
- function Page() {
82
- const [count, setCount] = React.useState(1)
83
- const result = useQueries({
84
- queries: [
85
- {
86
- queryKey: [key1, count],
87
- keepPreviousData: true,
88
- queryFn: async () => {
89
- await sleep(10)
90
- return count * 2
91
- },
92
- },
93
- {
94
- queryKey: [key2, count],
95
- keepPreviousData: true,
96
- queryFn: async () => {
97
- await sleep(35)
98
- return count * 5
99
- },
100
- },
101
- ],
102
- })
103
- states.push(result)
104
-
105
- const isFetching = result.some((r) => r.isFetching)
106
-
107
- return (
108
- <div>
109
- <div>
110
- data1: {String(result[0].data ?? 'null')}, data2:{' '}
111
- {String(result[1].data ?? 'null')}
112
- </div>
113
- <div>isFetching: {String(isFetching)}</div>
114
- <button onClick={() => setCount((prev) => prev + 1)}>inc</button>
115
- </div>
116
- )
117
- }
118
-
119
- const rendered = renderWithClient(queryClient, <Page />)
120
-
121
- await waitFor(() => rendered.getByText('data1: 2, data2: 5'))
122
- fireEvent.click(rendered.getByRole('button', { name: /inc/i }))
123
-
124
- await waitFor(() => rendered.getByText('data1: 4, data2: 10'))
125
- await waitFor(() => rendered.getByText('isFetching: false'))
126
-
127
- expect(states[states.length - 1]).toMatchObject([
128
- { status: 'success', data: 4, isPreviousData: false, isFetching: false },
129
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
130
- ])
131
- })
132
-
133
- it('should keep previous data for variable amounts of useQueries', async () => {
134
- const key = queryKey()
135
- const states: UseQueryResult[][] = []
136
-
137
- function Page() {
138
- const [count, setCount] = React.useState(2)
139
- const result = useQueries({
140
- queries: Array.from({ length: count }, (_, i) => ({
141
- queryKey: [key, count, i + 1],
142
- keepPreviousData: true,
143
- queryFn: async () => {
144
- await sleep(35 * (i + 1))
145
- return (i + 1) * count * 2
146
- },
147
- })),
148
- })
149
-
150
- states.push(result)
151
-
152
- const isFetching = result.some((r) => r.isFetching)
153
-
154
- return (
155
- <div>
156
- <div>data: {result.map((it) => it.data).join(',')}</div>
157
- <div>isFetching: {String(isFetching)}</div>
158
- <button onClick={() => setCount((prev) => prev + 1)}>inc</button>
159
- </div>
160
- )
161
- }
162
-
163
- const rendered = renderWithClient(queryClient, <Page />)
164
-
165
- await waitFor(() => rendered.getByText('data: 4,8'))
166
- fireEvent.click(rendered.getByRole('button', { name: /inc/i }))
167
-
168
- await waitFor(() => rendered.getByText('data: 6,12,18'))
169
- await waitFor(() => rendered.getByText('isFetching: false'))
170
-
171
- expect(states[states.length - 1]).toMatchObject([
172
- { status: 'success', data: 6, isPreviousData: false, isFetching: false },
173
- { status: 'success', data: 12, isPreviousData: false, isFetching: false },
174
- { status: 'success', data: 18, isPreviousData: false, isFetching: false },
175
- ])
176
- })
177
-
178
- it('should keep previous data when switching between queries', async () => {
179
- const key = queryKey()
180
- const states: UseQueryResult[][] = []
181
-
182
- function Page() {
183
- const [series1, setSeries1] = React.useState(1)
184
- const [series2, setSeries2] = React.useState(2)
185
- const ids = [series1, series2]
186
-
187
- const result = useQueries({
188
- queries: ids.map((id) => {
189
- return {
190
- queryKey: [key, id],
191
- queryFn: async () => {
192
- await sleep(5)
193
- return id * 5
194
- },
195
- keepPreviousData: true,
196
- }
197
- }),
198
- })
199
-
200
- states.push(result)
201
-
202
- const isFetching = result.some((r) => r.isFetching)
203
-
204
- return (
205
- <div>
206
- <div>
207
- data1: {String(result[0]?.data ?? 'null')}, data2:{' '}
208
- {String(result[1]?.data ?? 'null')}
209
- </div>
210
- <div>isFetching: {String(isFetching)}</div>
211
- <button onClick={() => setSeries2(3)}>setSeries2</button>
212
- <button onClick={() => setSeries1(2)}>setSeries1</button>
213
- </div>
214
- )
215
- }
216
-
217
- const rendered = renderWithClient(queryClient, <Page />)
218
-
219
- await waitFor(() => rendered.getByText('data1: 5, data2: 10'))
220
- fireEvent.click(rendered.getByRole('button', { name: /setSeries2/i }))
221
-
222
- await waitFor(() => rendered.getByText('data1: 5, data2: 15'))
223
- fireEvent.click(rendered.getByRole('button', { name: /setSeries1/i }))
224
-
225
- await waitFor(() => rendered.getByText('data1: 10, data2: 15'))
226
- await waitFor(() => rendered.getByText('isFetching: false'))
227
-
228
- expect(states[states.length - 1]).toMatchObject([
229
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
230
- { status: 'success', data: 15, isPreviousData: false, isFetching: false },
231
- ])
232
- })
233
-
234
- it('should not go to infinite render loop with previous data when toggling queries', async () => {
235
- const key = queryKey()
236
- const states: UseQueryResult[][] = []
237
-
238
- function Page() {
239
- const [enableId1, setEnableId1] = React.useState(true)
240
- const ids = enableId1 ? [1, 2] : [2]
241
-
242
- const result = useQueries({
243
- queries: ids.map((id) => {
244
- return {
245
- queryKey: [key, id],
246
- queryFn: async () => {
247
- await sleep(5)
248
- return id * 5
249
- },
250
- keepPreviousData: true,
251
- }
252
- }),
253
- })
254
-
255
- states.push(result)
256
-
257
- const isFetching = result.some((r) => r.isFetching)
258
-
259
- return (
260
- <div>
261
- <div>
262
- data1: {String(result[0]?.data ?? 'null')}, data2:{' '}
263
- {String(result[1]?.data ?? 'null')}
264
- </div>
265
- <div>isFetching: {String(isFetching)}</div>
266
- <button onClick={() => setEnableId1(false)}>set1Disabled</button>
267
- <button onClick={() => setEnableId1(true)}>set2Enabled</button>
268
- </div>
269
- )
270
- }
271
-
272
- const rendered = renderWithClient(queryClient, <Page />)
273
-
274
- await waitFor(() => rendered.getByText('data1: 5, data2: 10'))
275
- fireEvent.click(rendered.getByRole('button', { name: /set1Disabled/i }))
276
-
277
- await waitFor(() => rendered.getByText('data1: 10, data2: null'))
278
- await waitFor(() => rendered.getByText('isFetching: false'))
279
- fireEvent.click(rendered.getByRole('button', { name: /set2Enabled/i }))
280
-
281
- await waitFor(() => rendered.getByText('data1: 5, data2: 10'))
282
- await waitFor(() => rendered.getByText('isFetching: false'))
283
-
284
- await waitFor(() => expect(states.length).toBe(6))
285
-
286
- expect(states[0]).toMatchObject([
287
- {
288
- status: 'loading',
289
- data: undefined,
290
- isPreviousData: false,
291
- isFetching: true,
292
- },
293
- {
294
- status: 'loading',
295
- data: undefined,
296
- isPreviousData: false,
297
- isFetching: true,
298
- },
299
- ])
300
- expect(states[1]).toMatchObject([
301
- { status: 'success', data: 5, isPreviousData: false, isFetching: false },
302
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
303
- ])
304
- expect(states[2]).toMatchObject([
305
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
306
- ])
307
- expect(states[3]).toMatchObject([
308
- { status: 'success', data: 5, isPreviousData: false, isFetching: true },
309
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
310
- ])
311
- expect(states[4]).toMatchObject([
312
- { status: 'success', data: 5, isPreviousData: false, isFetching: true },
313
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
314
- ])
315
- expect(states[5]).toMatchObject([
316
- { status: 'success', data: 5, isPreviousData: false, isFetching: false },
317
- { status: 'success', data: 10, isPreviousData: false, isFetching: false },
318
- ])
319
- })
320
-
321
75
  it('handles type parameter - tuple of tuples', async () => {
322
76
  const key1 = queryKey()
323
77
  const key2 = queryKey()
@@ -1021,98 +775,10 @@ describe('useQueries', () => {
1021
775
  QueriesObserverSpy.mockRestore()
1022
776
  })
1023
777
 
1024
- describe('with custom context', () => {
1025
- it('should return the correct states', async () => {
1026
- const context = React.createContext<QueryClient | undefined>(undefined)
1027
-
1028
- const key1 = queryKey()
1029
- const key2 = queryKey()
1030
- const results: UseQueryResult[][] = []
1031
-
1032
- function Page() {
1033
- const result = useQueries({
1034
- context,
1035
- queries: [
1036
- {
1037
- queryKey: key1,
1038
- queryFn: async () => {
1039
- await sleep(5)
1040
- return 1
1041
- },
1042
- },
1043
- {
1044
- queryKey: key2,
1045
- queryFn: async () => {
1046
- await sleep(10)
1047
- return 2
1048
- },
1049
- },
1050
- ],
1051
- })
1052
- results.push(result)
1053
-
1054
- return (
1055
- <div>
1056
- <div>data1: {result[0].data}</div>
1057
- <div>data2: {result[1].data}</div>
1058
- </div>
1059
- )
1060
- }
1061
-
1062
- const rendered = renderWithClient(queryClient, <Page />, { context })
1063
-
1064
- await waitFor(() => {
1065
- rendered.getByText('data1: 1')
1066
- rendered.getByText('data2: 2')
1067
- })
1068
-
1069
- expect(results[0]).toMatchObject([
1070
- { data: undefined },
1071
- { data: undefined },
1072
- ])
1073
- expect(results[results.length - 1]).toMatchObject([
1074
- { data: 1 },
1075
- { data: 2 },
1076
- ])
1077
- })
1078
-
1079
- it('should throw if the context is necessary and is not passed to useQueries', async () => {
1080
- const context = React.createContext<QueryClient | undefined>(undefined)
1081
-
1082
- const key1 = queryKey()
1083
- const key2 = queryKey()
1084
- const results: UseQueryResult[][] = []
1085
-
1086
- function Page() {
1087
- const result = useQueries({
1088
- queries: [
1089
- {
1090
- queryKey: key1,
1091
- queryFn: async () => 1,
1092
- },
1093
- {
1094
- queryKey: key2,
1095
- queryFn: async () => 2,
1096
- },
1097
- ],
1098
- })
1099
- results.push(result)
1100
- return null
1101
- }
1102
-
1103
- const rendered = renderWithClient(
1104
- queryClient,
1105
- <ErrorBoundary fallbackRender={() => <div>error boundary</div>}>
1106
- <Page />
1107
- </ErrorBoundary>,
1108
- { context },
1109
- )
1110
-
1111
- await waitFor(() => rendered.getByText('error boundary'))
1112
- })
1113
- })
1114
-
1115
- it("should throw error if in one of queries' queryFn throws and useErrorBoundary is in use", async () => {
778
+ it("should throw error if in one of queries' queryFn throws and throwErrors is in use", async () => {
779
+ const consoleMock = jest
780
+ .spyOn(console, 'error')
781
+ .mockImplementation(() => undefined)
1116
782
  const key1 = queryKey()
1117
783
  const key2 = queryKey()
1118
784
  const key3 = queryKey()
@@ -1126,14 +792,14 @@ describe('useQueries', () => {
1126
792
  queryFn: () =>
1127
793
  Promise.reject(
1128
794
  new Error(
1129
- 'this should not throw because useErrorBoundary is not set',
795
+ 'this should not throw because throwErrors is not set',
1130
796
  ),
1131
797
  ),
1132
798
  },
1133
799
  {
1134
800
  queryKey: key2,
1135
801
  queryFn: () => Promise.reject(new Error('single query error')),
1136
- useErrorBoundary: true,
802
+ throwErrors: true,
1137
803
  retry: false,
1138
804
  },
1139
805
  {
@@ -1146,7 +812,7 @@ describe('useQueries', () => {
1146
812
  Promise.reject(
1147
813
  new Error('this should not throw because query#2 already did'),
1148
814
  ),
1149
- useErrorBoundary: true,
815
+ throwErrors: true,
1150
816
  retry: false,
1151
817
  },
1152
818
  ],
@@ -1171,9 +837,13 @@ describe('useQueries', () => {
1171
837
 
1172
838
  await waitFor(() => rendered.getByText('error boundary'))
1173
839
  await waitFor(() => rendered.getByText('single query error'))
840
+ consoleMock.mockRestore()
1174
841
  })
1175
842
 
1176
- it("should throw error if in one of queries' queryFn throws and useErrorBoundary function resolves to true", async () => {
843
+ it("should throw error if in one of queries' queryFn throws and throwErrors function resolves to true", async () => {
844
+ const consoleMock = jest
845
+ .spyOn(console, 'error')
846
+ .mockImplementation(() => undefined)
1177
847
  const key1 = queryKey()
1178
848
  const key2 = queryKey()
1179
849
  const key3 = queryKey()
@@ -1187,10 +857,10 @@ describe('useQueries', () => {
1187
857
  queryFn: () =>
1188
858
  Promise.reject(
1189
859
  new Error(
1190
- 'this should not throw because useErrorBoundary function resolves to false',
860
+ 'this should not throw because throwErrors function resolves to false',
1191
861
  ),
1192
862
  ),
1193
- useErrorBoundary: () => false,
863
+ throwErrors: () => false,
1194
864
  retry: false,
1195
865
  },
1196
866
  {
@@ -1200,7 +870,7 @@ describe('useQueries', () => {
1200
870
  {
1201
871
  queryKey: key3,
1202
872
  queryFn: () => Promise.reject(new Error('single query error')),
1203
- useErrorBoundary: () => true,
873
+ throwErrors: () => true,
1204
874
  retry: false,
1205
875
  },
1206
876
  {
@@ -1209,7 +879,7 @@ describe('useQueries', () => {
1209
879
  Promise.reject(
1210
880
  new Error('this should not throw because query#3 already did'),
1211
881
  ),
1212
- useErrorBoundary: true,
882
+ throwErrors: true,
1213
883
  retry: false,
1214
884
  },
1215
885
  ],
@@ -1234,5 +904,31 @@ describe('useQueries', () => {
1234
904
 
1235
905
  await waitFor(() => rendered.getByText('error boundary'))
1236
906
  await waitFor(() => rendered.getByText('single query error'))
907
+ consoleMock.mockRestore()
908
+ })
909
+
910
+ it('should use provided custom queryClient', async () => {
911
+ const key = queryKey()
912
+ const queryFn = async () => {
913
+ return Promise.resolve('custom client')
914
+ }
915
+
916
+ function Page() {
917
+ const queries = useQueries({
918
+ queries: [
919
+ {
920
+ queryKey: key,
921
+ queryFn,
922
+ },
923
+ ],
924
+ queryClient,
925
+ })
926
+
927
+ return <div>data: {queries[0].data}</div>
928
+ }
929
+
930
+ const rendered = render(<Page></Page>)
931
+
932
+ await waitFor(() => rendered.getByText('data: custom client'))
1237
933
  })
1238
934
  })