1 | import _extends from 'babel-runtime/helpers/extends';
|
2 | import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
|
3 | import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
|
4 | import _inherits from 'babel-runtime/helpers/inherits';
|
5 |
|
6 | var _class, _temp;
|
7 |
|
8 | import React, { Component } from 'react';
|
9 | import PropTypes from 'prop-types';
|
10 | import classNames from 'classnames';
|
11 | import Icon from '../../icon';
|
12 | import { obj, func } from '../../util';
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 | var noop = func.noop;
|
20 | var Arrow = (_temp = _class = function (_Component) {
|
21 | _inherits(Arrow, _Component);
|
22 |
|
23 | function Arrow() {
|
24 | _classCallCheck(this, Arrow);
|
25 |
|
26 | return _possibleConstructorReturn(this, _Component.apply(this, arguments));
|
27 | }
|
28 |
|
29 | Arrow.isDisabled = function isDisabled(props) {
|
30 | var infinite = props.infinite,
|
31 | type = props.type,
|
32 | centerMode = props.centerMode,
|
33 | currentSlide = props.currentSlide,
|
34 | slideCount = props.slideCount,
|
35 | slidesToShow = props.slidesToShow;
|
36 |
|
37 |
|
38 | if (infinite) {
|
39 | return false;
|
40 | }
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | if (type === 'prev') {
|
49 | return currentSlide <= 0;
|
50 | }
|
51 |
|
52 | if (centerMode && currentSlide >= slideCount - 1) {
|
53 |
|
54 | return true;
|
55 | } else if (currentSlide >= slideCount - slidesToShow) {
|
56 |
|
57 | return true;
|
58 | }
|
59 |
|
60 | return false;
|
61 | };
|
62 |
|
63 | Arrow.prototype.handleClick = function handleClick(options, e) {
|
64 | e && e.preventDefault();
|
65 |
|
66 |
|
67 | if (options.message === 'prev') {
|
68 | options.message = 'previous';
|
69 | }
|
70 |
|
71 | this.props.clickHandler(options, e);
|
72 | };
|
73 |
|
74 | Arrow.prototype.render = function render() {
|
75 | var _props = this.props,
|
76 | prefix = _props.prefix,
|
77 | type = _props.type,
|
78 | arrowSize = _props.arrowSize,
|
79 | arrowPosition = _props.arrowPosition,
|
80 | arrowDirection = _props.arrowDirection,
|
81 | onMouseEnter = _props.onMouseEnter,
|
82 | onMouseLeave = _props.onMouseLeave,
|
83 | children = _props.children;
|
84 |
|
85 |
|
86 | var others = obj.pickOthers(Arrow.propTypes, this.props);
|
87 | var iconType = Arrow.ARROW_ICON_TYPES[arrowDirection][type];
|
88 | var disabled = Arrow.isDisabled(this.props);
|
89 |
|
90 | var arrowClazz = classNames([prefix + 'slick-arrow', prefix + 'slick-' + type, arrowPosition, arrowSize, arrowDirection], { disabled: disabled });
|
91 |
|
92 | var arrowProps = _extends({}, others, {
|
93 | key: type,
|
94 | 'data-role': 'none',
|
95 | className: arrowClazz,
|
96 | style: { display: 'block' },
|
97 | onClick: disabled ? null : this.handleClick.bind(this, { message: type }),
|
98 | onMouseEnter: disabled ? null : onMouseEnter,
|
99 | onMouseLeave: disabled ? null : onMouseLeave
|
100 | });
|
101 |
|
102 | if (children) {
|
103 | return React.cloneElement(React.Children.only(children), arrowProps);
|
104 | } else {
|
105 | return React.createElement(
|
106 | 'button',
|
107 | _extends({ type: 'button', role: 'button' }, arrowProps),
|
108 | React.createElement(Icon, { type: iconType })
|
109 | );
|
110 | }
|
111 | };
|
112 |
|
113 | return Arrow;
|
114 | }(Component), _class.propTypes = {
|
115 | prefix: PropTypes.string,
|
116 | rtl: PropTypes.bool,
|
117 | type: PropTypes.oneOf(['prev', 'next']).isRequired,
|
118 | centerMode: PropTypes.bool,
|
119 | currentSlide: PropTypes.number,
|
120 | infinite: PropTypes.bool,
|
121 | clickHandler: PropTypes.func,
|
122 | slideCount: PropTypes.number,
|
123 | slidesToShow: PropTypes.number,
|
124 | arrow: PropTypes.element,
|
125 | arrowSize: PropTypes.string,
|
126 | arrowPosition: PropTypes.string,
|
127 | arrowDirection: PropTypes.oneOf(['hoz', 'ver']),
|
128 | onMouseEnter: PropTypes.func,
|
129 | onMouseLeave: PropTypes.func,
|
130 | children: PropTypes.node
|
131 | }, _class.defaultProps = {
|
132 | onMouseEnter: noop,
|
133 | onMouseLeave: noop
|
134 | }, _class.ARROW_ICON_TYPES = {
|
135 | hoz: { prev: 'arrow-left', next: 'arrow-right' },
|
136 | ver: { prev: 'arrow-up', next: 'arrow-down' }
|
137 | }, _temp);
|
138 | Arrow.displayName = 'Arrow';
|
139 | export { Arrow as default }; |
\ | No newline at end of file |