AdminLayout.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 GrowiLogo from '~/components/Common/GrowiLogo';
  6. import { RawLayout } from './RawLayout';
  7. import styles from './Admin.module.scss';
  8. const AdminNavigation = dynamic(() => import('../Admin/Common/AdminNavigation').then(mod => mod.AdminNavigation), { ssr: false });
  9. const PageCreateModal = dynamic(() => import('~/client/components/PageCreateModal'), { ssr: false });
  10. const SystemVersion = dynamic(() => import('~/client/components/SystemVersion'), { ssr: false });
  11. const HotkeysManager = dynamic(() => import('~/client/components/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">
  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">
  32. <div className="row">
  33. <div className="col-lg-3">
  34. <AdminNavigation />
  35. </div>
  36. <div className="col-lg-9 mb-5">
  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;