2
0

PagePathNav.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { useMemo } from 'react';
  2. import { DevidedPagePath } from '@growi/core/dist/models';
  3. import { pagePathUtils } from '@growi/core/dist/utils';
  4. import LinkedPagePath from '~/models/linked-page-path';
  5. import { PagePathHierarchicalLink } from '../PagePathHierarchicalLink';
  6. import type { PagePathNavLayoutProps } from './PagePathNavLayout';
  7. import { PagePathNavLayout } from './PagePathNavLayout';
  8. import styles from './PagePathNav.module.scss';
  9. const { isTrashPage } = pagePathUtils;
  10. const Separator = ({ className }: {className?: string}): JSX.Element => {
  11. return <span className={`separator ${className ?? ''} ${styles['grw-mx-02em']}`}>/</span>;
  12. };
  13. export const PagePathNav = (props: PagePathNavLayoutProps): JSX.Element => {
  14. const { pagePath } = props;
  15. const isInTrash = isTrashPage(pagePath);
  16. const formerLink = useMemo(() => {
  17. const dPagePath = new DevidedPagePath(pagePath, false, true);
  18. // one line
  19. if (dPagePath.isRoot || dPagePath.isFormerRoot) {
  20. return undefined;
  21. }
  22. // two line
  23. const linkedPagePathFormer = new LinkedPagePath(dPagePath.former);
  24. return (
  25. <>
  26. <PagePathHierarchicalLink linkedPagePath={linkedPagePathFormer} isInTrash={isInTrash} />
  27. <Separator />
  28. </>
  29. );
  30. }, [isInTrash, pagePath]);
  31. const latterLink = useMemo(() => {
  32. const dPagePath = new DevidedPagePath(pagePath, false, true);
  33. // one line
  34. if (dPagePath.isRoot || dPagePath.isFormerRoot) {
  35. const linkedPagePath = new LinkedPagePath(pagePath);
  36. return <PagePathHierarchicalLink linkedPagePath={linkedPagePath} isInTrash={isInTrash} />;
  37. }
  38. // two line
  39. const linkedPagePathLatter = new LinkedPagePath(dPagePath.latter);
  40. return (
  41. <PagePathHierarchicalLink linkedPagePath={linkedPagePathLatter} basePath={dPagePath.former} isInTrash={isInTrash} />
  42. );
  43. }, [isInTrash, pagePath]);
  44. return (
  45. <PagePathNavLayout
  46. {...props}
  47. formerLink={formerLink}
  48. latterLink={latterLink}
  49. />
  50. );
  51. };