SidebarSkeleton.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, { memo } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import { SidebarContentsType } from '~/interfaces/ui';
  4. import { useCurrentSidebarContents } from '~/stores/ui';
  5. import CustomSidebarContentSkeleton from './CustomSidebarContentSkeleton';
  6. import PageTreeContentSkeleton from './PageTreeContentSkeleton';
  7. import RecentChangesContentSkeleton from './RecentChangesContentSkeleton';
  8. import TagContentSkeleton from './TagContentSkeleton';
  9. export const SidebarSkeleton = memo(() => {
  10. const { t } = useTranslation();
  11. const { data: currentSidebarContents } = useCurrentSidebarContents();
  12. let Contents: () => JSX.Element;
  13. let title: string;
  14. switch (currentSidebarContents) {
  15. case SidebarContentsType.RECENT:
  16. Contents = RecentChangesContentSkeleton;
  17. title = t('Recent Changes');
  18. break;
  19. case SidebarContentsType.CUSTOM:
  20. Contents = CustomSidebarContentSkeleton;
  21. title = t('CustomSidebar');
  22. break;
  23. case SidebarContentsType.TAG:
  24. Contents = TagContentSkeleton;
  25. title = t('Tags');
  26. break;
  27. case SidebarContentsType.TREE:
  28. default:
  29. Contents = PageTreeContentSkeleton;
  30. title = t('Page Tree');
  31. break;
  32. }
  33. return (
  34. <div className={currentSidebarContents === SidebarContentsType.TAG ? 'px-4' : 'px-3'}>
  35. <div className="grw-sidebar-content-header py-3">
  36. <h3 className="mb-0">{title}</h3>
  37. </div>
  38. <Contents />
  39. </div>
  40. );
  41. });
  42. SidebarSkeleton.displayName = 'SidebarSkeleton';