@tanstack/solid-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.
- package/build/cjs/index.js +298 -0
- package/build/cjs/index.js.map +1 -0
- package/build/esm/index.js +283 -0
- package/build/esm/index.js.map +1 -0
- package/build/source/QueryClientProvider.jsx +21 -0
- package/build/source/__tests__/QueryClientProvider.test.jsx +120 -0
- package/build/{solid → source}/__tests__/createInfiniteQuery.test.jsx +228 -372
- package/build/{solid → source}/__tests__/createMutation.test.jsx +174 -165
- package/build/{solid → source}/__tests__/createQueries.test.jsx +86 -367
- package/build/{solid → source}/__tests__/createQuery.test.jsx +991 -943
- package/build/{solid → source}/__tests__/createQuery.types.test.jsx +35 -24
- package/build/{solid → source}/__tests__/suspense.test.jsx +177 -148
- package/build/{solid → source}/__tests__/transition.test.jsx +7 -4
- package/build/{solid → source}/__tests__/useIsFetching.test.jsx +68 -85
- package/build/{solid → source}/__tests__/useIsMutating.test.jsx +78 -93
- package/build/{solid → source}/__tests__/utils.jsx +3 -9
- package/build/source/createBaseQuery.js +147 -0
- package/build/source/createInfiniteQuery.js +6 -0
- package/build/{solid → source}/createMutation.js +7 -9
- package/build/source/createQueries.js +32 -0
- package/build/source/createQuery.js +6 -0
- package/build/{solid → source}/index.js +5 -3
- package/build/source/setBatchUpdatesFn.js +3 -0
- package/build/source/useIsFetching.js +12 -0
- package/build/source/useIsMutating.js +12 -0
- package/build/source/utils.js +7 -0
- package/build/types/QueryClientProvider.d.ts +9 -0
- package/build/{lib → types}/__tests__/utils.d.ts +3 -8
- package/build/types/createBaseQuery.d.ts +4 -0
- package/build/types/createInfiniteQuery.d.ts +3 -0
- package/build/types/createMutation.d.ts +3 -0
- package/build/{lib → types}/createQueries.d.ts +10 -8
- package/build/types/createQuery.d.ts +11 -0
- package/build/{lib → types}/index.d.ts +4 -3
- package/build/types/setBatchUpdatesFn.d.ts +1 -0
- package/build/types/types.d.ts +33 -0
- package/build/types/useIsFetching.d.ts +8 -0
- package/build/types/useIsMutating.d.ts +8 -0
- package/build/types/utils.d.ts +1 -0
- package/build/umd/index.js +2 -0
- package/build/umd/index.js.map +1 -0
- package/package.json +25 -17
- package/src/QueryClientProvider.tsx +17 -86
- package/src/__tests__/QueryClientProvider.test.tsx +37 -140
- package/src/__tests__/createInfiniteQuery.test.tsx +277 -508
- package/src/__tests__/createMutation.test.tsx +177 -225
- package/src/__tests__/createQueries.test.tsx +180 -528
- package/src/__tests__/createQuery.test.tsx +970 -1200
- package/src/__tests__/createQuery.types.test.tsx +30 -25
- package/src/__tests__/suspense.test.tsx +141 -178
- package/src/__tests__/transition.test.tsx +7 -4
- package/src/__tests__/useIsFetching.test.tsx +77 -122
- package/src/__tests__/useIsMutating.test.tsx +83 -128
- package/src/__tests__/utils.tsx +4 -11
- package/src/createBaseQuery.ts +148 -60
- package/src/createInfiniteQuery.ts +15 -94
- package/src/createMutation.ts +9 -63
- package/src/createQueries.ts +44 -55
- package/src/createQuery.ts +42 -127
- package/src/index.ts +6 -3
- package/src/setBatchUpdatesFn.ts +4 -0
- package/src/types.ts +81 -75
- package/src/useIsFetching.ts +12 -44
- package/src/useIsMutating.ts +13 -29
- package/src/utils.ts +5 -79
- package/build/lib/QueryClientProvider.d.ts +0 -24
- package/build/lib/QueryClientProvider.esm.js +0 -74
- package/build/lib/QueryClientProvider.esm.js.map +0 -1
- package/build/lib/QueryClientProvider.js +0 -80
- package/build/lib/QueryClientProvider.js.map +0 -1
- package/build/lib/QueryClientProvider.mjs +0 -74
- package/build/lib/QueryClientProvider.mjs.map +0 -1
- package/build/lib/createBaseQuery.d.ts +0 -4
- package/build/lib/createBaseQuery.esm.js +0 -93
- package/build/lib/createBaseQuery.esm.js.map +0 -1
- package/build/lib/createBaseQuery.js +0 -97
- package/build/lib/createBaseQuery.js.map +0 -1
- package/build/lib/createBaseQuery.mjs +0 -93
- package/build/lib/createBaseQuery.mjs.map +0 -1
- package/build/lib/createInfiniteQuery.d.ts +0 -5
- package/build/lib/createInfiniteQuery.esm.js +0 -20
- package/build/lib/createInfiniteQuery.esm.js.map +0 -1
- package/build/lib/createInfiniteQuery.js +0 -24
- package/build/lib/createInfiniteQuery.js.map +0 -1
- package/build/lib/createInfiniteQuery.mjs +0 -20
- package/build/lib/createInfiniteQuery.mjs.map +0 -1
- package/build/lib/createMutation.d.ts +0 -6
- package/build/lib/createMutation.esm.js +0 -45
- package/build/lib/createMutation.esm.js.map +0 -1
- package/build/lib/createMutation.js +0 -49
- package/build/lib/createMutation.js.map +0 -1
- package/build/lib/createMutation.mjs +0 -45
- package/build/lib/createMutation.mjs.map +0 -1
- package/build/lib/createQueries.esm.js +0 -54
- package/build/lib/createQueries.esm.js.map +0 -1
- package/build/lib/createQueries.js +0 -58
- package/build/lib/createQueries.js.map +0 -1
- package/build/lib/createQueries.mjs +0 -54
- package/build/lib/createQueries.mjs.map +0 -1
- package/build/lib/createQuery.d.ts +0 -23
- package/build/lib/createQuery.esm.js +0 -25
- package/build/lib/createQuery.esm.js.map +0 -1
- package/build/lib/createQuery.js +0 -29
- package/build/lib/createQuery.js.map +0 -1
- package/build/lib/createQuery.mjs +0 -25
- package/build/lib/createQuery.mjs.map +0 -1
- package/build/lib/index.esm.js +0 -9
- package/build/lib/index.esm.js.map +0 -1
- package/build/lib/index.js +0 -31
- package/build/lib/index.js.map +0 -1
- package/build/lib/index.mjs +0 -9
- package/build/lib/index.mjs.map +0 -1
- package/build/lib/types.d.ts +0 -47
- package/build/lib/useIsFetching.d.ts +0 -7
- package/build/lib/useIsFetching.esm.js +0 -29
- package/build/lib/useIsFetching.esm.js.map +0 -1
- package/build/lib/useIsFetching.js +0 -33
- package/build/lib/useIsFetching.js.map +0 -1
- package/build/lib/useIsFetching.mjs +0 -29
- package/build/lib/useIsFetching.mjs.map +0 -1
- package/build/lib/useIsMutating.d.ts +0 -8
- package/build/lib/useIsMutating.esm.js +0 -22
- package/build/lib/useIsMutating.esm.js.map +0 -1
- package/build/lib/useIsMutating.js +0 -26
- package/build/lib/useIsMutating.js.map +0 -1
- package/build/lib/useIsMutating.mjs +0 -22
- package/build/lib/useIsMutating.mjs.map +0 -1
- package/build/lib/utils.d.ts +0 -14
- package/build/lib/utils.esm.js +0 -63
- package/build/lib/utils.esm.js.map +0 -1
- package/build/lib/utils.js +0 -72
- package/build/lib/utils.js.map +0 -1
- package/build/lib/utils.mjs +0 -63
- package/build/lib/utils.mjs.map +0 -1
- package/build/solid/QueryClientProvider.jsx +0 -49
- package/build/solid/__tests__/QueryClientProvider.test.jsx +0 -185
- package/build/solid/createBaseQuery.js +0 -81
- package/build/solid/createInfiniteQuery.js +0 -16
- package/build/solid/createQueries.js +0 -39
- package/build/solid/createQuery.js +0 -16
- package/build/solid/useIsFetching.js +0 -23
- package/build/solid/useIsMutating.js +0 -16
- package/build/solid/utils.js +0 -45
- package/build/umd/index.development.js +0 -3577
- package/build/umd/index.development.js.map +0 -1
- package/build/umd/index.production.js +0 -2
- package/build/umd/index.production.js.map +0 -1
- /package/build/{solid → source}/types.js +0 -0
- /package/build/{lib → types}/__tests__/QueryClientProvider.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createInfiniteQuery.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createMutation.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createQueries.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createQuery.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createQuery.types.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/suspense.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/transition.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/useIsFetching.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/useIsMutating.test.d.ts +0 -0
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { fireEvent, render, screen, waitFor } from 'solid-testing-library'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
createContext,
|
|
5
|
-
createEffect,
|
|
6
|
-
createRenderEffect,
|
|
7
|
-
createSignal,
|
|
8
|
-
ErrorBoundary,
|
|
9
|
-
Show,
|
|
10
|
-
} from 'solid-js'
|
|
11
|
-
import type { QueryClient } from '..'
|
|
3
|
+
import { createEffect, createRenderEffect, createSignal, Show } from 'solid-js'
|
|
12
4
|
import { createQuery, QueryCache, QueryClientProvider, useIsFetching } from '..'
|
|
13
5
|
import { createQueryClient, queryKey, setActTimeout, sleep } from './utils'
|
|
14
6
|
|
|
@@ -27,18 +19,14 @@ describe('useIsFetching', () => {
|
|
|
27
19
|
function Query() {
|
|
28
20
|
const [ready, setReady] = createSignal(false)
|
|
29
21
|
|
|
30
|
-
createQuery(
|
|
31
|
-
key,
|
|
32
|
-
async () => {
|
|
22
|
+
createQuery(() => ({
|
|
23
|
+
queryKey: key,
|
|
24
|
+
queryFn: async () => {
|
|
33
25
|
await sleep(50)
|
|
34
26
|
return 'test'
|
|
35
27
|
},
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return ready()
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
)
|
|
28
|
+
enabled: ready(),
|
|
29
|
+
}))
|
|
42
30
|
|
|
43
31
|
return <button onClick={() => setReady(true)}>setReady</button>
|
|
44
32
|
}
|
|
@@ -82,18 +70,24 @@ describe('useIsFetching', () => {
|
|
|
82
70
|
}
|
|
83
71
|
|
|
84
72
|
function FirstQuery() {
|
|
85
|
-
createQuery(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
73
|
+
createQuery(() => ({
|
|
74
|
+
queryKey: key1,
|
|
75
|
+
queryFn: async () => {
|
|
76
|
+
await sleep(150)
|
|
77
|
+
return 'data'
|
|
78
|
+
},
|
|
79
|
+
}))
|
|
89
80
|
return null
|
|
90
81
|
}
|
|
91
82
|
|
|
92
83
|
function SecondQuery() {
|
|
93
|
-
createQuery(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
84
|
+
createQuery(() => ({
|
|
85
|
+
queryKey: key2,
|
|
86
|
+
queryFn: async () => {
|
|
87
|
+
await sleep(200)
|
|
88
|
+
return 'data'
|
|
89
|
+
},
|
|
90
|
+
}))
|
|
97
91
|
return null
|
|
98
92
|
}
|
|
99
93
|
|
|
@@ -103,7 +97,7 @@ describe('useIsFetching', () => {
|
|
|
103
97
|
createEffect(() => {
|
|
104
98
|
setActTimeout(() => {
|
|
105
99
|
setRenderSecond(true)
|
|
106
|
-
},
|
|
100
|
+
}, 100)
|
|
107
101
|
})
|
|
108
102
|
|
|
109
103
|
return (
|
|
@@ -134,24 +128,34 @@ describe('useIsFetching', () => {
|
|
|
134
128
|
const isFetchings: number[] = []
|
|
135
129
|
|
|
136
130
|
function One() {
|
|
137
|
-
createQuery(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
131
|
+
createQuery(() => ({
|
|
132
|
+
queryKey: key1,
|
|
133
|
+
queryFn: async () => {
|
|
134
|
+
await sleep(10)
|
|
135
|
+
return 'test'
|
|
136
|
+
},
|
|
137
|
+
}))
|
|
141
138
|
return null
|
|
142
139
|
}
|
|
143
140
|
|
|
144
141
|
function Two() {
|
|
145
|
-
createQuery(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
142
|
+
createQuery(() => ({
|
|
143
|
+
queryKey: key2,
|
|
144
|
+
queryFn: async () => {
|
|
145
|
+
await sleep(20)
|
|
146
|
+
return 'test'
|
|
147
|
+
},
|
|
148
|
+
}))
|
|
149
149
|
return null
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
function Page() {
|
|
153
153
|
const [started, setStarted] = createSignal(false)
|
|
154
|
-
const isFetching = useIsFetching(
|
|
154
|
+
const isFetching = useIsFetching(() => ({
|
|
155
|
+
filters: {
|
|
156
|
+
queryKey: key1,
|
|
157
|
+
},
|
|
158
|
+
}))
|
|
155
159
|
|
|
156
160
|
createRenderEffect(() => {
|
|
157
161
|
isFetchings.push(isFetching())
|
|
@@ -185,97 +189,18 @@ describe('useIsFetching', () => {
|
|
|
185
189
|
expect(isFetchings).toEqual(expect.not.arrayContaining([2]))
|
|
186
190
|
})
|
|
187
191
|
|
|
188
|
-
describe('with custom context', () => {
|
|
189
|
-
it('should update as queries start and stop fetching', async () => {
|
|
190
|
-
const context = createContext<QueryClient | undefined>(undefined)
|
|
191
|
-
|
|
192
|
-
const queryCache = new QueryCache()
|
|
193
|
-
const queryClient = createQueryClient({ queryCache })
|
|
194
|
-
const key = queryKey()
|
|
195
|
-
|
|
196
|
-
function Page() {
|
|
197
|
-
const [ready, setReady] = createSignal(false)
|
|
198
|
-
|
|
199
|
-
const isFetching = useIsFetching(undefined, { context: context })
|
|
200
|
-
|
|
201
|
-
createQuery(
|
|
202
|
-
key,
|
|
203
|
-
async () => {
|
|
204
|
-
await sleep(50)
|
|
205
|
-
return 'test'
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
get enabled() {
|
|
209
|
-
return ready()
|
|
210
|
-
},
|
|
211
|
-
context,
|
|
212
|
-
},
|
|
213
|
-
)
|
|
214
|
-
|
|
215
|
-
return (
|
|
216
|
-
<div>
|
|
217
|
-
<div>isFetching: {isFetching}</div>
|
|
218
|
-
<button onClick={() => setReady(true)}>setReady</button>
|
|
219
|
-
</div>
|
|
220
|
-
)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
render(() => (
|
|
224
|
-
<QueryClientProvider client={queryClient} context={context}>
|
|
225
|
-
<Page />
|
|
226
|
-
</QueryClientProvider>
|
|
227
|
-
))
|
|
228
|
-
|
|
229
|
-
await screen.findByText('isFetching: 0')
|
|
230
|
-
fireEvent.click(screen.getByRole('button', { name: /setReady/i }))
|
|
231
|
-
await screen.findByText('isFetching: 1')
|
|
232
|
-
await screen.findByText('isFetching: 0')
|
|
233
|
-
})
|
|
234
|
-
|
|
235
|
-
it('should throw if the context is not passed to useIsFetching', async () => {
|
|
236
|
-
const context = createContext<QueryClient | undefined>(undefined)
|
|
237
|
-
|
|
238
|
-
const queryCache = new QueryCache()
|
|
239
|
-
const queryClient = createQueryClient({ queryCache })
|
|
240
|
-
const key = queryKey()
|
|
241
|
-
|
|
242
|
-
function Page() {
|
|
243
|
-
const isFetching = useIsFetching()
|
|
244
|
-
|
|
245
|
-
createQuery(key, async () => 'test', {
|
|
246
|
-
enabled: true,
|
|
247
|
-
context,
|
|
248
|
-
useErrorBoundary: true,
|
|
249
|
-
})
|
|
250
|
-
|
|
251
|
-
return (
|
|
252
|
-
<div>
|
|
253
|
-
<div>isFetching: {isFetching}</div>
|
|
254
|
-
</div>
|
|
255
|
-
)
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
render(() => (
|
|
259
|
-
<QueryClientProvider client={queryClient} context={context}>
|
|
260
|
-
<ErrorBoundary fallback={() => <div>error boundary</div>}>
|
|
261
|
-
<Page />
|
|
262
|
-
</ErrorBoundary>
|
|
263
|
-
</QueryClientProvider>
|
|
264
|
-
))
|
|
265
|
-
|
|
266
|
-
await waitFor(() => screen.getByText('error boundary'))
|
|
267
|
-
})
|
|
268
|
-
})
|
|
269
|
-
|
|
270
192
|
it('should show the correct fetching state when mounted after a query', async () => {
|
|
271
193
|
const queryClient = createQueryClient()
|
|
272
194
|
const key = queryKey()
|
|
273
195
|
|
|
274
196
|
function Page() {
|
|
275
|
-
createQuery(
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
197
|
+
createQuery(() => ({
|
|
198
|
+
queryKey: key,
|
|
199
|
+
queryFn: async () => {
|
|
200
|
+
await sleep(10)
|
|
201
|
+
return 'test'
|
|
202
|
+
},
|
|
203
|
+
}))
|
|
279
204
|
|
|
280
205
|
const isFetching = useIsFetching()
|
|
281
206
|
|
|
@@ -295,4 +220,34 @@ describe('useIsFetching', () => {
|
|
|
295
220
|
await screen.findByText('isFetching: 1')
|
|
296
221
|
await screen.findByText('isFetching: 0')
|
|
297
222
|
})
|
|
223
|
+
|
|
224
|
+
it('should use provided custom queryClient', async () => {
|
|
225
|
+
const queryClient = createQueryClient()
|
|
226
|
+
const key = queryKey()
|
|
227
|
+
|
|
228
|
+
function Page() {
|
|
229
|
+
createQuery(
|
|
230
|
+
() => ({
|
|
231
|
+
queryKey: key,
|
|
232
|
+
queryFn: async () => {
|
|
233
|
+
await sleep(10)
|
|
234
|
+
return 'test'
|
|
235
|
+
},
|
|
236
|
+
}),
|
|
237
|
+
() => queryClient,
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
const isFetching = useIsFetching(() => ({ queryClient }))
|
|
241
|
+
|
|
242
|
+
return (
|
|
243
|
+
<div>
|
|
244
|
+
<div>isFetching: {isFetching}</div>
|
|
245
|
+
</div>
|
|
246
|
+
)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
render(() => <Page></Page>)
|
|
250
|
+
|
|
251
|
+
await screen.findByText('isFetching: 1')
|
|
252
|
+
})
|
|
298
253
|
})
|
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
import { fireEvent, screen, waitFor } from 'solid-testing-library'
|
|
2
|
-
import {
|
|
3
|
-
createMutation,
|
|
4
|
-
QueryClient,
|
|
5
|
-
QueryClientProvider,
|
|
6
|
-
useIsMutating,
|
|
7
|
-
} from '..'
|
|
2
|
+
import { createMutation, QueryClientProvider, useIsMutating } from '..'
|
|
8
3
|
import { createQueryClient, sleep } from './utils'
|
|
9
4
|
|
|
10
|
-
import {
|
|
11
|
-
createContext,
|
|
12
|
-
createEffect,
|
|
13
|
-
createRenderEffect,
|
|
14
|
-
createSignal,
|
|
15
|
-
ErrorBoundary,
|
|
16
|
-
Show,
|
|
17
|
-
} from 'solid-js'
|
|
5
|
+
import { createEffect, createRenderEffect, createSignal, Show } from 'solid-js'
|
|
18
6
|
import { render } from 'solid-testing-library'
|
|
19
7
|
import * as MutationCacheModule from '../../../query-core/src/mutationCache'
|
|
20
8
|
import { setActTimeout } from './utils'
|
|
@@ -33,14 +21,20 @@ describe('useIsMutating', () => {
|
|
|
33
21
|
}
|
|
34
22
|
|
|
35
23
|
function Mutations() {
|
|
36
|
-
const { mutate: mutate1 } = createMutation(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
})
|
|
24
|
+
const { mutate: mutate1 } = createMutation(() => ({
|
|
25
|
+
mutationKey: ['mutation1'],
|
|
26
|
+
mutationFn: async () => {
|
|
27
|
+
await sleep(150)
|
|
28
|
+
return 'data'
|
|
29
|
+
},
|
|
30
|
+
}))
|
|
31
|
+
const { mutate: mutate2 } = createMutation(() => ({
|
|
32
|
+
mutationKey: ['mutation2'],
|
|
33
|
+
mutationFn: async () => {
|
|
34
|
+
await sleep(50)
|
|
35
|
+
return 'data'
|
|
36
|
+
},
|
|
37
|
+
}))
|
|
44
38
|
|
|
45
39
|
createEffect(() => {
|
|
46
40
|
mutate1()
|
|
@@ -74,7 +68,9 @@ describe('useIsMutating', () => {
|
|
|
74
68
|
const queryClient = createQueryClient()
|
|
75
69
|
|
|
76
70
|
function IsMutating() {
|
|
77
|
-
const isMutating = useIsMutating(
|
|
71
|
+
const isMutating = useIsMutating(() => ({
|
|
72
|
+
filters: { mutationKey: ['mutation1'] },
|
|
73
|
+
}))
|
|
78
74
|
createRenderEffect(() => {
|
|
79
75
|
isMutatings.push(isMutating())
|
|
80
76
|
})
|
|
@@ -82,14 +78,20 @@ describe('useIsMutating', () => {
|
|
|
82
78
|
}
|
|
83
79
|
|
|
84
80
|
function Page() {
|
|
85
|
-
const { mutate: mutate1 } = createMutation(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
})
|
|
81
|
+
const { mutate: mutate1 } = createMutation(() => ({
|
|
82
|
+
mutationKey: ['mutation1'],
|
|
83
|
+
mutationFn: async () => {
|
|
84
|
+
await sleep(100)
|
|
85
|
+
return 'data'
|
|
86
|
+
},
|
|
87
|
+
}))
|
|
88
|
+
const { mutate: mutate2 } = createMutation(() => ({
|
|
89
|
+
mutationKey: ['mutation2'],
|
|
90
|
+
mutationFn: async () => {
|
|
91
|
+
await sleep(100)
|
|
92
|
+
return 'data'
|
|
93
|
+
},
|
|
94
|
+
}))
|
|
93
95
|
|
|
94
96
|
createEffect(() => {
|
|
95
97
|
mutate1()
|
|
@@ -113,10 +115,12 @@ describe('useIsMutating', () => {
|
|
|
113
115
|
const queryClient = createQueryClient()
|
|
114
116
|
|
|
115
117
|
function IsMutating() {
|
|
116
|
-
const isMutating = useIsMutating({
|
|
117
|
-
|
|
118
|
-
mutation
|
|
119
|
-
|
|
118
|
+
const isMutating = useIsMutating(() => ({
|
|
119
|
+
filters: {
|
|
120
|
+
predicate: (mutation) =>
|
|
121
|
+
mutation.options.mutationKey?.[0] === 'mutation1',
|
|
122
|
+
},
|
|
123
|
+
}))
|
|
120
124
|
createRenderEffect(() => {
|
|
121
125
|
isMutatings.push(isMutating())
|
|
122
126
|
})
|
|
@@ -124,14 +128,20 @@ describe('useIsMutating', () => {
|
|
|
124
128
|
}
|
|
125
129
|
|
|
126
130
|
function Page() {
|
|
127
|
-
const { mutate: mutate1 } = createMutation(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
})
|
|
131
|
+
const { mutate: mutate1 } = createMutation(() => ({
|
|
132
|
+
mutationKey: ['mutation1'],
|
|
133
|
+
mutationFn: async () => {
|
|
134
|
+
await sleep(100)
|
|
135
|
+
return 'data'
|
|
136
|
+
},
|
|
137
|
+
}))
|
|
138
|
+
const { mutate: mutate2 } = createMutation(() => ({
|
|
139
|
+
mutationKey: ['mutation2'],
|
|
140
|
+
mutationFn: async () => {
|
|
141
|
+
await sleep(100)
|
|
142
|
+
return 'data'
|
|
143
|
+
},
|
|
144
|
+
}))
|
|
135
145
|
|
|
136
146
|
createEffect(() => {
|
|
137
147
|
mutate1()
|
|
@@ -176,10 +186,13 @@ describe('useIsMutating', () => {
|
|
|
176
186
|
|
|
177
187
|
function Page() {
|
|
178
188
|
const [mounted, setMounted] = createSignal(true)
|
|
179
|
-
const { mutate: mutate1 } = createMutation(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
189
|
+
const { mutate: mutate1 } = createMutation(() => ({
|
|
190
|
+
mutationKey: ['mutation1'],
|
|
191
|
+
mutationFn: async () => {
|
|
192
|
+
await sleep(10)
|
|
193
|
+
return 'data'
|
|
194
|
+
},
|
|
195
|
+
}))
|
|
183
196
|
|
|
184
197
|
createEffect(() => {
|
|
185
198
|
mutate1()
|
|
@@ -209,93 +222,35 @@ describe('useIsMutating', () => {
|
|
|
209
222
|
MutationCacheSpy.mockRestore()
|
|
210
223
|
})
|
|
211
224
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const context = createContext<QueryClient | undefined>(undefined)
|
|
215
|
-
|
|
216
|
-
const isMutatings: number[] = []
|
|
217
|
-
const queryClient = new QueryClient()
|
|
218
|
-
|
|
219
|
-
function IsMutating() {
|
|
220
|
-
const isMutating = useIsMutating(undefined, { context })
|
|
221
|
-
|
|
222
|
-
createRenderEffect(() => {
|
|
223
|
-
isMutatings.push(isMutating())
|
|
224
|
-
})
|
|
225
|
-
|
|
226
|
-
return null
|
|
227
|
-
}
|
|
225
|
+
it('should use provided custom queryClient', async () => {
|
|
226
|
+
const queryClient = createQueryClient()
|
|
228
227
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
{ context },
|
|
237
|
-
)
|
|
238
|
-
const { mutate: mutate2 } = createMutation(
|
|
239
|
-
['mutation2'],
|
|
240
|
-
async () => {
|
|
241
|
-
await sleep(50)
|
|
228
|
+
function Page() {
|
|
229
|
+
const isMutating = useIsMutating(() => ({ queryClient }))
|
|
230
|
+
const { mutate } = createMutation(
|
|
231
|
+
() => ({
|
|
232
|
+
mutationKey: ['mutation1'],
|
|
233
|
+
mutationFn: async () => {
|
|
234
|
+
await sleep(10)
|
|
242
235
|
return 'data'
|
|
243
236
|
},
|
|
244
|
-
|
|
245
|
-
)
|
|
246
|
-
|
|
247
|
-
createEffect(() => {
|
|
248
|
-
mutate1()
|
|
249
|
-
setActTimeout(() => {
|
|
250
|
-
mutate2()
|
|
251
|
-
}, 50)
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
return <IsMutating />
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
render(() => (
|
|
258
|
-
<QueryClientProvider client={queryClient} context={context}>
|
|
259
|
-
<Page />
|
|
260
|
-
</QueryClientProvider>
|
|
261
|
-
))
|
|
262
|
-
await waitFor(() => expect(isMutatings).toEqual([0, 1, 2, 1, 0]))
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
it('should throw if the context is not passed to useIsMutating', async () => {
|
|
266
|
-
const context = createContext<QueryClient | undefined>(undefined)
|
|
267
|
-
|
|
268
|
-
const isMutatings: number[] = []
|
|
269
|
-
const queryClient = new QueryClient()
|
|
270
|
-
|
|
271
|
-
function IsMutating() {
|
|
272
|
-
const isMutating = useIsMutating(undefined)
|
|
273
|
-
isMutatings.push(isMutating())
|
|
274
|
-
return null
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
function Page() {
|
|
278
|
-
const { mutate } = createMutation(['mutation'], async () => 'data', {
|
|
279
|
-
useErrorBoundary: true,
|
|
280
|
-
context,
|
|
281
|
-
})
|
|
237
|
+
}),
|
|
238
|
+
() => queryClient,
|
|
239
|
+
)
|
|
282
240
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
241
|
+
createEffect(() => {
|
|
242
|
+
mutate()
|
|
243
|
+
})
|
|
286
244
|
|
|
287
|
-
|
|
288
|
-
|
|
245
|
+
return (
|
|
246
|
+
<div>
|
|
247
|
+
<div>mutating: {isMutating}</div>
|
|
248
|
+
</div>
|
|
249
|
+
)
|
|
250
|
+
}
|
|
289
251
|
|
|
290
|
-
|
|
291
|
-
<QueryClientProvider client={queryClient} context={context}>
|
|
292
|
-
<ErrorBoundary fallback={() => <div>error boundary</div>}>
|
|
293
|
-
<Page />
|
|
294
|
-
</ErrorBoundary>
|
|
295
|
-
</QueryClientProvider>
|
|
296
|
-
))
|
|
252
|
+
render(() => <Page></Page>)
|
|
297
253
|
|
|
298
|
-
|
|
299
|
-
})
|
|
254
|
+
await waitFor(() => screen.findByText('mutating: 1'))
|
|
300
255
|
})
|
|
301
256
|
})
|
package/src/__tests__/utils.tsx
CHANGED
|
@@ -4,9 +4,9 @@ import type { ParentProps } from 'solid-js'
|
|
|
4
4
|
import { createEffect, createSignal, onCleanup, Show } from 'solid-js'
|
|
5
5
|
|
|
6
6
|
let queryKeyCount = 0
|
|
7
|
-
export function queryKey():
|
|
8
|
-
|
|
9
|
-
return
|
|
7
|
+
export function queryKey(): Array<string> {
|
|
8
|
+
queryKeyCount++
|
|
9
|
+
return [`query_${queryKeyCount}`]
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const Blink = (
|
|
@@ -30,8 +30,7 @@ export const Blink = (
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export function createQueryClient(config?: QueryClientConfig): QueryClient {
|
|
33
|
-
|
|
34
|
-
return new QueryClient({ logger: mockLogger, ...config })
|
|
33
|
+
return new QueryClient(config)
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
export function mockVisibilityState(value: DocumentVisibilityState) {
|
|
@@ -42,12 +41,6 @@ export function mockNavigatorOnLine(value: boolean) {
|
|
|
42
41
|
return jest.spyOn(navigator, 'onLine', 'get').mockReturnValue(value)
|
|
43
42
|
}
|
|
44
43
|
|
|
45
|
-
export const mockLogger = {
|
|
46
|
-
log: jest.fn(),
|
|
47
|
-
warn: jest.fn(),
|
|
48
|
-
error: jest.fn(),
|
|
49
|
-
}
|
|
50
|
-
|
|
51
44
|
export function sleep(timeout: number): Promise<void> {
|
|
52
45
|
return new Promise((resolve, _reject) => {
|
|
53
46
|
setTimeout(resolve, timeout)
|