emoji-mart-picker
Version:
emoji picker based on emoji-mart
236 lines (200 loc) • 7.41 kB
JavaScript
;
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 _react = require('react');
var React = _interopRequireWildcard(_react);
var _emojiMart = require('emoji-mart');
var _rcTrigger = require('rc-trigger');
var _rcTrigger2 = _interopRequireDefault(_rcTrigger);
var _placements = require('./placements');
var _placements2 = _interopRequireDefault(_placements);
require('emoji-mart/css/emoji-mart.css');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
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; }
function prevent(e) {
e.preventDefault();
}
function refFn(field, component) {
// trigger instance change to children
this[field] = component;
}
var EmojiMartPicker = function (_React$Component) {
_inherits(EmojiMartPicker, _React$Component);
function EmojiMartPicker(props) {
_classCallCheck(this, EmojiMartPicker);
var _this = _possibleConstructorReturn(this, (EmojiMartPicker.__proto__ || Object.getPrototypeOf(EmojiMartPicker)).call(this, props));
_this.state = {
open: false
};
var events = ['onTriggerClick', 'onChange', 'getPickerElement', 'getRootDOMNode', 'getTriggerDOMNode', 'onVisibleChange', 'setOpen', 'open', 'close'];
events.forEach(function (e) {
_this[e] = _this[e].bind(_this);
});
_this.savePickerPanelRef = refFn.bind(_this, 'pickerPanelInstance');
_this.saveTriggerRef = refFn.bind(_this, 'triggerInstance');
return _this;
}
_createClass(EmojiMartPicker, [{
key: 'onTriggerClick',
value: function onTriggerClick(e) {
e.preventDefault();
this.setState({
open: !this.state.open
});
}
}, {
key: 'onChange',
value: function onChange(emoji) {
this.props.onChange(emoji);
this.setState({
open: false
});
}
}, {
key: 'onVisibleChange',
value: function onVisibleChange(open) {
this.setOpen(open);
}
}, {
key: 'setOpen',
value: function setOpen(open, callback) {
var _props = this.props,
onOpen = _props.onOpen,
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 this;
}
}, {
key: 'getTriggerDOMNode',
value: function getTriggerDOMNode() {
// $FlowFixMe
return this.triggerInstance;
}
}, {
key: 'getPickerElement',
value: function getPickerElement() {
var _this2 = this;
var _props2 = this.props,
color = _props2.color,
emoji = _props2.emoji,
emojiSize = _props2.emojiSize,
skin = _props2.skin,
style = _props2.style,
title = _props2.title,
perLine = _props2.perLine,
i18n = _props2.i18n,
set = _props2.set,
sheetSize = _props2.sheetSize;
return React.createElement(_emojiMart.Picker, {
ref: function ref(node) {
return _this2.savePickerPanelRef = node;
},
color: color,
emoji: emoji,
emojiSize: emojiSize,
perLine: perLine,
i18n: i18n,
set: set,
sheetSize: sheetSize,
skin: skin,
style: style,
title: title,
onClick: this.onChange
});
}
}, {
key: 'open',
value: function open(callback) {
this.setOpen(true, callback);
}
}, {
key: 'close',
value: function close(callback) {
this.setOpen(false, callback);
}
}, {
key: 'render',
value: function render() {
var _this3 = this;
var props = this.props;
var state = this.state;
var children = props.children;
if (children) {
// $FlowFixMe
children = React.cloneElement(children, {
// $FlowFixMe
ref: function ref(node) {
return _this3.saveTriggerRef = node;
},
onClick: this.onTriggerClick,
onMouseDown: prevent
});
}
var _props3 = this.props,
prefixCls = _props3.prefixCls,
placement = _props3.placement,
style = _props3.style,
getPopupContainer = _props3.getPopupContainer,
popupAlign = _props3.popupAlign,
popupAnimation = _props3.popupAnimation,
disabled = _props3.disabled,
transitionName = _props3.transitionName;
return React.createElement(
_rcTrigger2.default,
{
popup: this.getPickerElement(),
popupAlign: popupAlign,
builtinPlacements: _placements2.default,
popupPlacement: placement,
action: disabled ? [] : ['click'],
destroyPopupOnHide: true,
getPopupContainer: getPopupContainer,
popupStyle: style,
popupAnimation: popupAnimation,
popupTransitionName: transitionName,
popupVisible: state.open,
onPopupVisibleChange: this.onVisibleChange,
prefixCls: prefixCls },
children
);
}
}]);
return EmojiMartPicker;
}(React.Component);
EmojiMartPicker.defaultProps = {
emojiSize: 24,
perLine: 8,
skin: 1,
set: 'apple',
placement: 'topLeft',
prefixCls: 'rc-trigger-popup',
onOpen: function onOpen(arg) {
return arg;
},
onClose: function onClose(arg) {
return arg;
},
children: React.createElement('span', { className: 'emoji-mart-picker-trigger' })
};
exports.default = EmojiMartPicker;