All files / src/features/Merchants/MerchantSidePanel/GiveMerchantFile/components MerchantInfoSection.tsx

82.35% Statements 14/17
92.3% Branches 12/13
50% Functions 2/4
82.35% Lines 14/17

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                                                    21x 48x 48x 48x 48x 48x 48x 48x       48x       48x                                 48x   48x                           48x               816x                              
import { Fragment } from "react";
import SectionCardBase from "@shared/SidePanel/components/SectionCard/SectionCardBase";
import { Grid } from "@mui/material";
import GiveDivider from "@shared/GiveDivider/GiveDivider";
import { GiveSectionItem } from "../GiveSectionItem";
import NiceModal from "@ebay/nice-modal-react";
import {
  EDIT_MERCHANT_INFO_MODAL_V2,
  EDIT_PROVIDER_INFO_MODAL,
} from "modals/modal_names";
import { useMerchantSidePanelContext } from "features/Merchants/MerchantSidePanel/Provider/MerchantSidePanelProvider";
import { useConversationsModal } from "features/Minibuilders/Conversations/hooks/useConversationsModal";
import { useEnterprisePermissions } from "@components/AcquirerEnterprises/CreateEnterprise/hooks/useEnterprisePermissions";
import { useAccessControl } from "features/Permissions/AccessControl";
import RESOURCE_BASE, {
  EDIT_DENY_MESSAGE,
  OPERATIONS,
} from "@constants/permissions";
import { checkPortals } from "@utils/routing";
import {
  getMerchantProviderText,
  MERCHANT_FILE_TEXT,
} from "@constants/stringConstants";
import { useGetFeatureFlagValues } from "FeatureFlags/useGetFeatureFlagValues";
import { ISectionItem } from "@features/TransactionPanel/types";
 
const MerchantInfoSection = ({ items }: { items: ISectionItem[] }) => {
  const { id, data } = useMerchantSidePanelContext();
  const { isAcquirerPortal } = checkPortals();
  const { openConversationHandler } = useConversationsModal();
  const { isNewConversationsEnabled } = useGetFeatureFlagValues();
  const { merchant_underwriting, modify_merchant } = useEnterprisePermissions();
  const { isProvider } = useMerchantSidePanelContext();
  const isUpdateMCCAllowed = useAccessControl({
    resource: isProvider ? RESOURCE_BASE.ENTERPRISE : RESOURCE_BASE.MERCHANT,
    operation: OPERATIONS.UPDATE,
  });
  const editModalName = isProvider
    ? EDIT_PROVIDER_INFO_MODAL
    : EDIT_MERCHANT_INFO_MODAL_V2;
 
  const actions = {
    handleOpenConversation: (e: React.MouseEvent) => {
      e.stopPropagation();
      openConversationHandler({
        id: 0,
        name: MERCHANT_FILE_TEXT,
        paths: [],
      });
    },
    handleEdit: () =>
      NiceModal.show(editModalName, {
        id,
        data: data.merchantInfo,
        status: data.status,
      }),
  };
 
  const disableEdit = !isUpdateMCCAllowed || !modify_merchant;
 
  const disabledActions = {
    handleOpenConversation: {
      hidden:
        (!merchant_underwriting && !isAcquirerPortal) ||
        isNewConversationsEnabled,
    },
    handleEdit: {
      disabled: disableEdit,
      tooltipTitle: EDIT_DENY_MESSAGE,
      disableTooltip: !disableEdit,
      hidden: disableEdit && !isAcquirerPortal,
    },
  };
 
  return (
    <SectionCardBase
      leftTitle={getMerchantProviderText(!isProvider, true)}
      actions={actions}
      disabledActions={disabledActions}
    >
      <Grid container spacing={2}>
        {items.map((item, index) => (
          <Fragment key={index}>
            {item.split && (
              <Grid container item xs={12} padding="0 0 0 16px !important">
                <GiveDivider />
              </Grid>
            )}
            <GiveSectionItem key={index} item={item} />
          </Fragment>
        ))}
      </Grid>
    </SectionCardBase>
  );
};
 
export default MerchantInfoSection;