All files / src/features/Products/Invoices/modals CancelInvoiceModal.tsx

100% Statements 12/12
100% Branches 0/0
100% Functions 4/4
100% Lines 12/12

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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80                                    1x 6x 6x 6x 6x 6x   1x                   1x 1x 1x       6x                                 1x                                          
import useNiceModal from "@common/Modal/ModalFactory/hooks/useNiceModal";
import { QKEY_LIST_INVOICES } from "@constants/queryKeys";
import NiceModal from "@ebay/nice-modal-react";
import {
  CANCEL_INVOICE_CONFIRMATION_LABEL,
  CANCEL_INVOICE_DESCRIPTION,
  CANCEL_INVOICE_TITLE,
} from "@features/Campaigns/CampaignDetails/constants";
import { useGetCurrentMerchantId } from "@hooks/common";
import { customInstance } from "@services/api";
import GivePopup from "@shared/Popup/GivePopup";
import { useCustomThemeV2 } from "@theme/hooks/useCustomThemeV2";
import { useMutation, useQueryClient } from "react-query";
 
type Props = {
  id: string;
};
 
const CancelInvoiceModal = NiceModal.create(({ id }: Props) => {
  const { open, onClose } = useNiceModal();
  const { isMobileView } = useCustomThemeV2();
  const { merchantId } = useGetCurrentMerchantId();
  const queryClient = useQueryClient();
  const { mutateAsync, isLoading } = useMutation(
    (id: string) => {
      return customInstance({
        url: `/merchants/${merchantId}/products/${id}/status`,
        data: {
          status: "canceled",
        },
        method: "PATCH",
      });
    },
    {
      onSuccess: () => {
        queryClient.invalidateQueries(QKEY_LIST_INVOICES);
        queryClient.invalidateQueries("get-campaign");
        onClose();
      },
    },
  );
  return (
    <GivePopup
      open={open}
      onClose={onClose}
      type={"destructive"}
      title={CANCEL_INVOICE_TITLE}
      description={CANCEL_INVOICE_DESCRIPTION}
      isMobile={isMobileView}
      buttons={[
        {
          label: "Cancel",
          onClick: onClose,
          variant: "ghost",
        },
        {
          label: CANCEL_INVOICE_CONFIRMATION_LABEL,
          onClick: async () => {
            await mutateAsync(id);
          },
          disabled: isLoading,
          variant: "filled",
          submitType: "submit",
          color: "destructive",
        },
      ]}
      sx={{
        "& .MuiPaper-root": {
          height: "fit-content",
        },
        "& .MuiDialogTitle-root+.MuiDialogContent-root": {
          paddingTop: "0 !important",
        },
      }}
    />
  );
});
 
export default CancelInvoiceModal;