@tanstack/query-core 5.87.4 → 5.89.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/legacy/{hydration-_hO-y142.d.cts → hydration-DofhGwZq.d.cts} +57 -51
- package/build/legacy/{hydration-BYonJkjc.d.ts → hydration-iULCH7y8.d.ts} +57 -51
- package/build/legacy/hydration.d.cts +1 -1
- package/build/legacy/hydration.d.ts +1 -1
- package/build/legacy/index.d.cts +1 -1
- package/build/legacy/index.d.ts +1 -1
- package/build/legacy/infiniteQueryBehavior.d.cts +1 -1
- package/build/legacy/infiniteQueryBehavior.d.ts +1 -1
- package/build/legacy/infiniteQueryObserver.d.cts +1 -1
- package/build/legacy/infiniteQueryObserver.d.ts +1 -1
- package/build/legacy/mutation.cjs +44 -12
- package/build/legacy/mutation.cjs.map +1 -1
- package/build/legacy/mutation.d.cts +1 -1
- package/build/legacy/mutation.d.ts +1 -1
- package/build/legacy/mutation.js +44 -12
- package/build/legacy/mutation.js.map +1 -1
- package/build/legacy/mutationCache.cjs +1 -0
- package/build/legacy/mutationCache.cjs.map +1 -1
- package/build/legacy/mutationCache.d.cts +1 -1
- package/build/legacy/mutationCache.d.ts +1 -1
- package/build/legacy/mutationCache.js +1 -0
- package/build/legacy/mutationCache.js.map +1 -1
- package/build/legacy/mutationObserver.cjs +29 -4
- package/build/legacy/mutationObserver.cjs.map +1 -1
- package/build/legacy/mutationObserver.d.cts +1 -1
- package/build/legacy/mutationObserver.d.ts +1 -1
- package/build/legacy/mutationObserver.js +29 -4
- package/build/legacy/mutationObserver.js.map +1 -1
- package/build/legacy/queriesObserver.d.cts +1 -1
- package/build/legacy/queriesObserver.d.ts +1 -1
- package/build/legacy/query.d.cts +1 -1
- package/build/legacy/query.d.ts +1 -1
- package/build/legacy/queryCache.d.cts +1 -1
- package/build/legacy/queryCache.d.ts +1 -1
- package/build/legacy/queryClient.cjs.map +1 -1
- package/build/legacy/queryClient.d.cts +1 -1
- package/build/legacy/queryClient.d.ts +1 -1
- package/build/legacy/queryClient.js.map +1 -1
- package/build/legacy/queryObserver.d.cts +1 -1
- package/build/legacy/queryObserver.d.ts +1 -1
- package/build/legacy/retryer.d.cts +1 -1
- package/build/legacy/retryer.d.ts +1 -1
- package/build/legacy/streamedQuery.d.cts +1 -1
- package/build/legacy/streamedQuery.d.ts +1 -1
- package/build/legacy/types.cjs.map +1 -1
- package/build/legacy/types.d.cts +1 -1
- package/build/legacy/types.d.ts +1 -1
- package/build/legacy/types.js.map +1 -1
- package/build/legacy/utils.cjs.map +1 -1
- package/build/legacy/utils.d.cts +1 -1
- package/build/legacy/utils.d.ts +1 -1
- package/build/legacy/utils.js.map +1 -1
- package/build/modern/{hydration-_hO-y142.d.cts → hydration-DofhGwZq.d.cts} +57 -51
- package/build/modern/{hydration-BYonJkjc.d.ts → hydration-iULCH7y8.d.ts} +57 -51
- package/build/modern/hydration.d.cts +1 -1
- package/build/modern/hydration.d.ts +1 -1
- package/build/modern/index.d.cts +1 -1
- package/build/modern/index.d.ts +1 -1
- package/build/modern/infiniteQueryBehavior.d.cts +1 -1
- package/build/modern/infiniteQueryBehavior.d.ts +1 -1
- package/build/modern/infiniteQueryObserver.d.cts +1 -1
- package/build/modern/infiniteQueryObserver.d.ts +1 -1
- package/build/modern/mutation.cjs +39 -11
- package/build/modern/mutation.cjs.map +1 -1
- package/build/modern/mutation.d.cts +1 -1
- package/build/modern/mutation.d.ts +1 -1
- package/build/modern/mutation.js +39 -11
- package/build/modern/mutation.js.map +1 -1
- package/build/modern/mutationCache.cjs +1 -0
- package/build/modern/mutationCache.cjs.map +1 -1
- package/build/modern/mutationCache.d.cts +1 -1
- package/build/modern/mutationCache.d.ts +1 -1
- package/build/modern/mutationCache.js +1 -0
- package/build/modern/mutationCache.js.map +1 -1
- package/build/modern/mutationObserver.cjs +26 -4
- package/build/modern/mutationObserver.cjs.map +1 -1
- package/build/modern/mutationObserver.d.cts +1 -1
- package/build/modern/mutationObserver.d.ts +1 -1
- package/build/modern/mutationObserver.js +26 -4
- package/build/modern/mutationObserver.js.map +1 -1
- package/build/modern/queriesObserver.d.cts +1 -1
- package/build/modern/queriesObserver.d.ts +1 -1
- package/build/modern/query.d.cts +1 -1
- package/build/modern/query.d.ts +1 -1
- package/build/modern/queryCache.d.cts +1 -1
- package/build/modern/queryCache.d.ts +1 -1
- package/build/modern/queryClient.cjs.map +1 -1
- package/build/modern/queryClient.d.cts +1 -1
- package/build/modern/queryClient.d.ts +1 -1
- package/build/modern/queryClient.js.map +1 -1
- package/build/modern/queryObserver.d.cts +1 -1
- package/build/modern/queryObserver.d.ts +1 -1
- package/build/modern/retryer.d.cts +1 -1
- package/build/modern/retryer.d.ts +1 -1
- package/build/modern/streamedQuery.d.cts +1 -1
- package/build/modern/streamedQuery.d.ts +1 -1
- package/build/modern/types.cjs.map +1 -1
- package/build/modern/types.d.cts +1 -1
- package/build/modern/types.d.ts +1 -1
- package/build/modern/types.js.map +1 -1
- package/build/modern/utils.cjs.map +1 -1
- package/build/modern/utils.d.cts +1 -1
- package/build/modern/utils.d.ts +1 -1
- package/build/modern/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/mutation.ts +61 -24
- package/src/mutationCache.ts +21 -11
- package/src/mutationObserver.ts +62 -22
- package/src/queryClient.ts +2 -2
- package/src/types.ts +67 -29
- package/src/utils.ts +2 -2
package/src/mutation.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Removable } from './removable'
|
|
|
3
3
|
import { createRetryer } from './retryer'
|
|
4
4
|
import type {
|
|
5
5
|
DefaultError,
|
|
6
|
+
MutationFunctionContext,
|
|
6
7
|
MutationMeta,
|
|
7
8
|
MutationOptions,
|
|
8
9
|
MutationStatus,
|
|
@@ -10,23 +11,25 @@ import type {
|
|
|
10
11
|
import type { MutationCache } from './mutationCache'
|
|
11
12
|
import type { MutationObserver } from './mutationObserver'
|
|
12
13
|
import type { Retryer } from './retryer'
|
|
14
|
+
import type { QueryClient } from './queryClient'
|
|
13
15
|
|
|
14
16
|
// TYPES
|
|
15
17
|
|
|
16
|
-
interface MutationConfig<TData, TError, TVariables,
|
|
18
|
+
interface MutationConfig<TData, TError, TVariables, TOnMutateResult> {
|
|
19
|
+
client: QueryClient
|
|
17
20
|
mutationId: number
|
|
18
21
|
mutationCache: MutationCache
|
|
19
|
-
options: MutationOptions<TData, TError, TVariables,
|
|
20
|
-
state?: MutationState<TData, TError, TVariables,
|
|
22
|
+
options: MutationOptions<TData, TError, TVariables, TOnMutateResult>
|
|
23
|
+
state?: MutationState<TData, TError, TVariables, TOnMutateResult>
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
export interface MutationState<
|
|
24
27
|
TData = unknown,
|
|
25
28
|
TError = DefaultError,
|
|
26
29
|
TVariables = unknown,
|
|
27
|
-
|
|
30
|
+
TOnMutateResult = unknown,
|
|
28
31
|
> {
|
|
29
|
-
context:
|
|
32
|
+
context: TOnMutateResult | undefined
|
|
30
33
|
data: TData | undefined
|
|
31
34
|
error: TError | null
|
|
32
35
|
failureCount: number
|
|
@@ -43,11 +46,11 @@ interface FailedAction<TError> {
|
|
|
43
46
|
error: TError | null
|
|
44
47
|
}
|
|
45
48
|
|
|
46
|
-
interface PendingAction<TVariables,
|
|
49
|
+
interface PendingAction<TVariables, TOnMutateResult> {
|
|
47
50
|
type: 'pending'
|
|
48
51
|
isPaused: boolean
|
|
49
52
|
variables?: TVariables
|
|
50
|
-
context?:
|
|
53
|
+
context?: TOnMutateResult
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
interface SuccessAction<TData> {
|
|
@@ -68,11 +71,11 @@ interface ContinueAction {
|
|
|
68
71
|
type: 'continue'
|
|
69
72
|
}
|
|
70
73
|
|
|
71
|
-
export type Action<TData, TError, TVariables,
|
|
74
|
+
export type Action<TData, TError, TVariables, TOnMutateResult> =
|
|
72
75
|
| ContinueAction
|
|
73
76
|
| ErrorAction<TError>
|
|
74
77
|
| FailedAction<TError>
|
|
75
|
-
| PendingAction<TVariables,
|
|
78
|
+
| PendingAction<TVariables, TOnMutateResult>
|
|
76
79
|
| PauseAction
|
|
77
80
|
| SuccessAction<TData>
|
|
78
81
|
|
|
@@ -82,19 +85,25 @@ export class Mutation<
|
|
|
82
85
|
TData = unknown,
|
|
83
86
|
TError = DefaultError,
|
|
84
87
|
TVariables = unknown,
|
|
85
|
-
|
|
88
|
+
TOnMutateResult = unknown,
|
|
86
89
|
> extends Removable {
|
|
87
|
-
state: MutationState<TData, TError, TVariables,
|
|
88
|
-
options!: MutationOptions<TData, TError, TVariables,
|
|
90
|
+
state: MutationState<TData, TError, TVariables, TOnMutateResult>
|
|
91
|
+
options!: MutationOptions<TData, TError, TVariables, TOnMutateResult>
|
|
89
92
|
readonly mutationId: number
|
|
90
93
|
|
|
91
|
-
#
|
|
94
|
+
#client: QueryClient
|
|
95
|
+
#observers: Array<
|
|
96
|
+
MutationObserver<TData, TError, TVariables, TOnMutateResult>
|
|
97
|
+
>
|
|
92
98
|
#mutationCache: MutationCache
|
|
93
99
|
#retryer?: Retryer<TData>
|
|
94
100
|
|
|
95
|
-
constructor(
|
|
101
|
+
constructor(
|
|
102
|
+
config: MutationConfig<TData, TError, TVariables, TOnMutateResult>,
|
|
103
|
+
) {
|
|
96
104
|
super()
|
|
97
105
|
|
|
106
|
+
this.#client = config.client
|
|
98
107
|
this.mutationId = config.mutationId
|
|
99
108
|
this.#mutationCache = config.mutationCache
|
|
100
109
|
this.#observers = []
|
|
@@ -105,7 +114,7 @@ export class Mutation<
|
|
|
105
114
|
}
|
|
106
115
|
|
|
107
116
|
setOptions(
|
|
108
|
-
options: MutationOptions<TData, TError, TVariables,
|
|
117
|
+
options: MutationOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
109
118
|
): void {
|
|
110
119
|
this.options = options
|
|
111
120
|
|
|
@@ -166,12 +175,19 @@ export class Mutation<
|
|
|
166
175
|
this.#dispatch({ type: 'continue' })
|
|
167
176
|
}
|
|
168
177
|
|
|
178
|
+
const mutationFnContext = {
|
|
179
|
+
client: this.#client,
|
|
180
|
+
meta: this.options.meta,
|
|
181
|
+
mutationKey: this.options.mutationKey,
|
|
182
|
+
} satisfies MutationFunctionContext
|
|
183
|
+
|
|
169
184
|
this.#retryer = createRetryer({
|
|
170
185
|
fn: () => {
|
|
171
186
|
if (!this.options.mutationFn) {
|
|
172
187
|
return Promise.reject(new Error('No mutationFn found'))
|
|
173
188
|
}
|
|
174
|
-
|
|
189
|
+
|
|
190
|
+
return this.options.mutationFn(variables, mutationFnContext)
|
|
175
191
|
},
|
|
176
192
|
onFail: (failureCount, error) => {
|
|
177
193
|
this.#dispatch({ type: 'failed', failureCount, error })
|
|
@@ -199,8 +215,12 @@ export class Mutation<
|
|
|
199
215
|
await this.#mutationCache.config.onMutate?.(
|
|
200
216
|
variables,
|
|
201
217
|
this as Mutation<unknown, unknown, unknown, unknown>,
|
|
218
|
+
mutationFnContext,
|
|
219
|
+
)
|
|
220
|
+
const context = await this.options.onMutate?.(
|
|
221
|
+
variables,
|
|
222
|
+
mutationFnContext,
|
|
202
223
|
)
|
|
203
|
-
const context = await this.options.onMutate?.(variables)
|
|
204
224
|
if (context !== this.state.context) {
|
|
205
225
|
this.#dispatch({
|
|
206
226
|
type: 'pending',
|
|
@@ -218,9 +238,15 @@ export class Mutation<
|
|
|
218
238
|
variables,
|
|
219
239
|
this.state.context,
|
|
220
240
|
this as Mutation<unknown, unknown, unknown, unknown>,
|
|
241
|
+
mutationFnContext,
|
|
221
242
|
)
|
|
222
243
|
|
|
223
|
-
await this.options.onSuccess?.(
|
|
244
|
+
await this.options.onSuccess?.(
|
|
245
|
+
data,
|
|
246
|
+
variables,
|
|
247
|
+
this.state.context,
|
|
248
|
+
mutationFnContext,
|
|
249
|
+
)
|
|
224
250
|
|
|
225
251
|
// Notify cache callback
|
|
226
252
|
await this.#mutationCache.config.onSettled?.(
|
|
@@ -229,9 +255,16 @@ export class Mutation<
|
|
|
229
255
|
this.state.variables,
|
|
230
256
|
this.state.context,
|
|
231
257
|
this as Mutation<unknown, unknown, unknown, unknown>,
|
|
258
|
+
mutationFnContext,
|
|
232
259
|
)
|
|
233
260
|
|
|
234
|
-
await this.options.onSettled?.(
|
|
261
|
+
await this.options.onSettled?.(
|
|
262
|
+
data,
|
|
263
|
+
null,
|
|
264
|
+
variables,
|
|
265
|
+
this.state.context,
|
|
266
|
+
mutationFnContext,
|
|
267
|
+
)
|
|
235
268
|
|
|
236
269
|
this.#dispatch({ type: 'success', data })
|
|
237
270
|
return data
|
|
@@ -243,12 +276,14 @@ export class Mutation<
|
|
|
243
276
|
variables,
|
|
244
277
|
this.state.context,
|
|
245
278
|
this as Mutation<unknown, unknown, unknown, unknown>,
|
|
279
|
+
mutationFnContext,
|
|
246
280
|
)
|
|
247
281
|
|
|
248
282
|
await this.options.onError?.(
|
|
249
283
|
error as TError,
|
|
250
284
|
variables,
|
|
251
285
|
this.state.context,
|
|
286
|
+
mutationFnContext,
|
|
252
287
|
)
|
|
253
288
|
|
|
254
289
|
// Notify cache callback
|
|
@@ -258,6 +293,7 @@ export class Mutation<
|
|
|
258
293
|
this.state.variables,
|
|
259
294
|
this.state.context,
|
|
260
295
|
this as Mutation<unknown, unknown, unknown, unknown>,
|
|
296
|
+
mutationFnContext,
|
|
261
297
|
)
|
|
262
298
|
|
|
263
299
|
await this.options.onSettled?.(
|
|
@@ -265,6 +301,7 @@ export class Mutation<
|
|
|
265
301
|
error as TError,
|
|
266
302
|
variables,
|
|
267
303
|
this.state.context,
|
|
304
|
+
mutationFnContext,
|
|
268
305
|
)
|
|
269
306
|
throw error
|
|
270
307
|
} finally {
|
|
@@ -275,10 +312,10 @@ export class Mutation<
|
|
|
275
312
|
}
|
|
276
313
|
}
|
|
277
314
|
|
|
278
|
-
#dispatch(action: Action<TData, TError, TVariables,
|
|
315
|
+
#dispatch(action: Action<TData, TError, TVariables, TOnMutateResult>): void {
|
|
279
316
|
const reducer = (
|
|
280
|
-
state: MutationState<TData, TError, TVariables,
|
|
281
|
-
): MutationState<TData, TError, TVariables,
|
|
317
|
+
state: MutationState<TData, TError, TVariables, TOnMutateResult>,
|
|
318
|
+
): MutationState<TData, TError, TVariables, TOnMutateResult> => {
|
|
282
319
|
switch (action.type) {
|
|
283
320
|
case 'failed':
|
|
284
321
|
return {
|
|
@@ -350,8 +387,8 @@ export function getDefaultState<
|
|
|
350
387
|
TData,
|
|
351
388
|
TError,
|
|
352
389
|
TVariables,
|
|
353
|
-
|
|
354
|
-
>(): MutationState<TData, TError, TVariables,
|
|
390
|
+
TOnMutateResult,
|
|
391
|
+
>(): MutationState<TData, TError, TVariables, TOnMutateResult> {
|
|
355
392
|
return {
|
|
356
393
|
context: undefined,
|
|
357
394
|
data: undefined,
|
package/src/mutationCache.ts
CHANGED
|
@@ -3,7 +3,12 @@ import { Mutation } from './mutation'
|
|
|
3
3
|
import { matchMutation, noop } from './utils'
|
|
4
4
|
import { Subscribable } from './subscribable'
|
|
5
5
|
import type { MutationObserver } from './mutationObserver'
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
DefaultError,
|
|
8
|
+
MutationFunctionContext,
|
|
9
|
+
MutationOptions,
|
|
10
|
+
NotifyEvent,
|
|
11
|
+
} from './types'
|
|
7
12
|
import type { QueryClient } from './queryClient'
|
|
8
13
|
import type { Action, MutationState } from './mutation'
|
|
9
14
|
import type { MutationFilters } from './utils'
|
|
@@ -14,25 +19,29 @@ interface MutationCacheConfig {
|
|
|
14
19
|
onError?: (
|
|
15
20
|
error: DefaultError,
|
|
16
21
|
variables: unknown,
|
|
17
|
-
|
|
22
|
+
onMutateResult: unknown,
|
|
18
23
|
mutation: Mutation<unknown, unknown, unknown>,
|
|
24
|
+
context: MutationFunctionContext,
|
|
19
25
|
) => Promise<unknown> | unknown
|
|
20
26
|
onSuccess?: (
|
|
21
27
|
data: unknown,
|
|
22
28
|
variables: unknown,
|
|
23
|
-
|
|
29
|
+
onMutateResult: unknown,
|
|
24
30
|
mutation: Mutation<unknown, unknown, unknown>,
|
|
31
|
+
context: MutationFunctionContext,
|
|
25
32
|
) => Promise<unknown> | unknown
|
|
26
33
|
onMutate?: (
|
|
27
34
|
variables: unknown,
|
|
28
35
|
mutation: Mutation<unknown, unknown, unknown>,
|
|
36
|
+
context: MutationFunctionContext,
|
|
29
37
|
) => Promise<unknown> | unknown
|
|
30
38
|
onSettled?: (
|
|
31
39
|
data: unknown | undefined,
|
|
32
40
|
error: DefaultError | null,
|
|
33
41
|
variables: unknown,
|
|
34
|
-
|
|
42
|
+
onMutateResult: unknown,
|
|
35
43
|
mutation: Mutation<unknown, unknown, unknown>,
|
|
44
|
+
context: MutationFunctionContext,
|
|
36
45
|
) => Promise<unknown> | unknown
|
|
37
46
|
}
|
|
38
47
|
|
|
@@ -93,12 +102,13 @@ export class MutationCache extends Subscribable<MutationCacheListener> {
|
|
|
93
102
|
this.#mutationId = 0
|
|
94
103
|
}
|
|
95
104
|
|
|
96
|
-
build<TData, TError, TVariables,
|
|
105
|
+
build<TData, TError, TVariables, TOnMutateResult>(
|
|
97
106
|
client: QueryClient,
|
|
98
|
-
options: MutationOptions<TData, TError, TVariables,
|
|
99
|
-
state?: MutationState<TData, TError, TVariables,
|
|
100
|
-
): Mutation<TData, TError, TVariables,
|
|
107
|
+
options: MutationOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
108
|
+
state?: MutationState<TData, TError, TVariables, TOnMutateResult>,
|
|
109
|
+
): Mutation<TData, TError, TVariables, TOnMutateResult> {
|
|
101
110
|
const mutation = new Mutation({
|
|
111
|
+
client,
|
|
102
112
|
mutationCache: this,
|
|
103
113
|
mutationId: ++this.#mutationId,
|
|
104
114
|
options: client.defaultMutationOptions(options),
|
|
@@ -195,15 +205,15 @@ export class MutationCache extends Subscribable<MutationCacheListener> {
|
|
|
195
205
|
TData = unknown,
|
|
196
206
|
TError = DefaultError,
|
|
197
207
|
TVariables = any,
|
|
198
|
-
|
|
208
|
+
TOnMutateResult = unknown,
|
|
199
209
|
>(
|
|
200
210
|
filters: MutationFilters,
|
|
201
|
-
): Mutation<TData, TError, TVariables,
|
|
211
|
+
): Mutation<TData, TError, TVariables, TOnMutateResult> | undefined {
|
|
202
212
|
const defaultedFilters = { exact: true, ...filters }
|
|
203
213
|
|
|
204
214
|
return this.getAll().find((mutation) =>
|
|
205
215
|
matchMutation(defaultedFilters, mutation),
|
|
206
|
-
) as Mutation<TData, TError, TVariables,
|
|
216
|
+
) as Mutation<TData, TError, TVariables, TOnMutateResult> | undefined
|
|
207
217
|
}
|
|
208
218
|
|
|
209
219
|
findAll(filters: MutationFilters = {}): Array<Mutation> {
|
package/src/mutationObserver.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { QueryClient } from './queryClient'
|
|
|
6
6
|
import type {
|
|
7
7
|
DefaultError,
|
|
8
8
|
MutateOptions,
|
|
9
|
+
MutationFunctionContext,
|
|
9
10
|
MutationObserverOptions,
|
|
10
11
|
MutationObserverResult,
|
|
11
12
|
} from './types'
|
|
@@ -13,8 +14,8 @@ import type { Action, Mutation } from './mutation'
|
|
|
13
14
|
|
|
14
15
|
// TYPES
|
|
15
16
|
|
|
16
|
-
type MutationObserverListener<TData, TError, TVariables,
|
|
17
|
-
result: MutationObserverResult<TData, TError, TVariables,
|
|
17
|
+
type MutationObserverListener<TData, TError, TVariables, TOnMutateResult> = (
|
|
18
|
+
result: MutationObserverResult<TData, TError, TVariables, TOnMutateResult>,
|
|
18
19
|
) => void
|
|
19
20
|
|
|
20
21
|
// CLASS
|
|
@@ -23,21 +24,30 @@ export class MutationObserver<
|
|
|
23
24
|
TData = unknown,
|
|
24
25
|
TError = DefaultError,
|
|
25
26
|
TVariables = void,
|
|
26
|
-
|
|
27
|
+
TOnMutateResult = unknown,
|
|
27
28
|
> extends Subscribable<
|
|
28
|
-
MutationObserverListener<TData, TError, TVariables,
|
|
29
|
+
MutationObserverListener<TData, TError, TVariables, TOnMutateResult>
|
|
29
30
|
> {
|
|
30
|
-
options!: MutationObserverOptions<TData, TError, TVariables,
|
|
31
|
+
options!: MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>
|
|
31
32
|
|
|
32
33
|
#client: QueryClient
|
|
33
|
-
#currentResult: MutationObserverResult<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
#currentResult: MutationObserverResult<
|
|
35
|
+
TData,
|
|
36
|
+
TError,
|
|
37
|
+
TVariables,
|
|
38
|
+
TOnMutateResult
|
|
39
|
+
> = undefined!
|
|
40
|
+
#currentMutation?: Mutation<TData, TError, TVariables, TOnMutateResult>
|
|
41
|
+
#mutateOptions?: MutateOptions<TData, TError, TVariables, TOnMutateResult>
|
|
37
42
|
|
|
38
43
|
constructor(
|
|
39
44
|
client: QueryClient,
|
|
40
|
-
options: MutationObserverOptions<
|
|
45
|
+
options: MutationObserverOptions<
|
|
46
|
+
TData,
|
|
47
|
+
TError,
|
|
48
|
+
TVariables,
|
|
49
|
+
TOnMutateResult
|
|
50
|
+
>,
|
|
41
51
|
) {
|
|
42
52
|
super()
|
|
43
53
|
|
|
@@ -53,10 +63,15 @@ export class MutationObserver<
|
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
setOptions(
|
|
56
|
-
options: MutationObserverOptions<
|
|
66
|
+
options: MutationObserverOptions<
|
|
67
|
+
TData,
|
|
68
|
+
TError,
|
|
69
|
+
TVariables,
|
|
70
|
+
TOnMutateResult
|
|
71
|
+
>,
|
|
57
72
|
) {
|
|
58
73
|
const prevOptions = this.options as
|
|
59
|
-
| MutationObserverOptions<TData, TError, TVariables,
|
|
74
|
+
| MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>
|
|
60
75
|
| undefined
|
|
61
76
|
this.options = this.#client.defaultMutationOptions(options)
|
|
62
77
|
if (!shallowEqualObjects(this.options, prevOptions)) {
|
|
@@ -84,7 +99,9 @@ export class MutationObserver<
|
|
|
84
99
|
}
|
|
85
100
|
}
|
|
86
101
|
|
|
87
|
-
onMutationUpdate(
|
|
102
|
+
onMutationUpdate(
|
|
103
|
+
action: Action<TData, TError, TVariables, TOnMutateResult>,
|
|
104
|
+
): void {
|
|
88
105
|
this.#updateResult()
|
|
89
106
|
|
|
90
107
|
this.#notify(action)
|
|
@@ -94,7 +111,7 @@ export class MutationObserver<
|
|
|
94
111
|
TData,
|
|
95
112
|
TError,
|
|
96
113
|
TVariables,
|
|
97
|
-
|
|
114
|
+
TOnMutateResult
|
|
98
115
|
> {
|
|
99
116
|
return this.#currentResult
|
|
100
117
|
}
|
|
@@ -110,7 +127,7 @@ export class MutationObserver<
|
|
|
110
127
|
|
|
111
128
|
mutate(
|
|
112
129
|
variables: TVariables,
|
|
113
|
-
options?: MutateOptions<TData, TError, TVariables,
|
|
130
|
+
options?: MutateOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
114
131
|
): Promise<TData> {
|
|
115
132
|
this.#mutateOptions = options
|
|
116
133
|
|
|
@@ -128,7 +145,7 @@ export class MutationObserver<
|
|
|
128
145
|
#updateResult(): void {
|
|
129
146
|
const state =
|
|
130
147
|
this.#currentMutation?.state ??
|
|
131
|
-
getDefaultState<TData, TError, TVariables,
|
|
148
|
+
getDefaultState<TData, TError, TVariables, TOnMutateResult>()
|
|
132
149
|
|
|
133
150
|
this.#currentResult = {
|
|
134
151
|
...state,
|
|
@@ -138,25 +155,48 @@ export class MutationObserver<
|
|
|
138
155
|
isIdle: state.status === 'idle',
|
|
139
156
|
mutate: this.mutate,
|
|
140
157
|
reset: this.reset,
|
|
141
|
-
} as MutationObserverResult<TData, TError, TVariables,
|
|
158
|
+
} as MutationObserverResult<TData, TError, TVariables, TOnMutateResult>
|
|
142
159
|
}
|
|
143
160
|
|
|
144
|
-
#notify(action?: Action<TData, TError, TVariables,
|
|
161
|
+
#notify(action?: Action<TData, TError, TVariables, TOnMutateResult>): void {
|
|
145
162
|
notifyManager.batch(() => {
|
|
146
163
|
// First trigger the mutate callbacks
|
|
147
164
|
if (this.#mutateOptions && this.hasListeners()) {
|
|
148
165
|
const variables = this.#currentResult.variables!
|
|
149
|
-
const
|
|
166
|
+
const onMutateResult = this.#currentResult.context
|
|
167
|
+
|
|
168
|
+
const context = {
|
|
169
|
+
client: this.#client,
|
|
170
|
+
meta: this.options.meta,
|
|
171
|
+
mutationKey: this.options.mutationKey,
|
|
172
|
+
} satisfies MutationFunctionContext
|
|
150
173
|
|
|
151
174
|
if (action?.type === 'success') {
|
|
152
|
-
this.#mutateOptions.onSuccess?.(
|
|
153
|
-
|
|
175
|
+
this.#mutateOptions.onSuccess?.(
|
|
176
|
+
action.data,
|
|
177
|
+
variables,
|
|
178
|
+
onMutateResult,
|
|
179
|
+
context,
|
|
180
|
+
)
|
|
181
|
+
this.#mutateOptions.onSettled?.(
|
|
182
|
+
action.data,
|
|
183
|
+
null,
|
|
184
|
+
variables,
|
|
185
|
+
onMutateResult,
|
|
186
|
+
context,
|
|
187
|
+
)
|
|
154
188
|
} else if (action?.type === 'error') {
|
|
155
|
-
this.#mutateOptions.onError?.(
|
|
189
|
+
this.#mutateOptions.onError?.(
|
|
190
|
+
action.error,
|
|
191
|
+
variables,
|
|
192
|
+
onMutateResult,
|
|
193
|
+
context,
|
|
194
|
+
)
|
|
156
195
|
this.#mutateOptions.onSettled?.(
|
|
157
196
|
undefined,
|
|
158
197
|
action.error,
|
|
159
198
|
variables,
|
|
199
|
+
onMutateResult,
|
|
160
200
|
context,
|
|
161
201
|
)
|
|
162
202
|
}
|
package/src/queryClient.ts
CHANGED
|
@@ -512,11 +512,11 @@ export class QueryClient {
|
|
|
512
512
|
TData = unknown,
|
|
513
513
|
TError = DefaultError,
|
|
514
514
|
TVariables = void,
|
|
515
|
-
|
|
515
|
+
TOnMutateResult = unknown,
|
|
516
516
|
>(
|
|
517
517
|
mutationKey: MutationKey,
|
|
518
518
|
options: OmitKeyof<
|
|
519
|
-
MutationObserverOptions<TData, TError, TVariables,
|
|
519
|
+
MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
520
520
|
'mutationKey'
|
|
521
521
|
>,
|
|
522
522
|
): void {
|