UNPKG

4.76 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
12
13var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
14
15var _createClass2 = require('babel-runtime/helpers/createClass');
16
17var _createClass3 = _interopRequireDefault(_createClass2);
18
19var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
20
21var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
22
23var _inherits2 = require('babel-runtime/helpers/inherits');
24
25var _inherits3 = _interopRequireDefault(_inherits2);
26
27var _react = require('react');
28
29var _react2 = _interopRequireDefault(_react);
30
31var _classnames = require('classnames');
32
33var _classnames2 = _interopRequireDefault(_classnames);
34
35function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
36
37var TouchFeedback = function (_React$Component) {
38 (0, _inherits3['default'])(TouchFeedback, _React$Component);
39
40 function TouchFeedback() {
41 (0, _classCallCheck3['default'])(this, TouchFeedback);
42
43 var _this = (0, _possibleConstructorReturn3['default'])(this, (TouchFeedback.__proto__ || Object.getPrototypeOf(TouchFeedback)).apply(this, arguments));
44
45 _this.state = {
46 active: false
47 };
48 _this.onTouchStart = function (e) {
49 _this.triggerEvent('TouchStart', true, e);
50 };
51 _this.onTouchMove = function (e) {
52 _this.triggerEvent('TouchMove', false, e);
53 };
54 _this.onTouchEnd = function (e) {
55 _this.triggerEvent('TouchEnd', false, e);
56 };
57 _this.onTouchCancel = function (e) {
58 _this.triggerEvent('TouchCancel', false, e);
59 };
60 _this.onMouseDown = function (e) {
61 // pc simulate mobile
62 _this.triggerEvent('MouseDown', true, e);
63 };
64 _this.onMouseUp = function (e) {
65 _this.triggerEvent('MouseUp', false, e);
66 };
67 _this.onMouseLeave = function (e) {
68 _this.triggerEvent('MouseLeave', false, e);
69 };
70 return _this;
71 }
72
73 (0, _createClass3['default'])(TouchFeedback, [{
74 key: 'componentDidUpdate',
75 value: function componentDidUpdate() {
76 if (this.props.disabled && this.state.active) {
77 this.setState({
78 active: false
79 });
80 }
81 }
82 }, {
83 key: 'triggerEvent',
84 value: function triggerEvent(type, isActive, ev) {
85 var eventType = 'on' + type;
86 var children = this.props.children;
87
88 if (children.props[eventType]) {
89 children.props[eventType](ev);
90 }
91 if (isActive !== this.state.active) {
92 this.setState({
93 active: isActive
94 });
95 }
96 }
97 }, {
98 key: 'render',
99 value: function render() {
100 var _props = this.props,
101 children = _props.children,
102 disabled = _props.disabled,
103 activeClassName = _props.activeClassName,
104 activeStyle = _props.activeStyle;
105
106 var events = disabled ? undefined : {
107 onTouchStart: this.onTouchStart,
108 onTouchMove: this.onTouchMove,
109 onTouchEnd: this.onTouchEnd,
110 onTouchCancel: this.onTouchCancel,
111 onMouseDown: this.onMouseDown,
112 onMouseUp: this.onMouseUp,
113 onMouseLeave: this.onMouseLeave
114 };
115 var child = _react2['default'].Children.only(children);
116 if (!disabled && this.state.active) {
117 var _child$props = child.props,
118 style = _child$props.style,
119 className = _child$props.className;
120
121 if (activeStyle !== false) {
122 if (activeStyle) {
123 style = (0, _extends3['default'])({}, style, activeStyle);
124 }
125 className = (0, _classnames2['default'])(className, activeClassName);
126 }
127 return _react2['default'].cloneElement(child, (0, _extends3['default'])({ className: className,
128 style: style }, events));
129 }
130 return _react2['default'].cloneElement(child, events);
131 }
132 }]);
133 return TouchFeedback;
134}(_react2['default'].Component);
135
136exports['default'] = TouchFeedback;
137
138TouchFeedback.defaultProps = {
139 disabled: false
140};
141module.exports = exports['default'];
\No newline at end of file