UNPKG

@atlaskit/editor-plugin-collab-edit

Version:

Collab Edit plugin for @atlaskit/editor-core

100 lines (97 loc) 4.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.subscribe = void 0; var _actions = require("../actions"); var _analytics = require("../analytics"); var _trackReconnectionConflict = require("../track-reconnection-conflict"); // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any var effect = function effect(fn, eq) { var previousDeps; var cleanup; return function () { for (var _len = arguments.length, currentDeps = new Array(_len), _key = 0; _key < _len; _key++) { currentDeps[_key] = arguments[_key]; } if (cleanup && eq(previousDeps, currentDeps)) { return cleanup; } cleanup = fn.apply(void 0, currentDeps); previousDeps = currentDeps; return cleanup; }; }; var subscribe = exports.subscribe = effect(function (view, provider, options, featureFlags, _providerFactory, editorAnalyticsApi) { var entityRef; var entityHandlers = { disconnectedHandler: function disconnectedHandler() { (0, _analytics.addSynchronyEntityAnalytics)(view.state, view.state.tr)('disconnected', editorAnalyticsApi); }, errorHandler: function errorHandler() { (0, _analytics.addSynchronyEntityAnalytics)(view.state, view.state.tr)('error', editorAnalyticsApi); } }; var unsubscribeSynchronyEntity = function unsubscribeSynchronyEntity() { if (entityRef) { entityRef.off('disconnected', entityHandlers.disconnectedHandler); entityRef.off('error', entityHandlers.errorHandler); } }; var handlers = { initHandler: function initHandler(data) { view.dispatch(view.state.tr.setMeta('collabInitialised', true)); (0, _actions.handleInit)(data, view, options, editorAnalyticsApi); }, connectedHandler: function connectedHandler(data) { return (0, _actions.handleConnection)(data, view); }, dataHandler: function dataHandler(data) { return (0, _actions.applyRemoteData)(data, view, options); }, presenceHandler: function presenceHandler(data) { return (0, _actions.handlePresence)(data, view); }, telepointerHandler: function telepointerHandler(data) { return (0, _actions.handleTelePointer)(data, view); }, localStepsHandler: function localStepsHandler(data) { var steps = data.steps; var state = view.state; var tr = state.tr; steps.forEach(function (step) { return tr.step(step); }); view.dispatch(tr); }, errorHandler: function errorHandler(error) { (0, _analytics.addSynchronyErrorAnalytics)(view.state, view.state.tr, featureFlags, editorAnalyticsApi)(error); }, entityHandler: function entityHandler(_ref) { var entity = _ref.entity; unsubscribeSynchronyEntity(); if (options.EXPERIMENTAL_allowInternalErrorAnalytics) { entity.on('disconnected', entityHandlers.disconnectedHandler); entity.on('error', entityHandlers.errorHandler); entityRef = entity; } }, dataConflictHandler: function dataConflictHandler(data) { view.dispatch(view.state.tr.setMeta(_trackReconnectionConflict.trackLastRemoteConflictPluginKey, data)); } }; provider.on('init', handlers.initHandler).on('connected', handlers.connectedHandler).on('data', handlers.dataHandler).on('presence', handlers.presenceHandler).on('telepointer', handlers.telepointerHandler).on('local-steps', handlers.localStepsHandler).on('error', handlers.errorHandler).on('entity', handlers.entityHandler).on('data:conflict', handlers.dataConflictHandler); return function () { unsubscribeSynchronyEntity(); provider.off('init', handlers.initHandler).off('connected', handlers.connectedHandler).off('data', handlers.dataHandler).off('presence', handlers.presenceHandler).off('telepointer', handlers.telepointerHandler).off('local-steps', handlers.localStepsHandler).off('error', handlers.errorHandler).off('entity', handlers.entityHandler).off('data:conflict', handlers.dataConflictHandler); }; }, function (previousDeps, currentDeps) { return currentDeps && currentDeps.every(function (dep, i) { return dep === previousDeps[i]; }); });