Skip to content

Commit 0a5437c

Browse files
committed
simplify useMutationState
1 parent 0aaafcd commit 0a5437c

File tree

2 files changed

+12
-22
lines changed

2 files changed

+12
-22
lines changed

examples/vite/src/App.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ function App() {
6666
const posts = postsQuery.useQuery({}, { enabled: !postId });
6767
const reset = resetMutation.useMutation();
6868

69-
const deleteMutations = deletePostMutation.useAllMutations();
69+
const deleteErrors = deletePostMutation.useMutationState(
70+
undefined,
71+
{ status: 'error' },
72+
(x) => x.state.variables?.params.id,
73+
);
7074

7175
const [refresh] = useOperateOnTags({ tags: ['refreshable'], operation: 'refetch' });
7276

@@ -107,9 +111,7 @@ function App() {
107111
Delete
108112
</button>
109113

110-
{deleteMutations.getMutation({ params: { id: post.id } })?.error && (
111-
<span style={{ color: 'red' }}>Error deleting post</span>
112-
)}
114+
{deleteErrors.includes(post.id) && <span style={{ color: 'red' }}>Error deleting post</span>}
113115

114116
<p>{post.body}</p>
115117
</div>

src/builder/MutationBuilder.ts

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
Mutation,
23
MutationFilters,
34
MutationFunction,
45
MutationKey,
@@ -11,7 +12,6 @@ import {
1112
useMutationState,
1213
useQueryClient,
1314
} from '@tanstack/react-query';
14-
import { useStableCallback } from '../hooks/useStableCallback';
1515
import { mergeTagOptions } from '../tags/mergeTagOptions';
1616
import { QueryInvalidatesMetadata } from '../tags/types';
1717
import { QueryBuilder } from './QueryBuilder';
@@ -115,24 +115,12 @@ export class MutationBuilderFrozen<T extends BuilderTypeTemplate> {
115115
return useIsMutating(this.getMutationFilters(vars, filters), this.config.queryClient);
116116
};
117117

118-
useAllMutations: (filters?: MutationFilters<T['data'], T['error'], T['vars']>) => MutationStateHelper<T> = (
119-
filters,
120-
) => {
121-
const list = useMutationState({ filters: this.getMutationFilters(undefined, filters) }, this.config.queryClient);
122-
123-
const getMutation: MutationStateHelper<T>['getMutation'] = useStableCallback(
124-
(vars, predicate?: (mutation: MutationState<T['data'], T['error'], T['vars']>) => boolean) =>
125-
list.findLast((m) => areKeysEqual([m.variables], [vars]) && (!predicate || predicate(m))),
126-
);
127-
128-
return { list, getMutation };
129-
};
130-
131-
useMutationState: (
132-
vars: T['vars'],
118+
useMutationState: <TSelect = Mutation<T['data'], T['error'], T['vars']>>(
119+
vars?: T['vars'],
133120
filters?: MutationFilters<T['data'], T['error'], T['vars']>,
134-
) => MutationState<T['data'], T['error'], T['vars']> | undefined = (vars, filters) => {
135-
return useMutationState({ filters: this.getMutationFilters(vars, filters) }, this.config.queryClient)[0];
121+
select?: (mt: Mutation<T['data'], T['error'], T['vars']>) => TSelect,
122+
) => TSelect[] = (vars, filters, select) => {
123+
return useMutationState({ filters: this.getMutationFilters(vars, filters), select }, this.config.queryClient);
136124
};
137125

138126
readonly getMutation = (

0 commit comments

Comments
 (0)