File size: 918 Bytes
c59d808 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import {
QueryKey,
useMutation,
UseMutationOptions,
useQueryClient,
} from "@tanstack/react-query";
type UseCreateMutationConfig<TData, TVariables> = {
invalidate?: QueryKey[];
} & UseMutationOptions<TData, unknown, TVariables>;
export function useCreateMutation<TData, TVariables>(
mutationFn: (input: TVariables) => Promise<TData>,
config?: UseCreateMutationConfig<TData, TVariables>
) {
const queryClient = useQueryClient();
return useMutation<TData, unknown, TVariables>({
mutationFn,
onSuccess: async (data, variables, context) => {
if (config?.invalidate) {
for (const key of config.invalidate) {
await queryClient.invalidateQueries({ queryKey: key });
}
}
config?.onSuccess?.(data, variables, context);
},
onError: (error, variables, context) => {
config?.onError?.(error, variables, context);
},
...config,
});
}
|