BasicLayout.tsx 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, { ReactNode } from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { DndProvider } from 'react-dnd';
  4. import { HTML5Backend } from 'react-dnd-html5-backend';
  5. import { Button } from 'reactstrap';
  6. import { useParentPageSelectModal } from '~/stores/modal';
  7. import { GrowiNavbar } from '../Navbar/GrowiNavbar';
  8. import { ParentPageSelectModal } from '../ParentPageSelectModal';
  9. import Sidebar from '../Sidebar';
  10. import { RawLayout } from './RawLayout';
  11. const AlertSiteUrlUndefined = dynamic(() => import('../AlertSiteUrlUndefined').then(mod => mod.AlertSiteUrlUndefined), { ssr: false });
  12. const DeleteAttachmentModal = dynamic(() => import('../PageAttachment/DeleteAttachmentModal').then(mod => mod.DeleteAttachmentModal), { ssr: false });
  13. const HotkeysManager = dynamic(() => import('../Hotkeys/HotkeysManager'), { ssr: false });
  14. // const PageCreateModal = dynamic(() => import('../client/js/components/PageCreateModal'), { ssr: false });
  15. const GrowiNavbarBottom = dynamic(() => import('../Navbar/GrowiNavbarBottom').then(mod => mod.GrowiNavbarBottom), { ssr: false });
  16. const ShortcutsModal = dynamic(() => import('../ShortcutsModal'), { ssr: false });
  17. const SystemVersion = dynamic(() => import('../SystemVersion'), { ssr: false });
  18. const PutbackPageModal = dynamic(() => import('../PutbackPageModal'), { ssr: false });
  19. // Page modals
  20. const PageCreateModal = dynamic(() => import('../PageCreateModal'), { ssr: false });
  21. const PageDuplicateModal = dynamic(() => import('../PageDuplicateModal'), { ssr: false });
  22. const PageDeleteModal = dynamic(() => import('../PageDeleteModal'), { ssr: false });
  23. const PageRenameModal = dynamic(() => import('../PageRenameModal'), { ssr: false });
  24. const PagePresentationModal = dynamic(() => import('../PagePresentationModal'), { ssr: false });
  25. const PageAccessoriesModal = dynamic(() => import('../PageAccessoriesModal').then(mod => mod.PageAccessoriesModal), { ssr: false });
  26. const DeleteBookmarkFolderModal = dynamic(() => import('../DeleteBookmarkFolderModal').then(mod => mod.DeleteBookmarkFolderModal), { ssr: false });
  27. // Fab
  28. const Fab = dynamic(() => import('../Fab').then(mod => mod.Fab), { ssr: false });
  29. type Props = {
  30. children?: ReactNode
  31. className?: string
  32. }
  33. export const BasicLayout = ({ children, className }: Props): JSX.Element => {
  34. const {
  35. open: openModal,
  36. } = useParentPageSelectModal();
  37. return (
  38. <RawLayout className={className ?? ''}>
  39. <DndProvider backend={HTML5Backend}>
  40. <GrowiNavbar />
  41. <div className="page-wrapper d-flex d-print-block">
  42. <div className="grw-sidebar-wrapper">
  43. <Sidebar />
  44. </div>
  45. <div className="flex-fill mw-0">
  46. <AlertSiteUrlUndefined />
  47. {children}
  48. </div>
  49. </div>
  50. <GrowiNavbarBottom />
  51. <PageCreateModal />
  52. <PageDuplicateModal />
  53. <PageDeleteModal />
  54. <PageRenameModal />
  55. <PageAccessoriesModal />
  56. <DeleteAttachmentModal />
  57. <DeleteBookmarkFolderModal />
  58. <PutbackPageModal />
  59. </DndProvider>
  60. <PagePresentationModal />
  61. <HotkeysManager />
  62. <Fab />
  63. <ShortcutsModal />
  64. <SystemVersion showShortcutsButton />
  65. <Button onClick={() => openModal()}>Open!</Button>
  66. <ParentPageSelectModal/>
  67. {/* TODO: remove unnecessary code with https://redmine.weseek.co.jp/issues/128327 */}
  68. </RawLayout>
  69. );
  70. };