All files / src/components/Layout Base.tsx

91.3% Statements 21/23
41.66% Branches 5/12
75% Functions 3/4
91.3% Lines 21/23

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 105 106 107                                                    1x 7x 6x 6x 6x 6x                 6x       6x 6x 6x 6x 6x   6x 1x     1x 1x 1x 1x 1x       6x                               6x                                                        
// mui
import Box from "@mui/material/Box";
// components
import Layout from "./Layout";
import PrivateRoutes from "routes/PrivateRoutes";
// data
import { Suspense, memo, useEffect, useState } from "react";
import LoadingSpinner from "@components/Snipper/LoadingSpinner";
import BreadcrumbsPageContainer from "@components/CustomBreadcrumbsPage/BreadcrumbsPage";
import InternetStatusWrapper from "@components/Wrapper/InternetStatusWrapper";
import { FileUploadSnackbarContainer } from "@components/UploadFile/FileUploadSnackbarContainer";
import { useGetEnterpriseConfiguration } from "@components/Layout/hooks/useGetEnterpriseConfiguration";
import { checkPortals } from "@utils/routing";
import { useRedirectTransaction } from "./hooks/useRedirectTransaction";
import useManageQueryRedirect from "@hooks/useManageQueryRedirect";
import { useRedirectToMerchantPanel } from "./hooks/useRedirectToMerchantPanel";
import SideMenuDrawer from "componentsV2/SideMenu/SideMenuDrawer";
import { useRedirectLinkBPRequestReview } from "features/Merchants/MerchantSidePanel/GiveMerchantFile/hooks/useRedirectLinkBPRequestReview";
import GiveOnboarding from "@features/GiveOnboarding";
import { useGetFeatureFlagValues } from "FeatureFlags/useGetFeatureFlagValues";
import OnboardingStatusWrapper from "@components/Wrapper/OnboardingStatusWrapper";
import { DrawerProvider } from "componentsV2/SideMenu/DrawerContext";
import { MobileTableHeaderProvider } from "componentsV2/Table/MobileTableHeaderContext";
import useCheckPAH from "@hooks/common/useCheckPAH";
import useMasqueradeReducer from "@hooks/Reducers/useMasqueradeReducer";
 
const Base = () => {
  const { isNoSidebar, isDashBoard, isMerchantPortal } = checkPortals();
  const { isMerchantOnboardingModalEnabled } = useGetFeatureFlagValues();
  const { isLoggedInPAH } = useCheckPAH();
  const { isMasqueradeMode } = useMasqueradeReducer();
  const [winHeight, setWinHeight] = useState(window.innerHeight);
 
  // The wizard is rendered outside OnboardingStatusWrapper so it survives the
  // identity-only re-onboarding case where the wrapper returns null. But the
  // wrapper is also what kept non-PAH members out of the wizard, so re-apply
  // the same user gate here: only the logged-in PAH (or an acquirer
  // masquerading as the merchant) may access onboarding. Non-PAH members still
  // get the wrapper's "Onboarding in progress" view underneath.
  const canRenderOnboarding =
    isMerchantPortal &&
    isMerchantOnboardingModalEnabled &&
    (isMasqueradeMode || isLoggedInPAH);
 
  useGetEnterpriseConfiguration();
  useRedirectTransaction();
  useManageQueryRedirect();
  useRedirectToMerchantPanel();
  useRedirectLinkBPRequestReview();
 
  useEffect(() => {
    const updateHeight = () => {
      setWinHeight(window.innerHeight);
    };
    window.addEventListener("resize", updateHeight);
    window.addEventListener("orientationchange", updateHeight);
    return () => {
      window.removeEventListener("resize", updateHeight);
      window.removeEventListener("orientationchange", updateHeight);
    };
  }, []);
 
  Iif (isNoSidebar) {
    return (
      <>
        {canRenderOnboarding && <GiveOnboarding />}
        <OnboardingStatusWrapper minHeight={winHeight}>
          <Box component="main" height="100%">
            <Suspense fallback={<LoadingSpinner />}>
              {PrivateRoutes()}
              <FileUploadSnackbarContainer />
            </Suspense>
          </Box>
        </OnboardingStatusWrapper>
      </>
    );
  }
 
  return (
    <>
      {canRenderOnboarding && <GiveOnboarding />}
      <OnboardingStatusWrapper minHeight={winHeight}>
        <Layout
          bgcolor={isDashBoard ? "#FFFFFF" : undefined}
          winHeight={winHeight}
        >
          <DrawerProvider>
            <MobileTableHeaderProvider>
              <SideMenuDrawer />
              <BreadcrumbsPageContainer>
                <InternetStatusWrapper>
                  <Suspense fallback={<LoadingSpinner />}>
                    {PrivateRoutes()}
                    <FileUploadSnackbarContainer />
                  </Suspense>
                </InternetStatusWrapper>
              </BreadcrumbsPageContainer>
            </MobileTableHeaderProvider>
          </DrawerProvider>
        </Layout>
      </OnboardingStatusWrapper>
    </>
  );
};
 
export default memo(Base);