All files / src/components/ManageMoney/TransactionTable/TableActions/hooks useMarkAsFraudActions.tsx

82.14% Statements 23/28
33.33% Branches 6/18
75% Functions 3/4
84.61% Lines 22/26

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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104                                                      1x             145x 145x 145x 145x 145x   145x   3x                     3x   3x             3x       3x                 3x 3x 3x 3x 3x   3x   3x     3x   3x                         145x    
import useCheckLastUnseen from "@components/VirtualList/hooks/useBlockedTransactions";
import { useGetCurrentMerchantId } from "@hooks/common";
import {
  TBlockTransaction,
  blockTransaction,
} from "@services/api/riskProfile/riskProfileActions";
import { checkPortals } from "@utils/routing";
import { useMutation, useQueryClient } from "react-query";
import { processTransactionData } from "../../TransactionInfoModal/utils";
import NiceModal from "@ebay/nice-modal-react";
import { TRANSACTION_INFO_MODAL } from "modals/modal_names";
import { useCustomThemeV2 } from "@theme/hooks/useCustomThemeV2";
import {
  QKEY_LIST_RISK_PROFILE_TRANSACTIONS,
  QKEY_PROVIDER_PROCESSING,
  QKEY_RISK_PROFILE,
} from "@constants/queryKeys";
import { showMessage } from "@common/Toast";
 
type Props = {
  isFirst?: boolean;
  isLast?: boolean;
  setSelectedRow?: React.Dispatch<any>;
  onSuccess?: () => void;
  currentID?: string;
};
 
export const useMarkAsFraudActions = ({
  isFirst,
  isLast,
  setSelectedRow,
  onSuccess,
  currentID,
}: Props) => {
  const queryClient = useQueryClient();
  const { merchantId } = useGetCurrentMerchantId();
  const { setUnseenTransactions } = useCheckLastUnseen(merchantId);
  const { isAcquirerPortal, isEnterprisePortal } = checkPortals();
  const { isMobileView } = useCustomThemeV2();
 
  const markAsFraudMutation = useMutation(
    (data: TBlockTransaction) => {
      return blockTransaction({
        merchantId: data.merchantId,
        id: data.id,
        reason: data.reason,
        canNotifyMerchant: data.canNotifyMerchant,
        skipRefund: data.skipRefund,
        refundItemIDs: data.refundItemIDs,
      });
    },
    {
      onSuccess: (transactionData) => {
        Iif (isAcquirerPortal) setUnseenTransactions();
 
        showMessage(
          "Success",
          "Transaction successfully marked as suspected",
          !isMobileView,
          "",
        );
 
        const parsedData = transactionData
          ? processTransactionData(transactionData)
          : null;
 
        Iif (parsedData?.displayStatus === "Refunded") {
          NiceModal.show(TRANSACTION_INFO_MODAL, {
            data: { ...parsedData, transactionID: parsedData?.id },
            isFirst: setSelectedRow ? isFirst : true,
            isLast: setSelectedRow ? isLast : true,
            setSelectedRow,
          });
        }
 
        queryClient.invalidateQueries(QKEY_RISK_PROFILE);
        queryClient.invalidateQueries(QKEY_LIST_RISK_PROFILE_TRANSACTIONS);
        queryClient.invalidateQueries("get-transactions-risk-profile");
        queryClient.invalidateQueries("get-risk-transactions-list");
        queryClient.invalidateQueries("has-more-transactions");
 
        Iif (isAcquirerPortal)
          queryClient.invalidateQueries("acquirer-processing-transactions");
        Iif (isEnterprisePortal)
          queryClient.invalidateQueries(QKEY_PROVIDER_PROCESSING);
 
        queryClient.invalidateQueries(["get-transaction-history"]); //There’s a chance that the id we need to refetch isn’t passed to this function, so it’s better to invalidate it without using an ID.
 
        Eif (onSuccess) onSuccess();
      },
      onError: (error: any) => {
        showMessage(
          "Error",
          error?.message || "Whoops.. an error occured. Please try again",
          !isMobileView,
          "",
        );
      },
    },
  );
 
  return { markAsFraudMutation };
};