import { ReactNode, useEffect } from 'react'; import classNames from 'classnames'; import { Composite, useCompositeState } from 'reakit/Composite'; import { Dialog, DialogBackdrop, useDialogState } from 'reakit/Dialog'; import { SidenavCompositeContext } from './context'; import { SidenavItem } from './item'; import { SidenavList } from './list'; import { SidenavListContainer } from './listcontainer'; import { SidenavTitle } from './title'; import { SidenavSub } from './sub'; import { SidenavSubItem } from './subitem'; import { SidenavSubList } from './sublist'; import { SidenavSubToggler } from './subtoggler'; interface SidenavInterface { open?: boolean; handleClose?: () => void; children?: ReactNode; className?: string; } export function Sidenav({ open = true, handleClose, children, className, }: SidenavInterface) { const dialog = useDialogState({ animated: true, visible: open, modal: false, }); const composite = useCompositeState({ orientation: 'vertical' }); useEffect(() => { dialog.setVisible(open); }, [dialog, open]); return ( <> window.innerWidth <= 768)()} hideOnClickOutside={(() => window.innerWidth <= 768)()} style={{ willChange: 'margin' }} > handleClose?.()} /> ); } Sidenav.defaultProps = { open: true, handleClose: () => {}, children: null, className: '', }; Sidenav.Item = SidenavItem; Sidenav.List = SidenavList; Sidenav.ListContainer = SidenavListContainer; Sidenav.Sub = SidenavSub; Sidenav.SubItem = SidenavSubItem; Sidenav.SubList = SidenavSubList; Sidenav.SubToggler = SidenavSubToggler; Sidenav.Title = SidenavTitle;