All files / src/components/common/Modal/ModalFactory/variants SidePanelVariant.tsx

66.66% Statements 6/9
25% Branches 2/8
33.33% Functions 1/3
66.66% Lines 6/9

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                                                        37x   37x                       27x         27x   27x                                                                     27x                                  
import SwipeableDrawerMobile, {
  SwipeableDrawerMobileProps,
} from "@components/SwipeableDrawerMobile/SwipeableDrawerMobile";
import { palette } from "@palette";
import { SidePanel, SidePanelProps } from "../atoms/SidePanel";
import { SlideProps, SxProps } from "@mui/material";
import React from "react";
import ErrorCatcher from "@common/Error/ErrorCatcher";
import { ErrorFallback } from "@shared/SidePanel/SidePanelAtoms";
 
export type SidePanelVariantProps = {
  open: boolean;
  onClose: () => void;
  sx?: SxProps;
  children: React.ReactNode;
  width?: number | string;
  showMobileView?: boolean;
  SlideProps?: Partial<SlideProps>;
  SidePanelProps?: Omit<
    SidePanelProps,
    "onCloseDrawer" | "onClose" | "children"
  >;
  DrawerProps?: Omit<SwipeableDrawerMobileProps, "onOpen" | "onClose"> & {
    dataTestId?: string;
  };
  doublePanel?: boolean;
};
 
export const DRAWER_DEFAULT_TOP = "96px";
 
const SidePanelVariant = ({
  open,
  onClose,
  sx,
  children,
  width,
  showMobileView = false,
  SidePanelProps,
  DrawerProps = {},
  SlideProps,
  doublePanel,
}: SidePanelVariantProps) => {
  const commonProps = {
    open,
    sx,
  };
 
  const { dataTestId, ...drawerProps } = DrawerProps;
 
  Iif (showMobileView) {
    return (
      <SwipeableDrawerMobile
        anchor="bottom"
        onOpen={() => undefined}
        {...drawerProps}
        {...commonProps}
        data-testid={dataTestId}
        onClose={() => !!onClose && onClose()}
        SlideProps={SlideProps}
        PaperProps={{
          ...drawerProps?.PaperProps,
          sx: {
            background: palette.neutral.white3,
            position: "relative",
            maxHeight: `calc(100vh - ${
              typeof (sx as any)?.top === "number"
                ? (sx as any)?.top
                : DRAWER_DEFAULT_TOP
            })`,
            ...drawerProps?.PaperProps?.sx,
          },
        }}
        sx={{
          top: "auto",
          ...sx,
        }}
      >
        <ErrorCatcher errorID="swipeable-drawer" Fallback={ErrorFallback}>
          {children}
        </ErrorCatcher>
      </SwipeableDrawerMobile>
    );
  }
 
  return (
    <SidePanel
      width={width}
      onCloseDrawer={onClose}
      {...commonProps}
      {...SidePanelProps}
      SlideProps={SlideProps}
      doublePanel={doublePanel}
    >
      <ErrorCatcher errorID="sidepanel-base" Fallback={ErrorFallback}>
        {children}
      </ErrorCatcher>
    </SidePanel>
  );
};
 
export default SidePanelVariant;