UNPKG

antd

Version:

An enterprise-class UI design language and React-based implementation

117 lines (106 loc) 3.89 kB
import _extends from 'babel-runtime/helpers/extends'; import _classCallCheck from 'babel-runtime/helpers/classCallCheck'; import _createClass from 'babel-runtime/helpers/createClass'; import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn'; import _inherits from 'babel-runtime/helpers/inherits'; import * as React from 'react'; import debounce from 'lodash/debounce'; // matchMedia polyfill for // https://github.com/WickyNilliams/enquire.js/issues/82 if (typeof window !== 'undefined') { var matchMediaPolyfill = function matchMediaPolyfill(mediaQuery) { return { media: mediaQuery, matches: false, addListener: function addListener() {}, removeListener: function removeListener() {} }; }; window.matchMedia = window.matchMedia || matchMediaPolyfill; } // Use require over import (will be lifted up) // make sure matchMedia polyfill run before require('react-slick') // Fix https://github.com/ant-design/ant-design/issues/6560 // Fix https://github.com/ant-design/ant-design/issues/3308 var SlickCarousel = require('react-slick')['default']; var Carousel = function (_React$Component) { _inherits(Carousel, _React$Component); function Carousel(props) { _classCallCheck(this, Carousel); var _this = _possibleConstructorReturn(this, (Carousel.__proto__ || Object.getPrototypeOf(Carousel)).call(this, props)); _this.onWindowResized = function () { // Fix https://github.com/ant-design/ant-design/issues/2550 var autoplay = _this.props.autoplay; if (autoplay && _this.slick && _this.slick.innerSlider && _this.slick.innerSlider.autoPlay) { _this.slick.innerSlider.autoPlay(); } }; _this.saveSlick = function (node) { _this.slick = node; }; _this.onWindowResized = debounce(_this.onWindowResized, 500, { leading: false }); return _this; } _createClass(Carousel, [{ key: 'componentDidMount', value: function componentDidMount() { var autoplay = this.props.autoplay; if (autoplay) { window.addEventListener('resize', this.onWindowResized); } // https://github.com/ant-design/ant-design/issues/7191 this.innerSlider = this.slick && this.slick.innerSlider; } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { var autoplay = this.props.autoplay; if (autoplay) { window.removeEventListener('resize', this.onWindowResized); this.onWindowResized.cancel(); } } }, { key: 'next', value: function next() { this.slick.slickNext(); } }, { key: 'prev', value: function prev() { this.slick.slickPrev(); } }, { key: 'goTo', value: function goTo(slide) { this.slick.slickGoTo(slide); } }, { key: 'render', value: function render() { var props = _extends({}, this.props); if (props.effect === 'fade') { props.fade = true; } var className = props.prefixCls; if (props.vertical) { className = className + ' ' + className + '-vertical'; } return React.createElement( 'div', { className: className }, React.createElement(SlickCarousel, _extends({ ref: this.saveSlick }, props)) ); } }]); return Carousel; }(React.Component); export default Carousel; Carousel.defaultProps = { dots: true, arrows: false, prefixCls: 'ant-carousel', draggable: false };