UNPKG

ndla-ui

Version:

UI component library for NDLA.

59 lines (49 loc) 1.34 kB
import React from 'react'; import PropTypes from 'prop-types'; import BEMHelper from 'react-bem-helper'; import { ChevronLeft, ChevronRight } from 'ndla-icons/common'; import Slider from 'react-slick'; const classes = BEMHelper('c-carousel'); const arrow = direction => ( { className, style, onClick }, // eslint-disable-line ) => ( <button type="button" className={`${classes('arrow', [direction]).className} ${className}`} onClick={onClick}> {direction === 'prev' ? <ChevronLeft /> : <ChevronRight />} </button> ); const NextArrow = arrow('next'); const PrevArrow = arrow('prev'); const getDefaultSettings = () => ({ nextArrow: <NextArrow />, prevArrow: <PrevArrow />, dots: false, infinite: false, slidesToShow: 4, slidesToScroll: 4, swipeToScroll: false, draggable: false, }); const Carousel = ({ children, settings }) => { let mergedSettings = null; if (!settings) { mergedSettings = getDefaultSettings(); } else { mergedSettings = Object.assign({}, getDefaultSettings(), settings); } return ( <Slider {...classes()} {...mergedSettings}> {children} </Slider> ); }; Carousel.propTypes = { children: PropTypes.node.isRequired, settings: PropTypes.object, // eslint-disable-line }; Carousel.defaultProps = { settings: null, }; export default Carousel;