SidebarNav.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { memo, useMemo } from 'react';
  2. import type { SidebarContentsType } from '~/interfaces/ui';
  3. import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
  4. import { NotAvailableForReadOnlyUser } from '../../NotAvailableForReadOnlyUser';
  5. import { PageCreateButton } from '../PageCreateButton';
  6. import { PrimaryItems } from './PrimaryItems';
  7. import { SecondaryItems } from './SecondaryItems';
  8. import styles from './SidebarNav.module.scss';
  9. export type SidebarNavProps = {
  10. onPrimaryItemHover?: (contents: SidebarContentsType) => void;
  11. };
  12. export const SidebarNav = memo((props: SidebarNavProps) => {
  13. const { onPrimaryItemHover } = props;
  14. const isGuestUser = useIsGuestUser();
  15. const isReadOnlyUser = useIsReadOnlyUser();
  16. const renderedPageCreateButton = useMemo(() => {
  17. if (isGuestUser) {
  18. return <></>;
  19. }
  20. if (isReadOnlyUser) {
  21. return (
  22. <NotAvailableForReadOnlyUser>
  23. <PageCreateButton />
  24. </NotAvailableForReadOnlyUser>
  25. );
  26. }
  27. return <PageCreateButton />;
  28. }, [isGuestUser, isReadOnlyUser]);
  29. return (
  30. <div className={`grw-sidebar-nav ${styles['grw-sidebar-nav']}`}>
  31. {renderedPageCreateButton}
  32. <div
  33. className="grw-sidebar-nav-primary-container"
  34. data-vrt-blackout-sidebar-nav
  35. >
  36. <PrimaryItems onItemHover={onPrimaryItemHover} />
  37. </div>
  38. <div className="grw-sidebar-nav-secondary-container">
  39. <SecondaryItems />
  40. </div>
  41. </div>
  42. );
  43. });