SidebarContents.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React, { memo, useMemo } from 'react';
  2. import { AiAssistant } from '~/features/openai/client/components/AiAssistant/Sidebar/AiAssistant';
  3. import { SidebarContentsType } from '~/interfaces/ui';
  4. import { useCollapsedContentsOpened, useCurrentSidebarContents, useSidebarMode } from '~/stores/ui';
  5. import { Bookmarks } from './Bookmarks';
  6. import { CustomSidebar } from './Custom';
  7. import { InAppNotification } from './InAppNotification';
  8. import { PageTree } from './PageTree';
  9. import { RecentChanges } from './RecentChanges';
  10. import Tag from './Tag';
  11. import styles from './SidebarContents.module.scss';
  12. export const SidebarContents = memo(() => {
  13. const { isCollapsedMode } = useSidebarMode();
  14. const { data: isCollapsedContentsOpened } = useCollapsedContentsOpened();
  15. const { data: currentSidebarContents } = useCurrentSidebarContents();
  16. const Contents = useMemo(() => {
  17. switch (currentSidebarContents) {
  18. case SidebarContentsType.RECENT:
  19. return RecentChanges;
  20. case SidebarContentsType.CUSTOM:
  21. return CustomSidebar;
  22. case SidebarContentsType.TAG:
  23. return Tag;
  24. case SidebarContentsType.BOOKMARKS:
  25. return Bookmarks;
  26. case SidebarContentsType.NOTIFICATION:
  27. return InAppNotification;
  28. case SidebarContentsType.AI_ASSISTANT:
  29. return AiAssistant;
  30. default:
  31. return PageTree;
  32. }
  33. }, [currentSidebarContents]);
  34. const isHidden = isCollapsedMode() && !isCollapsedContentsOpened;
  35. const classToHide = isHidden ? 'd-none' : '';
  36. return (
  37. <div className={`grw-sidebar-contents ${styles['grw-sidebar-contents']} ${classToHide}`} data-testid="grw-sidebar-contents">
  38. <Contents />
  39. </div>
  40. );
  41. });
  42. SidebarContents.displayName = 'SidebarContents';