editor-left-menu.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { useLayoutContext } from '../../../shared/context/layout-context'
  2. import LeftMenuMask from './left-menu-mask'
  3. import AccessibleModal from '../../../shared/components/accessible-modal'
  4. import { Modal } from 'react-bootstrap'
  5. import classNames from 'classnames'
  6. import { lazy, memo, Suspense } from 'react'
  7. import { FullSizeLoadingSpinner } from '@/shared/components/loading-spinner'
  8. const EditorLeftMenuBody = lazy(() => import('./editor-left-menu-body'))
  9. function EditorLeftMenu() {
  10. const { leftMenuShown, setLeftMenuShown } = useLayoutContext()
  11. const closeModal = () => {
  12. setLeftMenuShown(false)
  13. }
  14. return (
  15. <>
  16. <AccessibleModal
  17. backdropClassName="left-menu-modal-backdrop"
  18. keyboard
  19. onHide={closeModal}
  20. id="left-menu-modal"
  21. show={leftMenuShown}
  22. >
  23. <Modal.Body
  24. className={classNames('full-size', { shown: leftMenuShown })}
  25. id="left-menu"
  26. >
  27. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  28. <EditorLeftMenuBody />
  29. </Suspense>
  30. </Modal.Body>
  31. </AccessibleModal>
  32. {leftMenuShown && <LeftMenuMask />}
  33. </>
  34. )
  35. }
  36. export default memo(EditorLeftMenu)