AdminLayout.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import React, { ReactNode } from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { GrowiNavbar } from '../Navbar/GrowiNavbar';
  4. import { RawLayout } from './RawLayout';
  5. import styles from './Admin.module.scss';
  6. type Props = {
  7. title: string
  8. /**
  9. * Set the current option of AdminNavigation
  10. * Expected it is in ["home", "app", "security", "markdown", "customize", "importer", "export",
  11. * "notification", 'global-notification', "users", "user-groups", "search"]
  12. */
  13. selectedNavOpt: string
  14. children?: ReactNode
  15. }
  16. const AdminLayout = ({
  17. children, title, selectedNavOpt,
  18. }: Props): JSX.Element => {
  19. const AdminNavigation = dynamic(() => import('~/components/Admin/Common/AdminNavigation'), { ssr: false });
  20. const SystemVersion = dynamic(() => import('../SystemVersion'), { ssr: false });
  21. return (
  22. <RawLayout title={title} className={`admin-page ${styles['admin-page']}`}>
  23. <GrowiNavbar />
  24. <header className="py-0">
  25. <h1 className="title">{title}</h1>
  26. </header>
  27. <div id="main" className="main">
  28. <div className="container-fluid">
  29. <div className="row">
  30. <div className="col-lg-3">
  31. <AdminNavigation selected={selectedNavOpt} />
  32. </div>
  33. <div className="col-lg-9">
  34. {children}
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. <SystemVersion />
  40. </RawLayout>
  41. );
  42. };
  43. export default AdminLayout;