|
2 | 2 | MutationFilters, |
3 | 3 | MutationFunction, |
4 | 4 | MutationKey, |
| 5 | + MutationObserver, |
5 | 6 | MutationState, |
6 | 7 | QueryClient, |
7 | 8 | UseMutationOptions, |
@@ -134,24 +135,37 @@ export class MutationBuilderFrozen<T extends BuilderTypeTemplate> { |
134 | 135 | return useMutationState({ filters: this.getMutationFilters(vars, filters) }, this.config.queryClient)[0]; |
135 | 136 | }; |
136 | 137 |
|
137 | | - private _client?: MutationBuilderClient<T>; |
138 | | - get client() { |
139 | | - return (this._client ??= new MutationBuilderClient(this)); |
140 | | - } |
| 138 | + readonly getMutation = ( |
| 139 | + vars?: T['vars'], |
| 140 | + filters?: MutationFilters<T['data'], T['error'], T['vars']>, |
| 141 | + queryClient?: QueryClient, |
| 142 | + ) => { |
| 143 | + const client = queryClient || this.config.queryClient!; |
| 144 | + return client.getMutationCache().find(this.getMutationFilters(vars, filters)); |
| 145 | + }; |
| 146 | + |
| 147 | + readonly isMutating = ( |
| 148 | + vars?: T['vars'], |
| 149 | + filters?: MutationFilters<T['data'], T['error'], T['vars']>, |
| 150 | + queryClient?: QueryClient, |
| 151 | + ) => { |
| 152 | + const client = queryClient || this.config.queryClient!; |
| 153 | + return client.isMutating(this.getMutationFilters(vars, filters)); |
| 154 | + }; |
| 155 | + |
| 156 | + readonly mutate = async (vars: T['vars'], opts?: MutationBuilderConfig<T>['options'], queryClient?: QueryClient) => { |
| 157 | + const client = queryClient || this.config.queryClient!; |
| 158 | + const options = this.getMutationOptions(client, opts); |
| 159 | + const observer = new MutationObserver<T['data'], T['error'], T['vars']>(client, options); |
| 160 | + return observer.mutate(vars, options).finally(() => observer.reset()); |
| 161 | + }; |
141 | 162 | } |
142 | 163 |
|
143 | 164 | export type MutationStateHelper<T extends BuilderTypeTemplate> = { |
144 | 165 | list: MutationState<T['data'], T['error'], T['vars']>[]; |
145 | 166 | getMutation(vars: T['vars']): MutationState<T['data'], T['error'], T['vars']> | undefined; |
146 | 167 | }; |
147 | 168 |
|
148 | | -class MutationBuilderClient<T extends BuilderTypeTemplate> { |
149 | | - constructor(private builder: MutationBuilderFrozen<T>) {} |
150 | | - |
151 | | - readonly isMutating = (vars: T['vars'], filters?: MutationFilters<T['data'], T['error'], T['vars']>) => |
152 | | - this.builder.config.queryClient?.isMutating(this.builder.getMutationFilters(vars, filters)); |
153 | | -} |
154 | | - |
155 | 169 | export class MutationBuilder<T extends BuilderTypeTemplate = BuilderTypeTemplate> extends MutationBuilderFrozen<T> { |
156 | 170 | withVars<TVars = T['vars'], const TReset extends boolean = false>( |
157 | 171 | vars?: TVars, |
|
0 commit comments