UNPKG

choerodon-ui

Version:

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

122 lines (101 loc) 4.14 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"] = createMention; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _react = _interopRequireWildcard(require("react")); var _noop = _interopRequireDefault(require("lodash/noop")); var _Suggestions2 = _interopRequireDefault(require("../component/Suggestions.react")); var _SuggestionPortal = _interopRequireDefault(require("../component/SuggestionPortal.react")); var _MentionContent = _interopRequireDefault(require("../component/MentionContent.react")); var _mentionStore = _interopRequireDefault(require("../model/mentionStore")); var _exportContent = _interopRequireDefault(require("./exportContent")); var _getRegExp = _interopRequireDefault(require("../utils/getRegExp")); function findWithRegex(regex, contentBlock, callback) { // Get the text from the contentBlock var text = contentBlock.getText(); var matchArr; var start; // eslint-disable-line // Go through all matches in the text and return the indizes to the callback while ((matchArr = regex.exec(text)) !== null) { // eslint-disable-line start = matchArr.index; callback(start, start + matchArr[0].length); } } function mentionContentStrategy(contentBlock, callback, contentState) { contentBlock.findEntityRanges(function (character) { var entityKey = character.getEntity(); return entityKey && contentState.getEntity(entityKey).getType() === 'mention'; }, callback); } var MentionContentComponent = function MentionContentComponent(props) { var entityKey = props.entityKey, tag = props.tag, callbacks = props.callbacks; var contentState = callbacks.getEditorState().getCurrentContent(); var data = contentState.getEntity(entityKey).getData(); return (0, _react.createElement)(tag, (0, _objectSpread2["default"])({}, props, { data: data })); }; function createMention() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var callbacks = { onChange: _noop["default"], onUpArrow: _noop["default"], onDownArrow: _noop["default"], getEditorState: _noop["default"], setEditorState: _noop["default"], handleReturn: _noop["default"], onBlur: _noop["default"] }; var componentProps = { callbacks: callbacks, mentionStore: _mentionStore["default"] }; var suggestionRegex = (0, _getRegExp["default"])(config.prefix); var tag = config.tag || _MentionContent["default"]; var decorators = [{ strategy: function strategy(contentBlock, callback) { findWithRegex(suggestionRegex, contentBlock, callback); }, component: function component(props) { return _react["default"].createElement(_SuggestionPortal["default"], (0, _extends2["default"])({}, props, componentProps, { style: config.mentionStyle, suggestionRegex: (0, _getRegExp["default"])(config.prefix) })); } }]; if (config.mode !== 'immutable') { decorators.unshift({ strategy: mentionContentStrategy, component: function component(props) { return _react["default"].createElement(MentionContentComponent, (0, _extends2["default"])({ tag: tag }, props, { callbacks: callbacks })); } }); } return { name: 'mention', Suggestions: function Suggestions(props) { return _react["default"].createElement(_Suggestions2["default"], (0, _extends2["default"])({}, props, componentProps, { store: _mentionStore["default"] })); }, decorators: decorators, onChange: function onChange(editorState) { return callbacks.onChange ? callbacks.onChange(editorState) : editorState; }, callbacks: callbacks, "export": _exportContent["default"] }; } //# sourceMappingURL=createMention.js.map