AdminLayout.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import type { ReactNode } from 'react';
  2. import React from 'react';
  3. import dynamic from 'next/dynamic';
  4. import Link from 'next/link';
  5. import { AdminNavigation } from '../Admin/Common/AdminNavigation';
  6. import GrowiLogo from '../Icons/GrowiLogo';
  7. import { RawLayout } from './RawLayout';
  8. import styles from './Admin.module.scss';
  9. const PageCreateModal = dynamic(() => import('../PageCreateModal'), { ssr: false });
  10. const SystemVersion = dynamic(() => import('../SystemVersion'), { ssr: false });
  11. const HotkeysManager = dynamic(() => import('../Hotkeys/HotkeysManager'), { ssr: false });
  12. type Props = {
  13. componentTitle?: string
  14. children?: ReactNode
  15. }
  16. const AdminLayout = ({
  17. children, componentTitle,
  18. }: Props): JSX.Element => {
  19. return (
  20. <RawLayout>
  21. <div className={`admin-page ${styles['admin-page']}`}>
  22. <header className="py-0 container-fluid">
  23. <h1 className="p-3 fs-2 d-flex align-items-center">
  24. <Link href="/" className="d-block mb-1 me-2">
  25. <GrowiLogo />
  26. </Link>
  27. {componentTitle}
  28. </h1>
  29. </header>
  30. <div className="main">
  31. <div className="container-fluid">
  32. <div className="row">
  33. <div className="col-lg-3">
  34. <AdminNavigation />
  35. </div>
  36. <div className="col-lg-9">
  37. {children}
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. <PageCreateModal />
  43. <SystemVersion />
  44. </div>
  45. <HotkeysManager />
  46. </RawLayout>
  47. );
  48. };
  49. export default AdminLayout;