Demo

ProgressBar

export const Tick = ({ data }) =>
  <div className="tick" data-tick={data}></div>

export const pure(Tick);
export const Legend = ({title, numTicks, timeElapsed}) =>
  <div className="info">
    <h3>{title}</h3>
    <ul>
      <li>Ticks Rendered: {numTicks}</li>
      <li>Elapsed Time: {timeElapsed}</li>
    </ul>
  </div>

export const pure(Legend);
const ProgressBar = ({ title, timeElapsed, ticks, children, TickStrategy }) => {
  const mapper = (tick, index) => <TickStrategy key={index} data={index}/>;
  const renderedTicks = ticks.length > 0 ? ticks.map(mapper) : children;
  const numTicks = renderedTicks.length;
  return (
    <div>
      <Legend title={title}
                  numTicks={numTicks}
                  timeElapsed={timeElapsed}/>
      <div className="bar">
        {renderedTicks}
      </div>
    </div>
  );
}

ProgressBar.defaultProps = {
  ticks: [],
  TickStrategy: Tick
}

export default pure(ProgressBar);
const Wrap = (WrappedComponent) =>
  class extends React.Component {
    static displayName = wrapDisplayName(WrappedComponent, 'Wrap');
    render() {
      return <WrappedComponent {...this.props} />
    }
  }