UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

299 lines (257 loc) 10.7 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames2 = _interopRequireDefault(require("classnames")); var _rcEditorCore = require("rc-editor-core"); var _draftJs = require("draft-js"); var _createMention = _interopRequireDefault(require("../utils/createMention")); var _exportContent = _interopRequireDefault(require("../utils/exportContent")); function _createSuper(Derived) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } var Mention = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(Mention, _Component); var _super = _createSuper(Mention); function Mention(props) { var _this; (0, _classCallCheck2["default"])(this, Mention); _this = _super.call(this, props); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onEditorChange", function (editorState) { var selection = editorState.getSelection(); _this._decorator = editorState.getDecorator(); var content = editorState.getCurrentContent(); if (_this.props.onChange) { _this.setState({ selection: selection }, function () { _this.props.onChange(content, (0, _exportContent["default"])(content)); }); } else { _this.setState({ editorState: editorState, selection: selection }); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onFocus", function (e) { if (_this.props.onFocus) { _this.props.onFocus(e); } _this.setState({ focused: true }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onBlur", function (e) { if (_this.props.onBlur) { _this.props.onBlur(e); } _this.setState({ focused: false }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "reset", function () { /*eslint-disable*/ _this._editor.Reset(); /*eslint-enable*/ }); _this.mention = (0, _createMention["default"])({ prefix: _this.getPrefix(props), tag: props.tag, mode: props.mode, mentionStyle: props.mentionStyle }); _this.Suggestions = _this.mention.Suggestions; _this.plugins = [_this.mention]; _this.state = { suggestions: props.suggestions, value: props.value && _draftJs.EditorState.createWithContent(props.value, new _draftJs.CompositeDecorator(_this.mention.decorators)), selection: _draftJs.SelectionState.createEmpty(), focused: false }; if (typeof props.defaultValue === 'string') { // eslint-disable-next-line console.warn('The property `defaultValue` now allow `EditorState` only, see http://react-component.github.io/editor-mention/examples/defaultValue.html '); } if (props.value !== undefined) { _this.controlledMode = true; } return _this; } (0, _createClass2["default"])(Mention, [{ key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { var suggestions = nextProps.suggestions; var selection = this.state.selection; var value = nextProps.value; if (value && selection) { value = _draftJs.EditorState.acceptSelection(_draftJs.EditorState.createWithContent(value, this._decorator), selection); } this.setState({ suggestions: suggestions, value: value }); } }, { key: "getPrefix", value: function getPrefix() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props; return Array.isArray(props.prefix) ? props.prefix : [props.prefix]; } }, { key: "getUnderLine", value: function getUnderLine() { var prefixCls = this.props.prefixCls; return _react["default"].createElement("div", { className: "".concat(prefixCls, "-editor-underline") }, _react["default"].createElement("span", { className: "".concat(prefixCls, "-editor-ripple") })); } }, { key: "render", value: function render() { var _classnames, _this2 = this; var _this$props = this.props, prefixCls = _this$props.prefixCls, style = _this$props.style, tag = _this$props.tag, multiLines = _this$props.multiLines, suggestionStyle = _this$props.suggestionStyle, placeholder = _this$props.placeholder, defaultValue = _this$props.defaultValue, className = _this$props.className, notFoundContent = _this$props.notFoundContent, getSuggestionContainer = _this$props.getSuggestionContainer, readOnly = _this$props.readOnly, disabled = _this$props.disabled, placement = _this$props.placement; var _this$state = this.state, suggestions = _this$state.suggestions, focused = _this$state.focused; var Suggestions = this.Suggestions; var editorClass = (0, _classnames2["default"])(className, (_classnames = {}, (0, _defineProperty2["default"])(_classnames, "".concat(prefixCls, "-wrapper"), true), (0, _defineProperty2["default"])(_classnames, "".concat(prefixCls, "-editor-focus"), focused), (0, _defineProperty2["default"])(_classnames, "readonly", readOnly), (0, _defineProperty2["default"])(_classnames, "disabled", disabled), (0, _defineProperty2["default"])(_classnames, "multilines", multiLines), _classnames)); var editorProps = this.controlledMode ? { value: this.state.value } : {}; var defaultValueState = defaultValue && _draftJs.EditorState.createWithContent(typeof defaultValue === 'string' ? _draftJs.ContentState.createFromText(defaultValue) : defaultValue, this._decorator); return _react["default"].createElement("div", { className: editorClass, style: style, ref: function ref(wrapper) { return _this2._wrapper = wrapper; } }, _react["default"].createElement(_rcEditorCore.EditorCore, (0, _extends2["default"])({ ref: function ref(editor) { return _this2._editor = editor; }, prefixCls: prefixCls, style: style, multiLines: multiLines, plugins: this.plugins, defaultValue: defaultValueState, placeholder: placeholder, onFocus: this.onFocus, onBlur: this.onBlur, onChange: this.onEditorChange }, editorProps, { readOnly: readOnly || disabled }), _react["default"].createElement(Suggestions, { mode: tag ? 'immutable' : 'mutable', prefix: this.getPrefix(), prefixCls: prefixCls, style: suggestionStyle, placement: placement, notFoundContent: notFoundContent, suggestions: suggestions, getSuggestionContainer: getSuggestionContainer ? function () { return getSuggestionContainer(_this2._wrapper); } : null, onSearchChange: this.props.onSearchChange, onSelect: this.props.onSelect, noRedup: this.props.noRedup })), this.getUnderLine()); } }]); return Mention; }(_react.Component); (0, _defineProperty2["default"])(Mention, "propTypes", { value: _propTypes["default"].object, suggestions: _propTypes["default"].array, prefix: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].arrayOf(_propTypes["default"].string)]), prefixCls: _propTypes["default"].string, tag: _propTypes["default"].element, style: _propTypes["default"].object, className: _propTypes["default"].string, onSearchChange: _propTypes["default"].func, onChange: _propTypes["default"].func, mode: _propTypes["default"].string, multiLines: _propTypes["default"].bool, suggestionStyle: _propTypes["default"].object, placeholder: _propTypes["default"].string, defaultValue: _propTypes["default"].object, notFoundContent: _propTypes["default"].any, position: _propTypes["default"].string, onFocus: _propTypes["default"].func, onBlur: _propTypes["default"].func, onSelect: _propTypes["default"].func, getSuggestionContainer: _propTypes["default"].func, noRedup: _propTypes["default"].bool, mentionStyle: _propTypes["default"].object, placement: _propTypes["default"].string }); (0, _defineProperty2["default"])(Mention, "controlledMode", false); Mention.defaultProps = { prefixCls: 'rc-editor-mention', prefix: '@', mode: 'immutable', suggestions: [], multiLines: false, className: '', suggestionStyle: {}, notFoundContent: '无法找到', position: 'absolute', placement: 'bottom', // top, bottom mentionStyle: {} }; var _default = Mention; exports["default"] = _default; //# sourceMappingURL=Mention.react.js.map