'use strict'; import React from 'react'; import classnames from 'classnames'; import Col from 'react-bootstrap/lib/Col'; // Note: // // If we ever need generic breadcrumbs component, we should refactor this let SlidesContainerBreadcrumbs = React.createClass({ propTypes: { breadcrumbs: React.PropTypes.arrayOf(React.PropTypes.string).isRequired, slideNum: React.PropTypes.number.isRequired, numOfSlides: React.PropTypes.number.isRequired, containerWidth: React.PropTypes.number.isRequired, glyphiconClassNames: React.PropTypes.shape({ pending: React.PropTypes.string, complete: React.PropTypes.string }) }, getDefaultProps() { return { glyphiconClassNames: { pending: 'glyphicon glyphicon-chevron-right', complete: 'glyphicon glyphicon-lock' } }; }, render() { let breadcrumbs = this.props.breadcrumbs; let numSlides = breadcrumbs.length; let columnWidth = Math.floor(12 / numSlides); return ( <div className="row" style={{width: this.props.containerWidth}}> <div className="col-md-8 col-md-offset-2 col-sm-10 col-sm-offset-1 col-xs-12"> <div className="no-margin row ascribe-breadcrumb-container"> {breadcrumbs.map((breadcrumb, i) => { // Depending on the progress the user has already made, we display different // glyphicons that can also be specified from the outside let glyphiconClassName; if(i >= this.props.slideNum) { glyphiconClassName = this.props.glyphiconClassNames.pending; } else { glyphiconClassName = this.props.glyphiconClassNames.completed; } return ( <Col className="no-padding" sm={columnWidth} key={i}> <div className="ascribe-breadcrumb"> <a className={classnames({'active': this.props.slideNum === i})}> {breadcrumb} <span className={classnames({ 'invisible': i === numSlides - 1, 'pull-right': true, [glyphiconClassName]: true })}> </span> </a> </div> </Col> ); })} </div> </div> </div> ); } }); export default SlidesContainerBreadcrumbs;