Breadcrumbs.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { ShowMenuSvg } from '../../_shared/svg/ShowMenuSvg';
  2. import { useEffect, useState } from 'react';
  3. import { useAppSelector } from '../../../stores/store';
  4. import { useLocation } from 'react-router-dom';
  5. export const Breadcrumbs = ({ menuHidden, onShowMenuClick }: { menuHidden: boolean; onShowMenuClick: () => void }) => {
  6. const [folderName, setFolderName] = useState('');
  7. const [pageName, setPageName] = useState('');
  8. const [activePageId, setActivePageId] = useState<string>('');
  9. const currentLocation = useLocation();
  10. const pagesStore = useAppSelector((state) => state.pages);
  11. const foldersStore = useAppSelector((state) => state.folders);
  12. useEffect(() => {
  13. const { pathname } = currentLocation;
  14. const parts = pathname.split('/');
  15. const pageId = parts[parts.length - 1];
  16. setActivePageId(pageId);
  17. }, [currentLocation]);
  18. useEffect(() => {
  19. const page = pagesStore.find((p) => p.id === activePageId);
  20. const folder = foldersStore.find((f) => f.id === page?.folderId);
  21. setFolderName(folder?.title || '');
  22. setPageName(page?.title || '');
  23. }, [pagesStore, foldersStore, activePageId]);
  24. return (
  25. <div className={'flex items-center'}>
  26. <div className={'mr-4 flex items-center'}>
  27. {menuHidden && (
  28. <button onClick={() => onShowMenuClick()} className={'mr-2 h-5 w-5'}>
  29. <ShowMenuSvg></ShowMenuSvg>
  30. </button>
  31. )}
  32. <button className={'p-1'} onClick={() => history.back()}>
  33. <img src={'/images/home/arrow_left.svg'} alt={''} />
  34. </button>
  35. <button className={'p-1'} onClick={() => history.forward()}>
  36. <img src={'/images/home/arrow_right.svg'} alt={''} />
  37. </button>
  38. </div>
  39. <div className={'mr-8 flex items-center gap-4'}>
  40. <span>{folderName}</span>
  41. <span>/</span>
  42. <span>{pageName}</span>
  43. </div>
  44. </div>
  45. );
  46. };