UNPKG

@plone/volto

Version:
95 lines (86 loc) 2.64 kB
import { useEffect } from 'react'; import PropTypes from 'prop-types'; import { Link, useLocation } from 'react-router-dom'; import { Breadcrumb, Container, Segment } from 'semantic-ui-react'; import { defineMessages, useIntl } from 'react-intl'; import { useDispatch, useSelector, shallowEqual } from 'react-redux'; import { getBreadcrumbs } from '@plone/volto/actions/breadcrumbs/breadcrumbs'; import { getBaseUrl } from '@plone/volto/helpers/Url/Url'; import { hasApiExpander } from '@plone/volto/helpers/Utils/Utils'; import Icon from '@plone/volto/components/theme/Icon/Icon'; import homeSVG from '@plone/volto/icons/home.svg'; const messages = defineMessages({ home: { id: 'Home', defaultMessage: 'Home', }, breadcrumbs: { id: 'Breadcrumbs', defaultMessage: 'Breadcrumbs', }, controlpanel: { id: 'Site Setup', defaultMessage: 'Site Setup', }, }); const BreadcrumbsComponent = ({ pathname }) => { const intl = useIntl(); const dispatch = useDispatch(); const { pathname: realPath } = useLocation(); const controlpanelItems = [ { url: '/controlpanel', title: intl.formatMessage(messages.controlpanel), }, ]; const items = useSelector( (state) => realPath.startsWith('/controlpanel') ? controlpanelItems : state.breadcrumbs.items, shallowEqual, ); const root = useSelector((state) => state.breadcrumbs.root); useEffect(() => { if (!hasApiExpander('breadcrumbs', getBaseUrl(pathname))) { dispatch(getBreadcrumbs(getBaseUrl(pathname))); } }, [dispatch, pathname]); return ( <Segment role="navigation" aria-label={intl.formatMessage(messages.breadcrumbs)} className="breadcrumbs" secondary vertical > <Container> <Breadcrumb> <Link to={root || '/'} className="section" title={intl.formatMessage(messages.home)} > <Icon name={homeSVG} size="18px" /> </Link> {items.map((item, index, items) => [ <Breadcrumb.Divider key={`divider-${item.url}`} />, index < items.length - 1 ? ( <Link key={item.url} to={item.url} className="section"> {item.title} </Link> ) : ( <Breadcrumb.Section key={item.url} active> {item.title} </Breadcrumb.Section> ), ])} </Breadcrumb> </Container> </Segment> ); }; BreadcrumbsComponent.propTypes = { pathname: PropTypes.string.isRequired, }; export default BreadcrumbsComponent;