import * as React from "react"; import { closeStyle, sidebarStyle, sidebarWrapperStyle } from "./styles/Sidebar.styles"; import { SidebarProps } from "./typings/Sidebar"; import { animated } from "react-spring/renderprops.cjs"; import Ink from "react-ink"; import { css, cx } from "emotion"; import { disableScrollY } from "../theme/styles"; import MountTransition from "./shared/MountTransition"; const transitionProps = { from: { opacity: 0, transform: "translateX(100%)" }, enter: { opacity: 1, transform: "translateX(0)" }, leave: { opacity: 0, transform: "translateX(100%)", pointerEvents: "none" } }; class SideBar extends React.PureComponent { static defaultProps: Partial = { closeOnOutsideClick: true }; componentDidMount() { if (this.props.isOpen) document.body.classList.add(disableScrollY); } componentDidUpdate() { if (this.props.isOpen) { document.body.classList.add(disableScrollY); } else { document.body.classList.remove(disableScrollY); } } componentWillUnmount() { if (this.props.isOpen) { document.body.classList.remove(disableScrollY); } } onOutsideClick = () => { const { onOutsideClick, closeOnOutsideClick, onClose } = this.props; if (closeOnOutsideClick) { onClose(); } if (onOutsideClick) onOutsideClick(); }; render() { const { width, isOpen, children, onClose, onOutsideClick, closeOnOutsideClick } = this.props; const _sidebarStyle = cx(sidebarStyle, css({ width })); return ( {styles => ( <>
{children}
)}
); } } export default SideBar;