@javierbyte/react-colorizer
Version:
A color picker component for React and React Native.
203 lines (158 loc) • 6.62 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of");
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _ColorPickerCircleWrapper = require("../components-styled/ColorPickerCircleWrapper");
var _ColorPickerCircleWrapper2 = _interopRequireDefault(_ColorPickerCircleWrapper);
var _ColorPickerTargetWrapper = require("../components-styled/ColorPickerTargetWrapper");
var _ColorPickerTargetWrapper2 = _interopRequireDefault(_ColorPickerTargetWrapper);
var _positionValidation = require("../../../utils/position-validation");
var _positionValidation2 = _interopRequireDefault(_positionValidation);
var _position = require("../../../utils/position");
var _position2 = _interopRequireDefault(_position);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* global window */
var propTypes = {
isDisabled: _propTypes2.default.bool.isRequired,
isDragging: _propTypes2.default.bool.isRequired,
position: _propTypes2.default.number.isRequired,
positionLeft: _propTypes2.default.number.isRequired,
positionRight: _propTypes2.default.number.isRequired,
size: _propTypes2.default.number.isRequired,
width: _propTypes2.default.number.isRequired,
onDraggingChanged: _propTypes2.default.func.isRequired,
onPositionChanged: _propTypes2.default.func.isRequired
};
var defaultProps = {};
var Handler = function (_React$PureComponent) {
(0, _inherits3.default)(Handler, _React$PureComponent);
function Handler(props) {
(0, _classCallCheck3.default)(this, Handler);
var _this = (0, _possibleConstructorReturn3.default)(this, (Handler.__proto__ || (0, _getPrototypeOf2.default)(Handler)).call(this, props));
_this.onGestureResponderStart = _this.onGestureResponderStart.bind(_this);
_this.onMouseResponderMove = _this.onMouseResponderMove.bind(_this);
_this.onTouchResponderMove = _this.onTouchResponderMove.bind(_this);
_this.onGestureResponderEnd = _this.onGestureResponderEnd.bind(_this);
return _this;
}
(0, _createClass3.default)(Handler, [{
key: "componentDidMount",
value: function componentDidMount() {
window.addEventListener("mousemove", this.onMouseResponderMove, true);
window.addEventListener("touchmove", this.onTouchResponderMove, true);
window.addEventListener("mouseup", this.onGestureResponderEnd);
window.addEventListener("touchend", this.onGestureResponderEnd);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
window.removeEventListener("mousemove", this.onMouseResponderMove, true);
window.removeEventListener("touchmove", this.onTouchResponderMove, true);
window.removeEventListener("mouseup", this.onGestureResponderEnd);
window.removeEventListener("touchend", this.onGestureResponderEnd);
}
}, {
key: "onGestureResponderStart",
value: function onGestureResponderStart(e) {
// prevent selecting text
e.preventDefault();
// parents don't need to know about this event
e.stopPropagation();
var isDisabled = this.props.isDisabled;
if (isDisabled) {
return;
}
var onDraggingChanged = this.props.onDraggingChanged;
onDraggingChanged(true);
}
}, {
key: "onMouseResponderMove",
value: function onMouseResponderMove(e) {
var isDisabled = this.props.isDisabled;
if (isDisabled) {
return;
}
var isDragging = this.props.isDragging;
if (!isDragging) {
return;
}
var _props = this.props,
positionLeft = _props.positionLeft,
positionRight = _props.positionRight,
onPositionChanged = _props.onPositionChanged;
// prevent selecting text
e.preventDefault();
// prevent any other movement
e.stopImmediatePropagation();
(0, _positionValidation2.default)((0, _position2.default)(positionLeft, e.clientX, positionRight - positionLeft), onPositionChanged);
}
}, {
key: "onTouchResponderMove",
value: function onTouchResponderMove(e) {
var isDisabled = this.props.isDisabled;
if (isDisabled) {
return;
}
var isDragging = this.props.isDragging;
if (!isDragging) {
return;
}
var _props2 = this.props,
positionLeft = _props2.positionLeft,
positionRight = _props2.positionRight,
onPositionChanged = _props2.onPositionChanged;
// prevent selecting text
e.preventDefault();
// prevent any other movement
e.stopImmediatePropagation();
(0, _positionValidation2.default)((0, _position2.default)(positionLeft, e.changedTouches[0].clientX, positionRight - positionLeft), onPositionChanged);
}
}, {
key: "onGestureResponderEnd",
value: function onGestureResponderEnd() {
var isDisabled = this.props.isDisabled;
if (isDisabled) {
return;
}
var onDraggingChanged = this.props.onDraggingChanged;
onDraggingChanged(false);
}
}, {
key: "render",
value: function render() {
var width = this.props.width;
var _props3 = this.props,
position = _props3.position,
size = _props3.size;
return _react2.default.createElement(
_ColorPickerCircleWrapper2.default,
{
position: position,
size: size,
width: width,
onMouseDown: this.onGestureResponderStart,
onTouchStart: this.onGestureResponderStart
},
_react2.default.createElement(_ColorPickerTargetWrapper2.default, { size: size })
);
}
}]);
return Handler;
}(_react2.default.PureComponent);
exports.default = Handler;
Handler.propTypes = propTypes;
Handler.defaultProps = defaultProps;