taikitech-react-colors-picker
Version:
color-picker ui component for react
271 lines (234 loc) • 8.88 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
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 _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _rcTrigger = require('rc-trigger');
var _rcTrigger2 = _interopRequireDefault(_rcTrigger);
var _Panel = require('./Panel');
var _Panel2 = _interopRequireDefault(_Panel);
var _placements = require('./placements');
var _placements2 = _interopRequireDefault(_placements);
function refFn(field, component) {
this[field] = component;
}
function prevent(e) {
e.preventDefault();
}
var ColorPicker = (function (_React$Component) {
_inherits(ColorPicker, _React$Component);
function ColorPicker(props) {
var _this = this;
_classCallCheck(this, ColorPicker);
_get(Object.getPrototypeOf(ColorPicker.prototype), 'constructor', this).call(this, props);
this.state = {
color: props.color || props.defaultColor,
alpha: props.alpha || props.defaultAlpha,
open: false
};
var events = ['onTriggerClick', 'onChange', 'onBlur', 'getPickerElement', 'getRootDOMNode', 'getTriggerDOMNode', 'onVisibleChange', 'setOpen', 'open', 'close', 'focus'];
events.forEach(function (e) {
_this[e] = _this[e].bind(_this);
});
this.savePickerPanelRef = refFn.bind(this, 'pickerPanelInstance');
this.saveTriggerRef = refFn.bind(this, 'triggerInstance');
}
_createClass(ColorPicker, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (nextProps.color) {
this.setState({
color: nextProps.color
});
}
if (nextProps.alpha) {
this.setState({
alpha: nextProps.alpha
});
}
}
}, {
key: 'onTriggerClick',
value: function onTriggerClick() {
this.setState({
open: !this.state.open
});
}
}, {
key: 'onChange',
value: function onChange(colors) {
this.setState({
color: colors.color,
alpha: colors.alpha
});
this.props.onChange(colors);
}
}, {
key: 'onBlur',
value: function onBlur() {
this.setState({
open: false
});
}
}, {
key: 'onVisibleChange',
value: function onVisibleChange(open) {
var _this2 = this;
this.setOpen(open, function () {
if (open) {
_reactDom2['default'].findDOMNode(_this2.pickerPanelInstance).focus();
}
});
}
}, {
key: 'setOpen',
value: function setOpen(open, callback) {
var _props = this.props;
var onOpen = _props.onOpen;
var onClose = _props.onClose;
if (this.state.open !== open) {
this.setState({
open: open
}, callback);
var _event = {
open: open
};
if (open) {
onOpen(_event);
} else {
onClose(_event);
}
}
}
}, {
key: 'getRootDOMNode',
value: function getRootDOMNode() {
return _reactDom2['default'].findDOMNode(this);
}
}, {
key: 'getTriggerDOMNode',
value: function getTriggerDOMNode() {
return _reactDom2['default'].findDOMNode(this.triggerInstance);
}
}, {
key: 'getPickerElement',
value: function getPickerElement() {
// const state = this.state;
return _react2['default'].createElement(_Panel2['default'], {
ref: this.savePickerPanelRef,
defaultColor: this.state.color,
alpha: this.state.alpha,
prefixCls: this.props.prefixCls + '-panel',
onChange: this.onChange,
onBlur: this.onBlur,
mode: this.props.mode
});
}
}, {
key: 'open',
value: function open(callback) {
this.setOpen(true, callback);
}
}, {
key: 'close',
value: function close(callback) {
this.setOpen(false, callback);
}
}, {
key: 'focus',
value: function focus() {
if (!this.state.open) {
_reactDom2['default'].findDOMNode(this).focus();
}
}
}, {
key: 'render',
value: function render() {
var props = this.props;
var state = this.state;
var classes = [props.prefixCls];
if (state.open) {
classes.push(props.prefixCls + '-open');
}
var trigger = props.trigger;
if (trigger) {
trigger = _react2['default'].cloneElement(trigger, {
ref: this.saveTriggerRef,
unselectable: true,
style: {
opacity: this.state.alpha / 100,
backgroundColor: this.state.color
},
onClick: this.onTriggerClick,
onMouseDown: prevent
});
}
var prefixCls = props.prefixCls;
var placement = props.placement;
var style = props.style;
var getCalendarContainer = props.getCalendarContainer;
var align = props.align;
var animation = props.animation;
var disabled = props.disabled;
var transitionName = props.transitionName;
return _react2['default'].createElement(
'span',
{ className: classes.join(' ') },
_react2['default'].createElement(
_rcTrigger2['default'],
{ popup: this.getPickerElement(),
popupAlign: align,
builtinPlacements: _placements2['default'],
popupPlacement: placement,
action: disabled ? [] : ['click'],
destroyPopupOnHide: true,
getPopupContainer: getCalendarContainer,
popupStyle: style,
popupAnimation: animation,
popupTransitionName: transitionName,
popupVisible: state.open,
onPopupVisibleChange: this.onVisibleChange,
prefixCls: prefixCls + '-picker' },
trigger
)
);
}
}]);
return ColorPicker;
})(_react2['default'].Component);
exports['default'] = ColorPicker;
ColorPicker.propTypes = {
defaultColor: _react.PropTypes.string,
defaultAlpha: _react.PropTypes.number,
// can custom
color: _react.PropTypes.string,
alpha: _react.PropTypes.number,
onChange: _react.PropTypes.func,
onOpen: _react.PropTypes.func,
onClose: _react.PropTypes.func,
prefixCls: _react.PropTypes.string.isRequired,
trigger: _react.PropTypes.node.isRequired,
mode: _react.PropTypes.oneOf(['RGB', 'HSL', 'HSB']),
placement: _react.PropTypes.oneOf(['topLeft', 'topRight', 'bottomLeft', 'bottomRight']),
style: _react.PropTypes.object
};
ColorPicker.defaultProps = {
defaultColor: '#F00',
defaultAlpha: 100,
onChange: function onChange() {},
onOpen: function onOpen() {},
onClose: function onClose() {},
prefixCls: 'react-colorpicker',
trigger: _react2['default'].createElement('span', { className: 'react-colorpicker-trigger' }),
placement: 'topLeft',
style: {}
};
module.exports = exports['default'];