@bigfishtv/cockpit
Version:
48 lines (41 loc) • 1.29 kB
JavaScript
import React, { Component } from 'react'
/**
* Displays breadcrumb trail, hooks into global 'breadcrumbs' class to receive updates based on scroll position
*/
export default class BreadcrumbTrail extends Component {
state = { trail: [] }
componentDidMount() {
if (window.breadcrumbs) window.breadcrumbs.addCallback(this.focusChange)
else console.error('BreadcrumbsHandler not inited yet!')
}
componentWillUnmount() {
window.breadcrumbs.removeCallback(this.focusChange)
}
focusChange = trail => {
this.setState({ trail })
}
handleAnchorClick(elem) {
window.breadcrumbs.scrollTo(elem)
}
render() {
return (
<nav className="breadcrumbs">
<ul>
{this.state.trail.map((crumb, i) => (
<li className="crumb" key={'crumb_' + i}>
{crumb.url && <a href={crumb.url}>{crumb.title}</a>}
{!crumb.url && <span onClick={this.handleAnchorClick.bind(this, crumb.elem)}>{crumb.title}</span>}
{i !== this.state.trail.length - 1 && (
<span className="breadcrumbs-divider">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
<path d="M7.5 4.5L6.44 5.56 9.88 9l-3.44 3.44L7.5 13.5 12 9z" />
</svg>
</span>
)}
</li>
))}
</ul>
</nav>
)
}
}