import React, { FC, MouseEventHandler, useEffect, useRef } from 'react'; import styles from './styles.module.scss'; import { clearAllBodyScrollLocks, disableBodyScroll } from 'body-scroll-lock'; import { Icon } from '~/components/input/Icon'; import { LoaderCircle } from '~/components/input/LoaderCircle'; interface IProps { children: React.ReactChild; header?: JSX.Element; footer?: JSX.Element; backdrop?: JSX.Element; size?: 'medium' | 'big'; width?: number; error?: string; is_loading?: boolean; overlay?: JSX.Element; onOverlayClick?: MouseEventHandler; onRefCapture?: (ref: any) => void; onClose?: () => void; } const BetterScrollDialog: FC = ({ children, header, footer, backdrop, width = 600, error, onClose, is_loading, overlay = null, }) => { const ref = useRef(null); useEffect(() => { disableBodyScroll(ref.current, { reserveScrollBarGap: true }); return () => clearAllBodyScrollLocks(); }, [ref]); return (
{backdrop &&
{backdrop}
}
{onClose && (
)} {header &&
{header}
}
{children} {error &&
{error}
}
{!!is_loading && (
)} {overlay} {footer &&
{footer}
}
); }; export { BetterScrollDialog };