UNPKG

@atlaskit/editor-plugin-collab-edit

Version:

Collab Edit plugin for @atlaskit/editor-core

47 lines (46 loc) 1.58 kB
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; };