PrimaryItems.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { memo } from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { SidebarContentsType } from '~/interfaces/ui';
  4. import { useSidebarMode } from '~/stores/ui';
  5. import { PrimaryItem } from './PrimaryItem';
  6. import styles from './PrimaryItems.module.scss';
  7. // Do not SSR Socket.io to make it work
  8. const PrimaryItemForNotification = dynamic(
  9. () => import('../InAppNotification/PrimaryItemForNotification').then(mod => mod.PrimaryItemForNotification), { ssr: false },
  10. );
  11. type Props = {
  12. onItemHover?: (contents: SidebarContentsType) => void,
  13. }
  14. export const PrimaryItems = memo((props: Props) => {
  15. const { onItemHover } = props;
  16. const { data: sidebarMode } = useSidebarMode();
  17. if (sidebarMode == null) {
  18. return <></>;
  19. }
  20. return (
  21. <div className={styles['grw-primary-items']}>
  22. <PrimaryItem sidebarMode={sidebarMode} contents={SidebarContentsType.TREE} label="Page Tree" iconName="list" onHover={onItemHover} />
  23. <PrimaryItem sidebarMode={sidebarMode} contents={SidebarContentsType.CUSTOM} label="Custom Sidebar" iconName="code" onHover={onItemHover} />
  24. <PrimaryItem sidebarMode={sidebarMode} contents={SidebarContentsType.RECENT} label="Recent Changes" iconName="update" onHover={onItemHover} />
  25. <PrimaryItem sidebarMode={sidebarMode} contents={SidebarContentsType.BOOKMARKS} label="Bookmarks" iconName="bookmarks" onHover={onItemHover} />
  26. <PrimaryItem sidebarMode={sidebarMode} contents={SidebarContentsType.TAG} label="Tags" iconName="local_offer" onHover={onItemHover} />
  27. <PrimaryItemForNotification sidebarMode={sidebarMode} onHover={onItemHover} />
  28. </div>
  29. );
  30. });