@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
92 lines • 4.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = require("react");
var react_1 = require("react");
var create_editor_1 = require("./create-editor");
var create_editor_2 = require("./create-editor");
var providerFactory_1 = require("../providerFactory");
var utils_1 = require("../utils");
var Editor = (function (_super) {
tslib_1.__extends(Editor, _super);
function Editor(props) {
var _this = _super.call(this, props) || this;
_this.initEditor = function (place) {
if (!place) {
return;
}
var plugins = create_editor_2.createPluginsList(_this.props);
var editor = create_editor_1.createEditor(place, plugins, _this.props, _this.providerFactory);
_this.registerEditorForActions(editor);
_this.setState({ editor: editor });
// Focus editor first time we create it if shouldFocus prop is set to true.
if (_this.props.shouldFocus) {
if (!editor.editorView.hasFocus()) {
editor.editorView.focus();
}
utils_1.moveCursorToTheEnd(editor.editorView);
}
};
_this.providerFactory = new providerFactory_1.default();
_this.state = {};
return _this;
}
Editor.prototype.componentDidMount = function () {
this.initUi();
this.handleProviders(this.props);
};
Editor.prototype.componentWillReceiveProps = function (nextProps) {
this.handleProviders(nextProps);
};
Editor.prototype.componentWillUnmount = function () {
if (!this.state.editor) {
return;
}
this.unregisterEditorFromActions();
this.state.editor.editorView.destroy();
if (this.state.editor.eventDispatcher) {
this.state.editor.eventDispatcher.destroy();
}
};
Editor.prototype.registerEditorForActions = function (editor) {
if (this.context && this.context.editorActions) {
this.context.editorActions._privateRegisterEditor(editor.editorView, editor.contentTransformer);
}
};
Editor.prototype.unregisterEditorFromActions = function () {
if (this.context && this.context.editorActions) {
this.context.editorActions._privateUnregisterEditor();
}
};
Editor.prototype.initUi = function () {
var component = create_editor_1.getUiComponent(this.props.appearance);
this.setState({ component: component });
};
Editor.prototype.handleProviders = function (props) {
var emojiProvider = props.emojiProvider, mentionProvider = props.mentionProvider, mediaProvider = props.mediaProvider, collabEditProvider = props.collabEditProvider, activityProvider = props.activityProvider, presenceProvider = props.presenceProvider;
this.providerFactory.setProvider('emojiProvider', emojiProvider);
this.providerFactory.setProvider('mentionProvider', mentionProvider);
this.providerFactory.setProvider('mediaProvider', mediaProvider);
this.providerFactory.setProvider('collabEditProvider', collabEditProvider);
this.providerFactory.setProvider('activityProvider', activityProvider);
this.providerFactory.setProvider('presenceProvider', presenceProvider);
};
Editor.prototype.render = function () {
// tslint:disable-next-line:variable-name
var _a = this.state, Component = _a.component, _b = _a.editor, editor = _b === void 0 ? {} : _b;
if (!Component) {
return null;
}
var _c = editor, editorView = _c.editorView, contentComponents = _c.contentComponents, primaryToolbarComponents = _c.primaryToolbarComponents, secondaryToolbarComponents = _c.secondaryToolbarComponents, eventDispatcher = _c.eventDispatcher;
return (React.createElement(Component, { onUiReady: this.initEditor, editorView: editorView, providerFactory: this.providerFactory, eventDispatcher: eventDispatcher, maxHeight: this.props.maxHeight, contentComponents: contentComponents, primaryToolbarComponents: primaryToolbarComponents, secondaryToolbarComponents: secondaryToolbarComponents, customContentComponents: this.props.contentComponents, customPrimaryToolbarComponents: this.props.primaryToolbarComponents, customSecondaryToolbarComponents: this.props.secondaryToolbarComponents, addonToolbarComponents: this.props.addonToolbarComponents }));
};
return Editor;
}(React.Component));
Editor.defaultProps = {
appearance: 'message'
};
Editor.contextTypes = {
editorActions: react_1.PropTypes.object
};
exports.default = Editor;
//# sourceMappingURL=index.js.map