@atlaskit/editor-plugin-collab-edit
Version:
Collab Edit plugin for @atlaskit/editor-core
100 lines (97 loc) • 4.35 kB
JavaScript
;
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];
});
});