tuya-panel-kit
Version:
a functional component library for developing tuya device panels!
299 lines (246 loc) • 11.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _jsxFileName = 'src/components/progress/gesture.js';
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[typeof Symbol === 'function' ? Symbol.iterator : '@@iterator'](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if ((typeof Symbol === 'function' ? Symbol.iterator : '@@iterator') in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactNative = require('react-native');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var eTargetId = 0;
var isRtl = _reactNative.I18nManager.isRTL;
var Gesture = function (_PureComponent) {
_inherits(Gesture, _PureComponent);
function Gesture(props) {
_classCallCheck(this, Gesture);
var _this = _possibleConstructorReturn(this, (Gesture.__proto__ || Object.getPrototypeOf(Gesture)).call(this, props));
_this.eTargetId = eTargetId++;
_this.notHandleReceivePropsWhenTouching = false;
var fixedEvent = {};
var fixEventHandle = function fixEventHandle(e, gesture) {
return [{
nativeEvent: _extends({}, e.nativeEvent, fixedEvent),
originEvent: e
}, _this.fixRtl(fixedEvent, gesture)];
};
var responder = _reactNative.PanResponder.create({
onStartShouldSetPanResponder: function onStartShouldSetPanResponder(e, gesture) {
if (_this.props.disabled) return false;
return _this.onStartShouldSetResponder.call(_this, e, gesture);
},
onMoveShouldSetPanResponder: function onMoveShouldSetPanResponder(e, gesture) {
if (_this.props.disabled) return false;
return _this.onMoveShouldSetResponder.call(_this, e, gesture);
},
onPanResponderGrant: function onPanResponderGrant(e, gesture) {
var _this$onGrant;
var nativeEvent = e.nativeEvent;
var locationX = nativeEvent.locationX,
locationY = nativeEvent.locationY,
pageX = nativeEvent.pageX,
pageY = nativeEvent.pageY;
fixedEvent = { locationX: locationX, locationY: locationY, pageX: pageX, pageY: pageY };
var event = fixEventHandle(e, gesture);
(_this$onGrant = _this.onGrant).call.apply(_this$onGrant, [_this].concat(_toConsumableArray(event)));
},
onPanResponderMove: function onPanResponderMove(e, gesture) {
var event = fixEventHandle(e, gesture);
if (_this._initialMoveDirection === undefined) {
var _event = _slicedToArray(event, 2),
_e = _event[0],
_gesture = _event[1];
if (Math.abs(gesture.dx) < 5 && Math.abs(gesture.dy) < 5) return;
var horizontal = Math.abs(gesture.dx) >= Math.abs(gesture.dy);
var toRight = horizontal && _e.nativeEvent.locationX < _gesture.locationX;
var toLeft = horizontal && !toRight;
var toBottom = !horizontal && _e.nativeEvent.locationY < _gesture.locationY;
var toTop = !horizontal && !toBottom;
_this._initialMoveDirection = {
horizontal: horizontal,
toTop: toTop,
toRight: toRight,
toBottom: toBottom,
toLeft: toLeft
};
} else {
var _this$onMove;
_this.notHandleReceivePropsWhenTouching = true;
(_this$onMove = _this.onMove).call.apply(_this$onMove, [_this].concat(_toConsumableArray(event)));
}
},
onPanResponderRelease: function onPanResponderRelease(e, gesture) {
var _this$onRelease;
_this.notHandleReceivePropsWhenTouching = false;
var event = fixEventHandle(e, gesture);
(_this$onRelease = _this.onRelease).call.apply(_this$onRelease, [_this].concat(_toConsumableArray(event)));
_this._initialMoveDirection = undefined;
},
onPanResponderTerminationRequest: function onPanResponderTerminationRequest() {
return false;
},
onPanResponderTerminate: function onPanResponderTerminate(e, gesture) {
var _this$onRelease2;
_this.notHandleReceivePropsWhenTouching = false;
var event = fixEventHandle(e, gesture);
(_this$onRelease2 = _this.onRelease).call.apply(_this$onRelease2, [_this].concat(_toConsumableArray(event)));
_this._initialMoveDirection = undefined;
},
onStartShouldSetResponderCapture: function onStartShouldSetResponderCapture() {
return false;
},
onMoveShouldSetPanResponderCapture: function onMoveShouldSetPanResponderCapture() {
return false;
}
});
_this.getResponder = function () {
return _extends({}, responder.panHandlers, {
onLayout: _this.onLayout,
pointerEvents: _this.props.pointerEvents
});
};
_this.onLayout = _this.onLayout.bind(_this);
_this.getLayout = _this.getLayout.bind(_this);
_this.getETargetElement = _this.getETargetElement.bind(_this);
_this.getETargetId = _this.getETargetId.bind(_this);
_this.getInitialMoveDirection = _this.getInitialMoveDirection.bind(_this);
_this.getTouchDirection = _this.getTouchDirection.bind(_this);
_this.checkETargetIsExpected = _this.checkETargetIsExpected.bind(_this);
return _this;
}
_createClass(Gesture, [{
key: 'onLayout',
value: function onLayout(_ref) {
var nativeEvent = _ref.nativeEvent;
if (this._layout !== undefined && this._layout === nativeEvent.layout) return;
this._layout = _extends({}, nativeEvent.layout);
this.forceUpdate();
}
}, {
key: 'onStartShouldSetResponder',
value: function onStartShouldSetResponder() {
return true;
}
}, {
key: 'onMoveShouldSetResponder',
value: function onMoveShouldSetResponder() {
return true;
}
}, {
key: 'onMove',
value: function onMove() {}
}, {
key: 'onGrant',
value: function onGrant() {}
}, {
key: 'onRelease',
value: function onRelease() {}
}, {
key: 'getETargetInstance',
value: function getETargetInstance(e) {
return _reactNative.ReactNativeComponentTree.getInstanceFromNode(e.target);
}
}, {
key: 'getETargetElement',
value: function getETargetElement(e) {
var inst = this.getETargetInstance(e);
return inst._currentElement;
}
}, {
key: 'getETargetId',
value: function getETargetId() {
return this.eTargetId;
}
}, {
key: 'getInitialMoveDirection',
value: function getInitialMoveDirection() {
return this._initialMoveDirection;
}
}, {
key: 'getTouchDirection',
value: function getTouchDirection(x, y) {
var rect = this.getLayout();
if (!rect) return;
var _y = -y;
var x1 = rect.x;
var y1 = -rect.y;
var x4 = rect.x + rect.width;
var y4 = -(rect.y + rect.height);
var x0 = rect.x + rect.width / 2;
var y0 = -(rect.y + rect.height / 2);
if (Math.abs(x1 - x4) < 0.0001) return 4;
var k = (y1 - y4) / (x1 - x4);
var range = [k, -k];
var kk = (_y - y0) / (x - x0);
if (isFinite(kk) && range[0] < kk && kk < range[1]) {
return x > x0 ? 1 : 3;
}
return _y > y0 ? 0 : 2;
}
}, {
key: 'getLayout',
value: function getLayout() {
return this._layout;
}
}, {
key: 'fixRtl',
value: function fixRtl(fixedEvent, gesture) {
var _ref2 = this._layout || {},
width = _ref2.width;
var dx = isRtl ? -gesture.dx : gesture.dx;
var locationX = isRtl && width ? width - fixedEvent.locationX : fixedEvent.locationX;
return _extends({}, gesture, {
locationX: locationX + dx,
locationY: fixedEvent.locationY + gesture.dy,
pageX: fixedEvent.pageX + gesture.dx,
pageY: fixedEvent.pageY + gesture.dy,
dx: dx
});
}
}, {
key: 'checkETargetIsExpected',
value: function checkETargetIsExpected(e) {
var element = this.getETargetElement(e);
return this.eTargetId === element.props.eTargetId;
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
children = _props.children,
props = _objectWithoutProperties(_props, ['children']);
var responder = this.getResponder();
delete props.pointerEvents;
return _react2.default.createElement(
_reactNative.View,
_extends({}, props, responder, {
__source: {
fileName: _jsxFileName,
lineNumber: 224
}
}),
children
);
}
}]);
return Gesture;
}(_react.PureComponent);
Gesture.propTypes = {
children: _propTypes2.default.any,
pointerEvents: _propTypes2.default.oneOf(['box-none', 'none', 'box-only', 'auto']),
disabled: _propTypes2.default.bool
};
Gesture.defaultProps = {
children: null,
pointerEvents: 'box-only',
disabled: false
};
exports.default = Gesture;