1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _extends2 = require('babel-runtime/helpers/extends');
|
6 |
|
7 | var _extends3 = _interopRequireDefault(_extends2);
|
8 |
|
9 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
10 |
|
11 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
12 |
|
13 | var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
14 |
|
15 | var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
16 |
|
17 | var _inherits2 = require('babel-runtime/helpers/inherits');
|
18 |
|
19 | var _inherits3 = _interopRequireDefault(_inherits2);
|
20 |
|
21 | var _class, _temp;
|
22 |
|
23 | var _react = require('react');
|
24 |
|
25 | var _react2 = _interopRequireDefault(_react);
|
26 |
|
27 | var _propTypes = require('prop-types');
|
28 |
|
29 | var _propTypes2 = _interopRequireDefault(_propTypes);
|
30 |
|
31 | var _reactLifecyclesCompat = require('react-lifecycles-compat');
|
32 |
|
33 | var _util = require('../../util');
|
34 |
|
35 | var _eventHandlers = require('./mixins/event-handlers');
|
36 |
|
37 | var _eventHandlers2 = _interopRequireDefault(_eventHandlers);
|
38 |
|
39 | var _helpers = require('./mixins/helpers');
|
40 |
|
41 | var _helpers2 = _interopRequireDefault(_helpers);
|
42 |
|
43 | var _arrow = require('./arrow');
|
44 |
|
45 | var _arrow2 = _interopRequireDefault(_arrow);
|
46 |
|
47 | var _track = require('./track');
|
48 |
|
49 | var _track2 = _interopRequireDefault(_track);
|
50 |
|
51 | var _dots = require('./dots');
|
52 |
|
53 | var _dots2 = _interopRequireDefault(_dots);
|
54 |
|
55 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | var noop = _util.func.noop;
|
62 | var InnerSlider = (_temp = _class = function (_React$Component) {
|
63 | (0, _inherits3.default)(InnerSlider, _React$Component);
|
64 |
|
65 | function InnerSlider(props) {
|
66 | (0, _classCallCheck3.default)(this, InnerSlider);
|
67 |
|
68 | var _this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call(this, props));
|
69 |
|
70 | _this.state = {
|
71 | animating: false,
|
72 | dragging: false,
|
73 | autoPlayTimer: null,
|
74 | currentDirection: 0,
|
75 | currentLeft: null,
|
76 | currentSlide: 'activeIndex' in props ? props.activeIndex : props.defaultActiveIndex,
|
77 | direction: 1,
|
78 | listWidth: null,
|
79 | listHeight: null,
|
80 | slideCount: null,
|
81 | slideWidth: null,
|
82 | slideHeight: null,
|
83 | swipeLeft: null,
|
84 | touchObject: {
|
85 | startX: 0,
|
86 | startY: 0,
|
87 | curX: 0,
|
88 | curY: 0
|
89 | },
|
90 |
|
91 | lazyLoadedList: [],
|
92 |
|
93 |
|
94 | initialized: false,
|
95 | edgeDragged: false,
|
96 | swiped: false,
|
97 | trackStyle: {},
|
98 | trackWidth: 0
|
99 | };
|
100 |
|
101 |
|
102 |
|
103 | _util.func.bindCtx(_this, ['onWindowResized', 'selectHandler', 'changeSlide', 'onInnerSliderEnter', 'onInnerSliderLeave', 'swipeStart', 'swipeMove', 'swipeEnd']);
|
104 | return _this;
|
105 | }
|
106 |
|
107 | InnerSlider.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
|
108 | var state = {};
|
109 |
|
110 | var lazyLoad = nextProps.lazyLoad,
|
111 | children = nextProps.children,
|
112 | slidesToShow = nextProps.slidesToShow,
|
113 | activeIndex = nextProps.activeIndex;
|
114 | var currentSlide = prevState.currentSlide;
|
115 |
|
116 | var lazyLoadedList = [];
|
117 |
|
118 | if (children !== prevState.children) {
|
119 | state.children = children;
|
120 | }
|
121 |
|
122 | if (lazyLoad) {
|
123 | for (var i = 0, j = _react2.default.Children.count(children); i < j; i++) {
|
124 | if (i >= currentSlide && i < currentSlide + slidesToShow) {
|
125 | lazyLoadedList.push(i);
|
126 |
|
127 | var pre = i - 1 < 0 ? j - 1 : i - 1;
|
128 | var next = i + 1 >= j ? 0 : i + 1;
|
129 |
|
130 | lazyLoadedList.push(pre);
|
131 | lazyLoadedList.push(next);
|
132 | }
|
133 | }
|
134 |
|
135 | if (prevState.lazyLoadedList.length === 0) {
|
136 | state.lazyLoadedList = lazyLoadedList;
|
137 | }
|
138 | }
|
139 |
|
140 | return state;
|
141 | };
|
142 |
|
143 | InnerSlider.prototype.componentDidMount = function componentDidMount() {
|
144 | this.hasMounted = true;
|
145 |
|
146 |
|
147 | this.initialize(this.props);
|
148 | this.adaptHeight();
|
149 |
|
150 | if (this.props.activeIndex) {
|
151 | this.slickGoTo(this.props.activeIndex);
|
152 | }
|
153 |
|
154 |
|
155 | if (window) {
|
156 |
|
157 | _util.events.on(window, 'resize', this.onWindowResized);
|
158 | }
|
159 | };
|
160 |
|
161 | InnerSlider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
|
162 | if (prevProps.activeIndex !== this.props.activeIndex) {
|
163 | this.slickGoTo(this.props.activeIndex);
|
164 | } else if (prevState.currentSlide >= this.props.children.length) {
|
165 | this.update(this.props);
|
166 | this.changeSlide({
|
167 | message: 'index',
|
168 | index: this.props.children.length - this.props.slidesToShow,
|
169 | currentSlide: this.state.currentSlide
|
170 | });
|
171 | } else {
|
172 | var update = !_util.obj.shallowEqual(prevProps, this.props);
|
173 | if (update) {
|
174 | this.update(this.props);
|
175 | }
|
176 | }
|
177 |
|
178 | this.adaptHeight();
|
179 | };
|
180 |
|
181 | InnerSlider.prototype.componentWillUnmount = function componentWillUnmount() {
|
182 | if (this.animationEndCallback) {
|
183 | clearTimeout(this.animationEndCallback);
|
184 | }
|
185 |
|
186 | _util.events.off(window, 'resize', this.onWindowResized);
|
187 |
|
188 | if (this.state.autoPlayTimer) {
|
189 | clearInterval(this.state.autoPlayTimer);
|
190 | }
|
191 | };
|
192 |
|
193 | InnerSlider.prototype.onWindowResized = function onWindowResized() {
|
194 | this.update(this.props);
|
195 |
|
196 | this.setState({ animating: false });
|
197 | clearTimeout(this.animationEndCallback);
|
198 | delete this.animationEndCallback;
|
199 | };
|
200 |
|
201 | InnerSlider.prototype.slickGoTo = function slickGoTo(slide) {
|
202 | typeof slide === 'number' && this.changeSlide({
|
203 | message: 'index',
|
204 | index: slide,
|
205 | currentSlide: this.state.currentSlide
|
206 | });
|
207 | };
|
208 |
|
209 | InnerSlider.prototype.onEnterArrow = function onEnterArrow(msg) {
|
210 | this.arrowHoverHandler(msg);
|
211 | };
|
212 |
|
213 | InnerSlider.prototype.onLeaveArrow = function onLeaveArrow() {
|
214 | this.arrowHoverHandler();
|
215 | };
|
216 |
|
217 | InnerSlider.prototype._instanceRefHandler = function _instanceRefHandler(attr, ref) {
|
218 | this[attr] = ref;
|
219 | };
|
220 |
|
221 | InnerSlider.prototype.render = function render() {
|
222 | var _props = this.props,
|
223 | prefix = _props.prefix,
|
224 | animation = _props.animation,
|
225 | arrows = _props.arrows,
|
226 | arrowSize = _props.arrowSize,
|
227 | arrowPosition = _props.arrowPosition,
|
228 | arrowDirection = _props.arrowDirection,
|
229 | dots = _props.dots,
|
230 | dotsClass = _props.dotsClass,
|
231 | cssEase = _props.cssEase,
|
232 | speed = _props.speed,
|
233 | infinite = _props.infinite,
|
234 | centerMode = _props.centerMode,
|
235 | centerPadding = _props.centerPadding,
|
236 | lazyLoad = _props.lazyLoad,
|
237 | dotsDirection = _props.dotsDirection,
|
238 | rtl = _props.rtl,
|
239 | slidesToShow = _props.slidesToShow,
|
240 | slidesToScroll = _props.slidesToScroll,
|
241 | variableWidth = _props.variableWidth,
|
242 | vertical = _props.vertical,
|
243 | verticalSwiping = _props.verticalSwiping,
|
244 | focusOnSelect = _props.focusOnSelect,
|
245 | children = _props.children,
|
246 | dotsRender = _props.dotsRender,
|
247 | triggerType = _props.triggerType;
|
248 | var _state = this.state,
|
249 | currentSlide = _state.currentSlide,
|
250 | lazyLoadedList = _state.lazyLoadedList,
|
251 | slideCount = _state.slideCount,
|
252 | slideWidth = _state.slideWidth,
|
253 | slideHeight = _state.slideHeight,
|
254 | trackStyle = _state.trackStyle,
|
255 | listHeight = _state.listHeight,
|
256 | dragging = _state.dragging;
|
257 |
|
258 |
|
259 |
|
260 | var trackProps = {
|
261 | prefix: prefix,
|
262 | animation: animation,
|
263 | cssEase: cssEase,
|
264 | speed: speed,
|
265 | infinite: infinite,
|
266 | centerMode: centerMode,
|
267 | focusOnSelect: focusOnSelect ? this.selectHandler : null,
|
268 | currentSlide: currentSlide,
|
269 | lazyLoad: lazyLoad,
|
270 | lazyLoadedList: lazyLoadedList,
|
271 | rtl: rtl,
|
272 | slideWidth: slideWidth,
|
273 | slideHeight: slideHeight,
|
274 | slidesToShow: slidesToShow,
|
275 | slidesToScroll: slidesToScroll,
|
276 | slideCount: slideCount,
|
277 | trackStyle: trackStyle,
|
278 | variableWidth: variableWidth,
|
279 | vertical: vertical,
|
280 | verticalSwiping: verticalSwiping,
|
281 | triggerType: triggerType
|
282 |
|
283 | };
|
284 |
|
285 | var dotsEle = void 0;
|
286 |
|
287 | if (dots === true && slideCount > slidesToShow) {
|
288 | var dotProps = {
|
289 | prefix: prefix,
|
290 | rtl: rtl,
|
291 | dotsClass: dotsClass,
|
292 | slideCount: slideCount,
|
293 | slidesToShow: slidesToShow,
|
294 | currentSlide: currentSlide,
|
295 | slidesToScroll: slidesToScroll,
|
296 | dotsDirection: dotsDirection,
|
297 | changeSlide: this.changeSlide,
|
298 | dotsRender: dotsRender,
|
299 | triggerType: triggerType
|
300 | };
|
301 |
|
302 | dotsEle = _react2.default.createElement(_dots2.default, dotProps);
|
303 | }
|
304 |
|
305 | var prevArrow = void 0,
|
306 | nextArrow = void 0;
|
307 |
|
308 | var arrowProps = {
|
309 | prefix: prefix,
|
310 | rtl: rtl,
|
311 | arrowSize: arrowSize,
|
312 | arrowPosition: arrowPosition,
|
313 | arrowDirection: arrowDirection,
|
314 | infinite: infinite,
|
315 | centerMode: centerMode,
|
316 | currentSlide: currentSlide,
|
317 | slideCount: slideCount,
|
318 | slidesToShow: slidesToShow,
|
319 | clickHandler: this.changeSlide
|
320 | };
|
321 |
|
322 | if (arrows) {
|
323 | prevArrow = _react2.default.createElement(
|
324 | _arrow2.default,
|
325 | (0, _extends3.default)({}, arrowProps, {
|
326 | type: 'prev',
|
327 | 'aria-label': 'Previous',
|
328 | ref: this._instanceRefHandler.bind(this, 'pArrow'),
|
329 | onMouseEnter: animation ? this.onEnterArrow.bind(this, 'prev') : noop,
|
330 | onMouseLeave: animation ? this.onLeaveArrow.bind(this, 'prev') : noop
|
331 | }),
|
332 | this.props.prevArrow
|
333 | );
|
334 |
|
335 | nextArrow = _react2.default.createElement(
|
336 | _arrow2.default,
|
337 | (0, _extends3.default)({}, arrowProps, {
|
338 | type: 'next',
|
339 | 'aria-label': 'Next',
|
340 | ref: this._instanceRefHandler.bind(this, 'nArrow'),
|
341 | onMouseEnter: animation ? this.onEnterArrow.bind(this, 'next') : noop,
|
342 | onMouseLeave: animation ? this.onLeaveArrow.bind(this, 'next') : noop
|
343 | }),
|
344 | this.props.nextArrow
|
345 | );
|
346 | }
|
347 |
|
348 | var verticalHeightStyle = vertical ? {
|
349 | height: listHeight
|
350 | } : null;
|
351 |
|
352 | var centerPaddingStyle = void 0;
|
353 | if (centerMode) {
|
354 | centerPaddingStyle = vertical ? { padding: centerPadding + ' 0px' } : { padding: '0px ' + centerPadding };
|
355 | }
|
356 |
|
357 | return _react2.default.createElement(
|
358 | 'div',
|
359 | {
|
360 | className: prefix + 'slick-container ' + prefix + 'slick-initialized',
|
361 | onMouseEnter: this.onInnerSliderEnter,
|
362 | onMouseLeave: this.onInnerSliderLeave
|
363 | },
|
364 | _react2.default.createElement(
|
365 | 'div',
|
366 | {
|
367 | ref: this._instanceRefHandler.bind(this, 'list'),
|
368 | className: prefix + 'slick-list',
|
369 | style: (0, _extends3.default)({}, verticalHeightStyle, centerPaddingStyle),
|
370 | onMouseDown: this.swipeStart,
|
371 | onMouseUp: this.swipeEnd,
|
372 | onTouchStart: this.swipeStart,
|
373 | onTouchEnd: this.swipeEnd,
|
374 | onMouseMove: dragging ? this.swipeMove : null,
|
375 | onMouseLeave: dragging ? this.swipeEnd : null,
|
376 | onTouchMove: dragging ? this.swipeMove : null,
|
377 | onTouchCancel: dragging ? this.swipeEnd : null
|
378 | },
|
379 | _react2.default.createElement(
|
380 | _track2.default,
|
381 | (0, _extends3.default)({ ref: this._instanceRefHandler.bind(this, 'track') }, trackProps),
|
382 | children
|
383 | )
|
384 | ),
|
385 | prevArrow,
|
386 | nextArrow,
|
387 | dotsEle
|
388 | );
|
389 | };
|
390 |
|
391 | return InnerSlider;
|
392 | }(_react2.default.Component), _class.propTypes = {
|
393 | prefix: _propTypes2.default.string,
|
394 | animation: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.bool]),
|
395 | arrows: _propTypes2.default.bool,
|
396 | arrowSize: _propTypes2.default.oneOf(['medium', 'large']),
|
397 | arrowPosition: _propTypes2.default.oneOf(['inner', 'outer']),
|
398 | arrowDirection: _propTypes2.default.oneOf(['hoz', 'ver']),
|
399 | centerPadding: _propTypes2.default.any,
|
400 | children: _propTypes2.default.any,
|
401 | centerMode: _propTypes2.default.bool,
|
402 | dots: _propTypes2.default.bool,
|
403 | dotsDirection: _propTypes2.default.oneOf(['hoz', 'ver']),
|
404 | dotsClass: _propTypes2.default.string,
|
405 | focusOnSelect: _propTypes2.default.bool,
|
406 | cssEase: _propTypes2.default.string,
|
407 | speed: _propTypes2.default.number,
|
408 | infinite: _propTypes2.default.bool,
|
409 | defaultActiveIndex: _propTypes2.default.number,
|
410 | rtl: _propTypes2.default.bool,
|
411 | slidesToShow: _propTypes2.default.number,
|
412 | lazyLoad: _propTypes2.default.bool,
|
413 | activeIndex: _propTypes2.default.number,
|
414 | slidesToScroll: _propTypes2.default.number,
|
415 | variableWidth: _propTypes2.default.bool,
|
416 | vertical: _propTypes2.default.bool,
|
417 | verticalSwiping: _propTypes2.default.bool,
|
418 | prevArrow: _propTypes2.default.element,
|
419 | nextArrow: _propTypes2.default.element,
|
420 | dotsRender: _propTypes2.default.func,
|
421 | triggerType: _propTypes2.default.string
|
422 | }, _class.defaultProps = {
|
423 | prefix: 'next-',
|
424 | arrowDirection: 'hoz',
|
425 | triggerType: 'click'
|
426 | }, _temp);
|
427 |
|
428 |
|
429 |
|
430 | InnerSlider.displayName = 'InnerSlider';
|
431 | (0, _extends3.default)(InnerSlider.prototype, _helpers2.default);
|
432 | (0, _extends3.default)(InnerSlider.prototype, _eventHandlers2.default);
|
433 |
|
434 | exports.default = (0, _reactLifecyclesCompat.polyfill)(InnerSlider);
|
435 | module.exports = exports['default']; |
\ | No newline at end of file |