130 lines
4.0 KiB
JavaScript
130 lines
4.0 KiB
JavaScript
'use strict';
|
|
|
|
exports.__esModule = true;
|
|
|
|
var _extends2 = require('babel-runtime/helpers/extends');
|
|
|
|
var _extends3 = _interopRequireDefault(_extends2);
|
|
|
|
exports['default'] = createMention;
|
|
|
|
var _react = require('react');
|
|
|
|
var _react2 = _interopRequireDefault(_react);
|
|
|
|
var _Suggestions2 = require('../component/Suggestions.react');
|
|
|
|
var _Suggestions3 = _interopRequireDefault(_Suggestions2);
|
|
|
|
var _SuggestionPortal = require('../component/SuggestionPortal.react');
|
|
|
|
var _SuggestionPortal2 = _interopRequireDefault(_SuggestionPortal);
|
|
|
|
var _MentionContent = require('../component/MentionContent.react');
|
|
|
|
var _MentionContent2 = _interopRequireDefault(_MentionContent);
|
|
|
|
var _mentionStore = require('../model/mentionStore');
|
|
|
|
var _mentionStore2 = _interopRequireDefault(_mentionStore);
|
|
|
|
var _exportContent = require('./exportContent');
|
|
|
|
var _exportContent2 = _interopRequireDefault(_exportContent);
|
|
|
|
var _getRegExp = require('../utils/getRegExp');
|
|
|
|
var _getRegExp2 = _interopRequireDefault(_getRegExp);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
function findWithRegex(regex, contentBlock, callback) {
|
|
// Get the text from the contentBlock
|
|
var text = contentBlock.getText();
|
|
var matchArr = void 0;
|
|
var start = void 0; // eslint-disable-line
|
|
var end = void 0;
|
|
// 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;
|
|
end = start + matchArr[0].length;
|
|
callback(start, end);
|
|
if (start === end) break;
|
|
}
|
|
}
|
|
|
|
function mentionContentStrategy(contentBlock, callback, contentState) {
|
|
contentBlock.findEntityRanges(function (character) {
|
|
var entityKey = character.getEntity();
|
|
return entityKey && contentState.getEntity(entityKey).getType() === 'mention';
|
|
}, callback);
|
|
}
|
|
|
|
function noop() {}
|
|
|
|
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 _react2['default'].createElement(tag, (0, _extends3['default'])({}, props, { data: data }));
|
|
};
|
|
|
|
function createMention() {
|
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
|
var callbacks = {
|
|
onChange: noop,
|
|
onUpArrow: noop,
|
|
onDownArrow: noop,
|
|
getEditorState: noop,
|
|
setEditorState: noop,
|
|
handleReturn: noop,
|
|
onBlur: noop
|
|
};
|
|
var componentProps = {
|
|
callbacks: callbacks,
|
|
mentionStore: _mentionStore2['default']
|
|
};
|
|
var suggestionRegex = (0, _getRegExp2['default'])(config.prefix);
|
|
|
|
var tag = config.tag || _MentionContent2['default'];
|
|
var decorators = [{
|
|
strategy: function strategy(contentBlock, callback) {
|
|
findWithRegex(suggestionRegex, contentBlock, callback);
|
|
},
|
|
component: function component(props) {
|
|
return _react2['default'].createElement(_SuggestionPortal2['default'], (0, _extends3['default'])({}, props, componentProps, {
|
|
style: config.mentionStyle,
|
|
suggestionRegex: (0, _getRegExp2['default'])(config.prefix)
|
|
}));
|
|
}
|
|
}];
|
|
if (config.mode === 'immutable') {
|
|
decorators.unshift({
|
|
strategy: mentionContentStrategy,
|
|
component: function component(props) {
|
|
return _react2['default'].createElement(MentionContentComponent, (0, _extends3['default'])({ tag: tag }, props, { callbacks: callbacks }));
|
|
}
|
|
});
|
|
}
|
|
|
|
return {
|
|
name: 'mention',
|
|
Suggestions: function Suggestions(props) {
|
|
return _react2['default'].createElement(_Suggestions3['default'], (0, _extends3['default'])({}, props, componentProps, {
|
|
store: _mentionStore2['default']
|
|
}));
|
|
},
|
|
decorators: decorators,
|
|
onChange: function onChange(editorState) {
|
|
return callbacks.onChange ? callbacks.onChange(editorState) : editorState;
|
|
},
|
|
callbacks: callbacks,
|
|
'export': _exportContent2['default']
|
|
};
|
|
}
|
|
module.exports = exports['default']; |