BasicLayout.tsx 4.3 KB

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