editor-left-menu.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. import BootstrapVersionSwitcher from '@/features/ui/components/bootstrap-5/bootstrap-version-switcher'
  9. import { Offcanvas } from 'react-bootstrap-5'
  10. const EditorLeftMenuBody = lazy(() => import('./editor-left-menu-body'))
  11. function EditorLeftMenu() {
  12. const { leftMenuShown, setLeftMenuShown } = useLayoutContext()
  13. const closeLeftMenu = () => {
  14. setLeftMenuShown(false)
  15. }
  16. return (
  17. <BootstrapVersionSwitcher
  18. bs3={
  19. <>
  20. <AccessibleModal
  21. backdropClassName="left-menu-modal-backdrop"
  22. keyboard
  23. onHide={closeLeftMenu}
  24. id="left-menu-modal"
  25. show={leftMenuShown}
  26. >
  27. <Modal.Body
  28. className={classNames('full-size', { shown: leftMenuShown })}
  29. id="left-menu"
  30. >
  31. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  32. <EditorLeftMenuBody />
  33. </Suspense>
  34. </Modal.Body>
  35. </AccessibleModal>
  36. {leftMenuShown && <LeftMenuMask />}
  37. </>
  38. }
  39. bs5={
  40. <>
  41. <Offcanvas
  42. show={leftMenuShown}
  43. onHide={closeLeftMenu}
  44. backdropClassName="left-menu-modal-backdrop"
  45. id="left-menu-offcanvas"
  46. >
  47. <Offcanvas.Body
  48. className={classNames('full-size', 'left-menu', {
  49. shown: leftMenuShown,
  50. })}
  51. id="left-menu"
  52. >
  53. <Suspense fallback={<FullSizeLoadingSpinner delay={500} />}>
  54. <EditorLeftMenuBody />
  55. </Suspense>
  56. </Offcanvas.Body>
  57. </Offcanvas>
  58. {leftMenuShown && <LeftMenuMask />}
  59. </>
  60. }
  61. />
  62. )
  63. }
  64. export default memo(EditorLeftMenu)