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,
  });
}