@atlaskit/editor-plugin-collab-edit
Version:
Collab Edit plugin for @atlaskit/editor-core
47 lines (46 loc) • 1.58 kB
JavaScript
import memoizeOne from 'memoize-one';
import { Step } from '@atlaskit/editor-prosemirror/transform';
import { pluginKey } from '../main/plugin-key';
import { subscribe } from './handlers';
const initCollab = (collabEditProvider, view) => {
if (collabEditProvider.initialize) {
collabEditProvider.initialize(() => view.state, json => Step.fromJSON(view.state.schema, json));
}
};
const initNewCollab = (collabEditProvider, view, editorApi, onSyncUpError) => {
collabEditProvider.setup({
getState: () => view.state,
editorApi,
onSyncUpError
});
};
const initCollabMemo = memoizeOne(initCollab);
export const initialize = ({
options,
providerFactory,
view,
featureFlags,
editorAnalyticsApi,
pluginInjectionApi
}) => provider => {
// eslint-disable-next-line prefer-const
let cleanup;
const pluginState = pluginKey.getState(view.state);
if (pluginState !== null && pluginState !== void 0 && pluginState.isReady && cleanup) {
cleanup();
}
cleanup = 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;
};