@atlaskit/editor-plugin-collab-edit
Version:
Collab Edit plugin for @atlaskit/editor-core
61 lines (59 loc) • 2.23 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.initialize = void 0;
var _memoizeOne = _interopRequireDefault(require("memoize-one"));
var _transform = require("@atlaskit/editor-prosemirror/transform");
var _pluginKey = require("../main/plugin-key");
var _handlers = require("./handlers");
var initCollab = function initCollab(collabEditProvider, view) {
if (collabEditProvider.initialize) {
collabEditProvider.initialize(function () {
return view.state;
}, function (json) {
return _transform.Step.fromJSON(view.state.schema, json);
});
}
};
var initNewCollab = function initNewCollab(collabEditProvider, view, editorApi, onSyncUpError) {
collabEditProvider.setup({
getState: function getState() {
return view.state;
},
editorApi: editorApi,
onSyncUpError: onSyncUpError
});
};
var initCollabMemo = (0, _memoizeOne.default)(initCollab);
var initialize = exports.initialize = function initialize(_ref) {
var options = _ref.options,
providerFactory = _ref.providerFactory,
view = _ref.view,
featureFlags = _ref.featureFlags,
editorAnalyticsApi = _ref.editorAnalyticsApi,
pluginInjectionApi = _ref.pluginInjectionApi;
return function (provider) {
// eslint-disable-next-line prefer-const
var cleanup;
var pluginState = _pluginKey.pluginKey.getState(view.state);
if (pluginState !== null && pluginState !== void 0 && pluginState.isReady && cleanup) {
cleanup();
}
cleanup = (0, _handlers.subscribe)(view, provider, options, featureFlags, providerFactory, editorAnalyticsApi);
// Initialize provider
if (options.useNativePlugin) {
// ED-13912 For NCS we don't want to use memoizeOne because it causes
// infinite text while changing page-width
initNewCollab(provider, view, pluginInjectionApi, options.onSyncUpError);
} else {
/**
* We only want to initialise once, if we reload/reconfigure this plugin
* We dont want to re-init collab, it would break existing sessions
*/
initCollabMemo(provider, view);
}
return cleanup;
};
};