ndla-ui
Version:
UI component library for NDLA.
59 lines (49 loc) • 1.34 kB
JSX
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;