All files / components/image-carousel image-carousel.jsx

100% Statements 9/9
100% Branches 10/10
100% Functions 3/3
100% Lines 9/9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66          2x 6x             2x 6x                 2x         2x         2x                               1x               1x                
import React from 'react';
import PropTypes from 'prop-types';
 
class ImageCarousel extends React.Component {
  render() {
    const content = this.props.slides.map((slide, s) => {
      return (
        <div className={`item${s === this.props.defaultSlide ? ' active' : ''}`} key={s}>
          <img src={slide.image} alt={`Slide ${s}`} />
          <div className="carousel-caption">{slide.caption}</div>
        </div>
      );
    });
    const slideIndices = this.props.slides.map((slide, s) => {
      return (
        <li
          key={s}
          className={s === this.props.defaultSlide ? 'active' : ''}
          data-target={`#${this.props.id}`}
          data-slide-to={s}
        />
      );
    });
    const leftButt = !this.props.hideButtons ? (
      <a className="left carousel-control" href={`#${this.props.id}`} data-slide="prev">
        <span className="fa fa-angle-left" />
      </a>
    ) : '';
    const rightButt = !this.props.hideButtons ? (
      <a className="right carousel-control" href={`#${this.props.id}`} data-slide="next">
        <span className="fa fa-angle-right" />
      </a>
    ) : '';
    return (
      <div id={this.props.id} className="carousel slide" data-ride="carousel">
        {!this.props.hideIndicators ? (
          <ol className="carousel-indicators">
            {slideIndices}
          </ol>
        ) : ''}
        <div className="carousel-inner">
          {content}
        </div>
        {leftButt}{rightButt}
      </div>
    );
  }
}
 
ImageCarousel.propTypes = {
  id: PropTypes.string.isRequired,
  slides: PropTypes.array,
  defaultSlide: PropTypes.number,
  hideIndicators: PropTypes.bool,
  hideButtons: PropTypes.bool
};
 
ImageCarousel.defaultProps = {
  slides: [],
  defaultSlide: 0,
  hideIndicators: false,
  hideButtons: false
};
 
export default ImageCarousel;