| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import React from 'react';
- import PropTypes from 'prop-types';
- import urljoin from 'url-join';
- import LinkedPagePath from '../models/linked-page-path';
- const PagePathHierarchicalLink = (props) => {
- const { linkedPagePath, basePath, isInTrash } = props;
- // render root element
- if (linkedPagePath.isRoot) {
- if (basePath != null) {
- return null;
- }
- return isInTrash
- ? (
- <>
- <span className="path-segment">
- <a href="/trash"><i className="icon-trash"></i></a>
- </span>
- <span className="separator"><a href="/">/</a></span>
- </>
- )
- : (
- <>
- <span className="path-segment">
- <a href="/">
- <i className="icon-home"></i>
- <span className="separator">/</span>
- </a>
- </span>
- </>
- );
- }
- const isParentExists = linkedPagePath.parent != null;
- const isParentRoot = linkedPagePath.parent?.isRoot;
- const isSeparatorRequired = isParentExists && !isParentRoot;
- const isParentInTrash = isInTrash || linkedPagePath.isInTrash;
- const href = encodeURI(urljoin(basePath || '/', linkedPagePath.href));
- return (
- <>
- { isParentExists && (
- <PagePathHierarchicalLink
- linkedPagePath={linkedPagePath.parent}
- basePath={basePath}
- isInTrash={isParentInTrash}
- />
- ) }
- { isSeparatorRequired && (
- <span className="separator">/</span>
- ) }
- <a className="page-segment" href={href}>{linkedPagePath.pathName}</a>
- </>
- );
- };
- PagePathHierarchicalLink.propTypes = {
- linkedPagePath: PropTypes.instanceOf(LinkedPagePath).isRequired,
- basePath: PropTypes.string,
- isInTrash: PropTypes.bool,
- };
- export default PagePathHierarchicalLink;
|