@merchantlabs/react-carousel
Version:
Merchant Labs React component library.
176 lines (141 loc) • 6.36 kB
JavaScript
'use strict';
exports.__esModule = true;
var _templateObject = _taggedTemplateLiteralLoose(['\n margin: 0 auto;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: relative;\n'], ['\n margin: 0 auto;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: relative;\n']),
_templateObject2 = _taggedTemplateLiteralLoose(['\n margin: 0 auto;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n'], ['\n margin: 0 auto;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n']),
_templateObject3 = _taggedTemplateLiteralLoose(['\n margin: 0 auto;\n padding: 25px 0 0;\n position: relative;\n'], ['\n margin: 0 auto;\n padding: 25px 0 0;\n position: relative;\n']),
_templateObject4 = _taggedTemplateLiteralLoose(['\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n top: 40%;\n'], ['\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n top: 40%;\n']);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _styledComponents = require('styled-components');
var _styledComponents2 = _interopRequireDefault(_styledComponents);
var _reactSwipeableViews = require('react-swipeable-views');
var _reactSwipeableViews2 = _interopRequireDefault(_reactSwipeableViews);
var _reactSwipeableViewsUtils = require('react-swipeable-views-utils');
var _reactSwipeableViewsCore = require('react-swipeable-views-core');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
var SwipeableView = (0, _reactSwipeableViewsUtils.autoPlay)((0, _reactSwipeableViewsUtils.virtualize)(_reactSwipeableViews2.default));
var Slider = (0, _react.forwardRef)(function (_ref, ref) {
var slides = _ref.slides,
interval = _ref.interval,
slideRenderer = _ref.slideRenderer,
Dot = _ref.dotComponent,
Button = _ref.buttonComponent,
className = _ref.className;
var _useState = (0, _react.useState)(true),
auto = _useState[0],
setAuto = _useState[1];
var _useState2 = (0, _react.useState)(0),
activeIndex = _useState2[0],
setActiveIndex = _useState2[1];
var _useState3 = (0, _react.useState)(0),
infiniteIndex = _useState3[0],
setInfiniteIndex = _useState3[1];
var _useState4 = (0, _react.useState)(true),
pageIsVisible = _useState4[0],
setPageIsVisible = _useState4[1];
(0, _react.useEffect)(function () {
if (typeof window === 'undefined') return;
function handlePageVisibilityChange() {
setPageIsVisible(document.visibilityState === 'visible');
}
document.addEventListener('visibilitychange', handlePageVisibilityChange);
return function () {
document.removeEventListener('visibilitychange', handlePageVisibilityChange);
};
});
function onChangeIndex(index, indexLatest, meta) {
setActiveIndex((0, _reactSwipeableViewsCore.mod)(index, indexLatest));
setInfiniteIndex(index);
}
function onMouseEnter() {
setAuto(false);
}
function onMouseLeave() {
setAuto(true);
}
function moveLeft() {
setActiveIndex((0, _reactSwipeableViewsCore.mod)(infiniteIndex - 1, slides.length));
setInfiniteIndex(infiniteIndex - 1);
}
function moveRight() {
setActiveIndex((0, _reactSwipeableViewsCore.mod)(infiniteIndex + 1, slides.length));
setInfiniteIndex(infiniteIndex + 1);
}
function slideToIndex(index) {
setActiveIndex(index);
setInfiniteIndex(infiniteIndex + (index - activeIndex));
}
function renderSlides(_ref2) {
var index = _ref2.index,
key = _ref2.key;
var slideData = slides[(0, _reactSwipeableViewsCore.mod)(index, slides.length)];
return _react2.default.createElement(
'div',
{ key: key, className: className },
slideRenderer(slideData)
);
}
return _react2.default.createElement(
CarouselContainer,
{ ref: ref },
_react2.default.createElement(
SlideContainer,
null,
_react2.default.createElement(SwipeableView, {
onMouseEnter: onMouseEnter,
onMouseLeave: onMouseLeave,
onChangeIndex: onChangeIndex,
index: infiniteIndex,
autoplay: auto && slides.length > 1 && pageIsVisible,
interval: interval,
springConfig: {
duration: '.8s',
easeFunction: 'cubic-bezier(0.15, 0.3, 0.25, 1)',
delay: '0s'
},
slideRenderer: renderSlides
})
),
Button && slides.length !== 1 && _react2.default.createElement(
ButtonContainer,
null,
_react2.default.createElement(Button, { onClick: moveLeft, left: true }),
_react2.default.createElement(Button, { onClick: moveRight, right: true })
),
Dot && slides.length > 1 && _react2.default.createElement(
DotsContainer,
null,
slides.map(function (slide, i) {
var isActive = i === activeIndex;
return _react2.default.createElement(Dot, {
key: i,
isActive: isActive,
onClick: function onClick() {
return slideToIndex(i);
}
});
})
)
);
});
Slider.propTypes = process.env.NODE_ENV !== "production" ? {
slides: _propTypes2.default.array.isRequired,
slideRenderer: _propTypes2.default.func.isRequired,
dotComponent: _propTypes2.default.object,
buttonComponent: _propTypes2.default.object,
interval: _propTypes2.default.number,
className: _propTypes2.default.string,
autoPlay: _propTypes2.default.bool
} : {};
Slider.defaultProps = {
interval: 5000
};
exports.default = Slider;
var CarouselContainer = _styledComponents2.default.div(_templateObject);
var SlideContainer = _styledComponents2.default.div(_templateObject2);
var DotsContainer = _styledComponents2.default.ul(_templateObject3);
var ButtonContainer = _styledComponents2.default.div(_templateObject4);
module.exports = exports['default'];