BasicLayout.tsx 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import type { ReactNode, JSX } from 'react';
  2. import React from 'react';
  3. import dynamic from 'next/dynamic';
  4. // eslint-disable-next-line no-restricted-imports
  5. import { PageAccessoriesModalDynamic } from '~/client/components/PageAccessoriesModal';
  6. import { RawLayout } from './RawLayout';
  7. import styles from './BasicLayout.module.scss';
  8. const AiAssistantSidebar = dynamic(
  9. () => import('~/features/openai/client/components/AiAssistant/AiAssistantSidebar/AiAssistantSidebar')
  10. .then(mod => mod.AiAssistantSidebar), { ssr: false },
  11. );
  12. const moduleClass = styles['grw-basic-layout'] ?? '';
  13. const Sidebar = dynamic(() => import('~/client/components/Sidebar').then(mod => mod.Sidebar), { ssr: false });
  14. const AlertSiteUrlUndefined = dynamic(() => import('~/client/components/AlertSiteUrlUndefined').then(mod => mod.AlertSiteUrlUndefined), { ssr: false });
  15. const DeleteAttachmentModal = dynamic(
  16. () => import('~/client/components/PageAttachment/DeleteAttachmentModal').then(mod => mod.DeleteAttachmentModal), { ssr: false },
  17. );
  18. const HotkeysManager = dynamic(() => import('~/client/components/Hotkeys/HotkeysManager'), { ssr: false });
  19. const GrowiNavbarBottom = dynamic(() => import('~/client/components/Navbar/GrowiNavbarBottom').then(mod => mod.GrowiNavbarBottom), { ssr: false });
  20. const ShortcutsModal = dynamic(() => import('~/client/components/ShortcutsModal'), { ssr: false });
  21. const SystemVersion = dynamic(() => import('~/client/components/SystemVersion'), { ssr: false });
  22. const PutbackPageModal = dynamic(() => import('~/client/components/PutbackPageModal'), { ssr: false });
  23. // Page modals
  24. const PageCreateModal = dynamic(() => import('~/client/components/PageCreateModal'), { ssr: false });
  25. const PageDuplicateModal = dynamic(() => import('~/client/components/PageDuplicateModal'), { ssr: false });
  26. const PageDeleteModal = dynamic(() => import('~/client/components/PageDeleteModal'), { ssr: false });
  27. const PageRenameModal = dynamic(() => import('~/client/components/PageRenameModal'), { ssr: false });
  28. const PagePresentationModal = dynamic(() => import('~/client/components/PagePresentationModal'), { ssr: false });
  29. const GrantedGroupsInheritanceSelectModal = dynamic(() => import('~/client/components/GrantedGroupsInheritanceSelectModal'), { ssr: false });
  30. const DeleteBookmarkFolderModal = dynamic(
  31. () => import('~/client/components/DeleteBookmarkFolderModal').then(mod => mod.DeleteBookmarkFolderModal), { ssr: false },
  32. );
  33. const SearchModal = dynamic(() => import('~/features/search/client/components/SearchModal'), { ssr: false });
  34. const PageBulkExportSelectModal = dynamic(() => import('~/features/page-bulk-export/client/components/PageBulkExportSelectModal'), { ssr: false });
  35. const AiAssistantManagementModal = dynamic(
  36. () => import('~/features/openai/client/components/AiAssistant/AiAssistantManagementModal/AiAssistantManagementModal')
  37. .then(mod => mod.AiAssistantManagementModal), { ssr: false },
  38. );
  39. const PageSelectModal = dynamic(() => import('~/client/components/PageSelectModal/PageSelectModal').then(mod => mod.PageSelectModal), { ssr: false });
  40. type Props = {
  41. children?: ReactNode
  42. className?: string
  43. }
  44. export const BasicLayout = ({ children, className }: Props): JSX.Element => {
  45. return (
  46. <RawLayout className={`${moduleClass} ${className ?? ''}`}>
  47. <div className="page-wrapper flex-row">
  48. <div className="z-2 d-print-none">
  49. <Sidebar />
  50. </div>
  51. <div className="d-flex flex-grow-1 flex-column mw-0 z-1">{/* neccessary for nested {children} make expanded */}
  52. <AlertSiteUrlUndefined />
  53. {children}
  54. </div>
  55. <AiAssistantSidebar />
  56. </div>
  57. <GrowiNavbarBottom />
  58. <SearchModal />
  59. <PageCreateModal />
  60. <PageDuplicateModal />
  61. <PageDeleteModal />
  62. <PageRenameModal />
  63. <PageAccessoriesModalDynamic />
  64. <DeleteAttachmentModal />
  65. <DeleteBookmarkFolderModal />
  66. <PutbackPageModal />
  67. <PageSelectModal />
  68. <AiAssistantManagementModal />
  69. <PagePresentationModal />
  70. <HotkeysManager />
  71. <ShortcutsModal />
  72. <PageBulkExportSelectModal />
  73. <GrantedGroupsInheritanceSelectModal />
  74. <SystemVersion showShortcutsButton />
  75. </RawLayout>
  76. );
  77. };