All files / src/components/common/Modal/DeleteModal useDeleteMutation.tsx

100% Statements 20/20
90% Branches 9/10
100% Functions 10/10
100% Lines 20/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65                          85x               663x   663x 4x   6x     663x 1x   1x   663x   7x             5x 5x 5x     2x 2x 2x     7x         663x 7x     663x    
import { customInstance } from "@services/api";
import { useMutation, useQueryClient } from "react-query";
import { AxiosError } from "axios";
import { showMessage } from "@common/Toast";
 
type TMutation = {
  url?: string;
  onSuccess?: (res: any) => void;
  onError?: (error: any) => void;
  onSettled?: () => void;
  refetchQuerieKeys?: string[];
  invalidateQuerieKeys?: string[];
};
export const useDeleteMutation = ({
  url,
  onSuccess,
  onError,
  onSettled,
  refetchQuerieKeys,
  invalidateQuerieKeys,
}: TMutation) => {
  const queryClient = useQueryClient();
 
  const refetchQueries = () => {
    refetchQuerieKeys
      ?.filter(Boolean)
      .map((key) => queryClient.invalidateQueries(key));
  };
 
  const invalidateQueries = () => {
    invalidateQuerieKeys
      ?.filter(Boolean)
      ?.map((key) => queryClient.invalidateQueries(key));
  };
  const deleteMutation = useMutation(
    async () => {
      return customInstance({
        url: url,
        method: "DELETE",
      });
    },
    {
      onSuccess: (res) => {
        refetchQuerieKeys?.length && refetchQueries();
        invalidateQuerieKeys?.length && invalidateQueries();
        onSuccess && onSuccess(res);
      },
      onError: (error: unknown) => {
        const axiosError = error as AxiosError;
        showMessage("Error", axiosError.message, true);
        onError && onError(axiosError);
      },
      onSettled: () => {
        onSettled && onSettled();
      },
    },
  );
 
  const handleDelete = () => {
    deleteMutation.mutate();
  };
 
  return { handleDelete, mutation: deleteMutation };
};