PrimaryItems.tsx 2.1 KB

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