SidebarNav.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React, { memo, useMemo } from 'react';
  2. import type { SidebarContentsType } from '~/interfaces/ui';
  3. import { useIsGuestUser, useIsReadOnlyUser } from '~/stores/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 { data: isGuestUser } = useIsGuestUser();
  15. const { data: 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 className="grw-sidebar-nav-primary-container" data-vrt-blackout-sidebar-nav>
  33. <PrimaryItems onItemHover={onPrimaryItemHover} />
  34. </div>
  35. <div className="grw-sidebar-nav-secondary-container">
  36. <SecondaryItems />
  37. </div>
  38. </div>
  39. );
  40. });