import React from 'react'; import PropTypes from 'prop-types'; import ActiveStatusBar from 'components/ActiveStatusBar'; import InactiveStatusBar from 'components/InactiveStatusBar'; class ProgressBar extends React.Component { constructor (props) { super(props); this.state = { bars : [], index : 0, incrementer: 1, }; this.createBars = this.createBars.bind(this); this.startProgressBar = this.startProgressBar.bind(this); this.updateProgressBar = this.updateProgressBar.bind(this); this.stopProgressBar = this.stopProgressBar.bind(this); } componentDidMount () { this.createBars(); this.startProgressBar(); } componentWillUnmount () { this.stopProgressBar(); } createBars () { const bars = []; for (let i = 0; i <= this.props.size; i++) { bars.push({isActive: false}); } this.setState({ bars }); } startProgressBar () { this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300); }; updateProgressBar () { let index = this.state.index; let incrementer = this.state.incrementer; let bars = this.state.bars; // flip incrementer if necessary, to stay in bounds if ((index < 0) || (index > this.props.size)) { incrementer = incrementer * -1; index += incrementer; } // update the indexed bar if (incrementer > 0) { bars[index].isActive = true; } else { bars[index].isActive = false; }; // increment index index += incrementer; // update state this.setState({ bars, incrementer, index, }); }; stopProgressBar () { clearInterval(this.updateInterval); }; render () { return (
{this.state.bars.map((bar, index) => bar.isActive ? : )}
); } }; ProgressBar.propTypes = { size: PropTypes.number.isRequired, }; export default ProgressBar;