UNPKG

5.5 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.default = undefined;
5
6var _extends2 = require('babel-runtime/helpers/extends');
7
8var _extends3 = _interopRequireDefault(_extends2);
9
10var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
11
12var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
13
14var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
15
16var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
17
18var _inherits2 = require('babel-runtime/helpers/inherits');
19
20var _inherits3 = _interopRequireDefault(_inherits2);
21
22var _class, _temp;
23
24var _react = require('react');
25
26var _react2 = _interopRequireDefault(_react);
27
28var _propTypes = require('prop-types');
29
30var _propTypes2 = _interopRequireDefault(_propTypes);
31
32var _classnames = require('classnames');
33
34var _classnames2 = _interopRequireDefault(_classnames);
35
36var _icon = require('../../icon');
37
38var _icon2 = _interopRequireDefault(_icon);
39
40var _util = require('../../util');
41
42function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
44/**
45 * slider arrow
46 * 左右控制箭头
47 */
48
49var noop = _util.func.noop;
50var Arrow = (_temp = _class = function (_Component) {
51 (0, _inherits3.default)(Arrow, _Component);
52
53 function Arrow() {
54 (0, _classCallCheck3.default)(this, Arrow);
55 return (0, _possibleConstructorReturn3.default)(this, _Component.apply(this, arguments));
56 }
57
58 Arrow.isDisabled = function isDisabled(props) {
59 var infinite = props.infinite,
60 type = props.type,
61 centerMode = props.centerMode,
62 currentSlide = props.currentSlide,
63 slideCount = props.slideCount,
64 slidesToShow = props.slidesToShow;
65
66
67 if (infinite) {
68 return false;
69 }
70
71 // 下一个 index 大于总数??
72 // if (slideCount <= slidesToShow) {
73 // return true;
74 // }
75
76 // 向前箭头:当前是第 0 个
77 if (type === 'prev') {
78 return currentSlide <= 0;
79 }
80
81 if (centerMode && currentSlide >= slideCount - 1) {
82 // 向后箭头:居中模式,当前 index 大于最大 index
83 return true;
84 } else if (currentSlide >= slideCount - slidesToShow) {
85 // 向后箭头:普通模式,当前 index 大于 总数 - 下一个 index ???
86 return true;
87 }
88
89 return false;
90 };
91
92 Arrow.prototype.handleClick = function handleClick(options, e) {
93 e && e.preventDefault();
94
95 // TODO hack
96 if (options.message === 'prev') {
97 options.message = 'previous';
98 }
99
100 this.props.clickHandler(options, e);
101 };
102
103 Arrow.prototype.render = function render() {
104 var _props = this.props,
105 prefix = _props.prefix,
106 type = _props.type,
107 arrowSize = _props.arrowSize,
108 arrowPosition = _props.arrowPosition,
109 arrowDirection = _props.arrowDirection,
110 onMouseEnter = _props.onMouseEnter,
111 onMouseLeave = _props.onMouseLeave,
112 children = _props.children;
113
114
115 var others = _util.obj.pickOthers(Arrow.propTypes, this.props);
116 var iconType = Arrow.ARROW_ICON_TYPES[arrowDirection][type];
117 var disabled = Arrow.isDisabled(this.props);
118
119 var arrowClazz = (0, _classnames2.default)([prefix + 'slick-arrow', prefix + 'slick-' + type, arrowPosition, arrowSize, arrowDirection], { disabled: disabled });
120
121 var arrowProps = (0, _extends3.default)({}, others, {
122 key: type,
123 'data-role': 'none',
124 className: arrowClazz,
125 style: { display: 'block' },
126 onClick: disabled ? null : this.handleClick.bind(this, { message: type }),
127 onMouseEnter: disabled ? null : onMouseEnter,
128 onMouseLeave: disabled ? null : onMouseLeave
129 });
130
131 if (children) {
132 return _react2.default.cloneElement(_react2.default.Children.only(children), arrowProps);
133 } else {
134 return _react2.default.createElement(
135 'button',
136 (0, _extends3.default)({ type: 'button', role: 'button' }, arrowProps),
137 _react2.default.createElement(_icon2.default, { type: iconType })
138 );
139 }
140 };
141
142 return Arrow;
143}(_react.Component), _class.propTypes = {
144 prefix: _propTypes2.default.string,
145 rtl: _propTypes2.default.bool,
146 type: _propTypes2.default.oneOf(['prev', 'next']).isRequired,
147 centerMode: _propTypes2.default.bool,
148 currentSlide: _propTypes2.default.number,
149 infinite: _propTypes2.default.bool,
150 clickHandler: _propTypes2.default.func,
151 slideCount: _propTypes2.default.number,
152 slidesToShow: _propTypes2.default.number,
153 arrow: _propTypes2.default.element,
154 arrowSize: _propTypes2.default.string,
155 arrowPosition: _propTypes2.default.string,
156 arrowDirection: _propTypes2.default.oneOf(['hoz', 'ver']),
157 onMouseEnter: _propTypes2.default.func,
158 onMouseLeave: _propTypes2.default.func,
159 children: _propTypes2.default.node
160}, _class.defaultProps = {
161 onMouseEnter: noop,
162 onMouseLeave: noop
163}, _class.ARROW_ICON_TYPES = {
164 hoz: { prev: 'arrow-left', next: 'arrow-right' },
165 ver: { prev: 'arrow-up', next: 'arrow-down' }
166}, _temp);
167Arrow.displayName = 'Arrow';
168exports.default = Arrow;
169module.exports = exports['default'];
\No newline at end of file