@atlaskit/editor-plugin-collab-edit 3.0.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/editor-plugin-collab-edit
2
2
 
3
+ ## 3.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#120905](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/120905)
8
+ [`4194ea903d7d6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/4194ea903d7d6) -
9
+ Refactor step merging while offline.
10
+
11
+ ## 3.1.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [#117768](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/117768)
16
+ [`d55a8d95dd68a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/d55a8d95dd68a) -
17
+ Add support for presenceActivity changes within collab provider. Remove unused code from original
18
+ presence experiment.
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies
23
+
3
24
  ## 3.0.0
4
25
 
5
26
  ### Major Changes
@@ -4,7 +4,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.registerAllCustomSteps = exports.handleTelePointer = exports.handlePresence = exports.handleInit = exports.handleConnection = exports.handleActivityJoin = exports.handleActivityAck = exports.getSendableSelection = exports.applyRemoteSteps = exports.applyRemoteData = void 0;
7
+ exports.registerAllCustomSteps = exports.handleTelePointer = exports.handlePresence = exports.handleInit = exports.handleConnection = exports.getSendableSelection = exports.applyRemoteSteps = exports.applyRemoteData = void 0;
8
8
  var allAdfSchemaSteps = _interopRequireWildcard(require("@atlaskit/adf-schema/steps"));
9
9
  var allAtlaskitCustomSteps = _interopRequireWildcard(require("@atlaskit/custom-steps"));
10
10
  var _state = require("@atlaskit/editor-prosemirror/state");
@@ -48,31 +48,6 @@ var handlePresence = exports.handlePresence = function handlePresence(presenceDa
48
48
  var tr = view.state.tr;
49
49
  view.dispatch(tr.setMeta('presence', presenceData));
50
50
  };
51
- var ACTIVITY_EDITING = 'EDITING';
52
-
53
- /**
54
- * A Handler for event "activity:ack" forwarded from NCS.
55
- * This event "activity:ack" is emitted by the existing collaborators in response to a new collaborator
56
- * joining. It is used to inform the new collaborator about the current actions or states of the existing
57
- * collaborators, such as viewing or editing.
58
- */
59
- var handleActivityAck = exports.handleActivityAck = function handleActivityAck() {};
60
-
61
- /**
62
- * A Handler for event "activity:join" forwarded from NCS.
63
- * Existing participant respond to the new joiner with their status.
64
- * This event "activity:join" is emitted when a new collaborator joins the session. The event carries
65
- * information about the action the new collaborator is currently doing in the session, such as viewing
66
- * or editing.
67
- */
68
- var handleActivityJoin = exports.handleActivityJoin = function handleActivityJoin(provider) {
69
- if (provider) {
70
- provider.sendMessage({
71
- type: 'activity:ack',
72
- activity: ACTIVITY_EDITING
73
- });
74
- }
75
- };
76
51
  var applyRemoteData = exports.applyRemoteData = function applyRemoteData(remoteData, view, options) {
77
52
  var json = remoteData.json,
78
53
  _remoteData$userIds = remoteData.userIds,
@@ -60,12 +60,6 @@ var subscribe = exports.subscribe = effect(function (view, provider, options, fe
60
60
  presenceHandler: function presenceHandler(data) {
61
61
  return (0, _actions.handlePresence)(data, view);
62
62
  },
63
- activityAckHandler: function activityAckHandler() {
64
- return (0, _actions.handleActivityAck)();
65
- },
66
- activityJoinHandler: function activityJoinHandler() {
67
- return (0, _actions.handleActivityJoin)(provider);
68
- },
69
63
  telepointerHandler: function telepointerHandler(data) {
70
64
  return (0, _actions.handleTelePointer)(data, view);
71
65
  },
@@ -94,10 +88,10 @@ var subscribe = exports.subscribe = effect(function (view, provider, options, fe
94
88
  view.dispatch(view.state.tr.setMeta(_trackReconnectionConflict.trackLastRemoteConflictPluginKey, data));
95
89
  }
96
90
  };
97
- provider.on('init', handlers.initHandler).on('connected', handlers.connectedHandler).on('data', handlers.dataHandler).on('presence', handlers.presenceHandler).on('activity:ack', handlers.activityAckHandler).on('activity:join', handlers.activityJoinHandler).on('telepointer', handlers.telepointerHandler).on('local-steps', handlers.localStepsHandler).on('error', handlers.errorHandler).on('entity', handlers.entityHandler).on('data:conflict', handlers.dataConflictHandler);
91
+ 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);
98
92
  return function () {
99
93
  unsubscribeSynchronyEntity();
100
- provider.off('init', handlers.initHandler).off('connected', handlers.connectedHandler).off('data', handlers.dataHandler).off('presence', handlers.presenceHandler).off('activity:ack', handlers.activityAckHandler).off('activity:join', handlers.activityJoinHandler).off('telepointer', handlers.telepointerHandler).off('local-steps', handlers.localStepsHandler).off('error', handlers.errorHandler).off('entity', handlers.entityHandler).off('data:conflict', handlers.dataConflictHandler);
94
+ 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);
101
95
  };
102
96
  }, function (previousDeps, currentDeps) {
103
97
  return currentDeps && currentDeps.every(function (dep, i) {
@@ -5,38 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.mergeUnconfirmedSteps = mergeUnconfirmedSteps;
8
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
9
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
10
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
11
8
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
- var _transform = require("@atlaskit/editor-prosemirror/transform");
14
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
15
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
16
- function isLockable(step) {
17
- return (step === null || step === void 0 ? void 0 : step.lockStep) !== undefined;
18
- }
19
- var createLockableProseMirrorStep = function createLockableProseMirrorStep(step) {
20
- var stepIsLocked = false;
21
- if (isLockable(step)) {
22
- return step;
23
- }
24
- return new Proxy(step, {
25
- get: function get(target, prop, receiver) {
26
- if (prop === 'lockStep') {
27
- return function () {
28
- stepIsLocked = true;
29
- };
30
- } else if (prop === 'isLocked') {
31
- return function () {
32
- return stepIsLocked;
33
- };
34
- }
35
- return Reflect.get(target, prop, receiver);
36
- }
37
- });
38
- };
39
-
10
+ var _state = require("@atlaskit/editor-prosemirror/state");
40
11
  // Based on: `packages/editor/prosemirror-collab/src/index.ts`
41
12
  var LockableRebaseable = /*#__PURE__*/(0, _createClass2.default)(function LockableRebaseable(step, inverted, origin) {
42
13
  (0, _classCallCheck2.default)(this, LockableRebaseable);
@@ -44,14 +15,13 @@ var LockableRebaseable = /*#__PURE__*/(0, _createClass2.default)(function Lockab
44
15
  this.inverted = inverted;
45
16
  this.origin = origin;
46
17
  });
47
- var LockableProseMirrorStep = /*#__PURE__*/function (_ProseMirrorStep) {
48
- function LockableProseMirrorStep() {
49
- (0, _classCallCheck2.default)(this, LockableProseMirrorStep);
50
- return _callSuper(this, LockableProseMirrorStep, arguments);
18
+ var isLocked = function isLocked(step) {
19
+ if (step.origin instanceof _state.Transaction) {
20
+ return step.origin.getMeta('mergeIsLocked');
51
21
  }
52
- (0, _inherits2.default)(LockableProseMirrorStep, _ProseMirrorStep);
53
- return (0, _createClass2.default)(LockableProseMirrorStep);
54
- }(_transform.Step);
22
+ return false;
23
+ };
24
+
55
25
  /**
56
26
  * Merge a set of steps together to reduce the total number of steps stored in memory.
57
27
  *
@@ -64,9 +34,9 @@ var LockableProseMirrorStep = /*#__PURE__*/function (_ProseMirrorStep) {
64
34
  */
65
35
  function mergeUnconfirmedSteps(steps, api) {
66
36
  var mergedSteps = steps.reduce(function (acc, rebaseable) {
67
- var _api$connectivity, _lastStep$step$isLock, _lastStep$step, _rebaseable$step$isLo, _rebaseable$step;
37
+ var _api$connectivity;
68
38
  var lastStep = acc[acc.length - 1];
69
- if ((api === null || api === void 0 || (_api$connectivity = api.connectivity) === null || _api$connectivity === void 0 || (_api$connectivity = _api$connectivity.sharedState.currentState()) === null || _api$connectivity === void 0 ? void 0 : _api$connectivity.mode) === 'offline' && lastStep && ((_lastStep$step$isLock = (_lastStep$step = lastStep.step).isLocked) === null || _lastStep$step$isLock === void 0 ? void 0 : _lastStep$step$isLock.call(_lastStep$step)) !== true && ((_rebaseable$step$isLo = (_rebaseable$step = rebaseable.step).isLocked) === null || _rebaseable$step$isLo === void 0 ? void 0 : _rebaseable$step$isLo.call(_rebaseable$step)) !== true) {
39
+ if ((api === null || api === void 0 || (_api$connectivity = api.connectivity) === null || _api$connectivity === void 0 || (_api$connectivity = _api$connectivity.sharedState.currentState()) === null || _api$connectivity === void 0 ? void 0 : _api$connectivity.mode) === 'offline' && lastStep && !isLocked(lastStep) && !isLocked(rebaseable)) {
70
40
  var mergedStep = lastStep.step.merge(rebaseable.step);
71
41
  var _inverted = rebaseable.inverted.merge(lastStep.inverted);
72
42
  // Always take the origin of the new step.
@@ -75,11 +45,11 @@ function mergeUnconfirmedSteps(steps, api) {
75
45
  // As we want to wait until all the transactions have been pushed through
76
46
  var _origin = lastStep.origin;
77
47
  if (mergedStep && _inverted) {
78
- acc[acc.length - 1] = new LockableRebaseable(createLockableProseMirrorStep(mergedStep), _inverted, _origin);
48
+ acc[acc.length - 1] = new LockableRebaseable(mergedStep, _inverted, _origin);
79
49
  return acc;
80
50
  }
81
51
  }
82
- return acc.concat(new LockableRebaseable(createLockableProseMirrorStep(rebaseable.step), rebaseable.inverted, rebaseable.origin));
52
+ return acc.concat(new LockableRebaseable(rebaseable.step, rebaseable.inverted, rebaseable.origin));
83
53
  }, []);
84
54
  return mergedSteps;
85
55
  }
@@ -50,31 +50,6 @@ export const handlePresence = (presenceData, view) => {
50
50
  } = view;
51
51
  view.dispatch(tr.setMeta('presence', presenceData));
52
52
  };
53
- const ACTIVITY_EDITING = 'EDITING';
54
-
55
- /**
56
- * A Handler for event "activity:ack" forwarded from NCS.
57
- * This event "activity:ack" is emitted by the existing collaborators in response to a new collaborator
58
- * joining. It is used to inform the new collaborator about the current actions or states of the existing
59
- * collaborators, such as viewing or editing.
60
- */
61
- export const handleActivityAck = () => {};
62
-
63
- /**
64
- * A Handler for event "activity:join" forwarded from NCS.
65
- * Existing participant respond to the new joiner with their status.
66
- * This event "activity:join" is emitted when a new collaborator joins the session. The event carries
67
- * information about the action the new collaborator is currently doing in the session, such as viewing
68
- * or editing.
69
- */
70
- export const handleActivityJoin = provider => {
71
- if (provider) {
72
- provider.sendMessage({
73
- type: 'activity:ack',
74
- activity: ACTIVITY_EDITING
75
- });
76
- }
77
- };
78
53
  export const applyRemoteData = (remoteData, view, options) => {
79
54
  const {
80
55
  json,
@@ -1,4 +1,4 @@
1
- import { applyRemoteData, handleActivityAck, handleActivityJoin, handleConnection, handleInit, handlePresence, handleTelePointer } from '../actions';
1
+ import { applyRemoteData, handleConnection, handleInit, handlePresence, handleTelePointer } from '../actions';
2
2
  import { addSynchronyEntityAnalytics, addSynchronyErrorAnalytics } from '../analytics';
3
3
  import { trackLastRemoteConflictPluginKey } from '../track-reconnection-conflict';
4
4
 
@@ -46,8 +46,6 @@ export const subscribe = effect((view, provider, options, featureFlags, _provide
46
46
  connectedHandler: data => handleConnection(data, view),
47
47
  dataHandler: data => applyRemoteData(data, view, options),
48
48
  presenceHandler: data => handlePresence(data, view),
49
- activityAckHandler: () => handleActivityAck(),
50
- activityJoinHandler: () => handleActivityJoin(provider),
51
49
  telepointerHandler: data => handleTelePointer(data, view),
52
50
  localStepsHandler: data => {
53
51
  const {
@@ -79,9 +77,9 @@ export const subscribe = effect((view, provider, options, featureFlags, _provide
79
77
  view.dispatch(view.state.tr.setMeta(trackLastRemoteConflictPluginKey, data));
80
78
  }
81
79
  };
82
- provider.on('init', handlers.initHandler).on('connected', handlers.connectedHandler).on('data', handlers.dataHandler).on('presence', handlers.presenceHandler).on('activity:ack', handlers.activityAckHandler).on('activity:join', handlers.activityJoinHandler).on('telepointer', handlers.telepointerHandler).on('local-steps', handlers.localStepsHandler).on('error', handlers.errorHandler).on('entity', handlers.entityHandler).on('data:conflict', handlers.dataConflictHandler);
80
+ 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);
83
81
  return () => {
84
82
  unsubscribeSynchronyEntity();
85
- provider.off('init', handlers.initHandler).off('connected', handlers.connectedHandler).off('data', handlers.dataHandler).off('presence', handlers.presenceHandler).off('activity:ack', handlers.activityAckHandler).off('activity:join', handlers.activityJoinHandler).off('telepointer', handlers.telepointerHandler).off('local-steps', handlers.localStepsHandler).off('error', handlers.errorHandler).off('entity', handlers.entityHandler).off('data:conflict', handlers.dataConflictHandler);
83
+ 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);
86
84
  };
87
85
  }, (previousDeps, currentDeps) => currentDeps && currentDeps.every((dep, i) => dep === previousDeps[i]));
@@ -1,28 +1,4 @@
1
- import { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform';
2
- function isLockable(step) {
3
- return (step === null || step === void 0 ? void 0 : step.lockStep) !== undefined;
4
- }
5
- const createLockableProseMirrorStep = step => {
6
- let stepIsLocked = false;
7
- if (isLockable(step)) {
8
- return step;
9
- }
10
- return new Proxy(step, {
11
- get(target, prop, receiver) {
12
- if (prop === 'lockStep') {
13
- return () => {
14
- stepIsLocked = true;
15
- };
16
- } else if (prop === 'isLocked') {
17
- return () => {
18
- return stepIsLocked;
19
- };
20
- }
21
- return Reflect.get(target, prop, receiver);
22
- }
23
- });
24
- };
25
-
1
+ import { Transaction } from '@atlaskit/editor-prosemirror/state';
26
2
  // Based on: `packages/editor/prosemirror-collab/src/index.ts`
27
3
  class LockableRebaseable {
28
4
  constructor(step, inverted, origin) {
@@ -31,7 +7,12 @@ class LockableRebaseable {
31
7
  this.origin = origin;
32
8
  }
33
9
  }
34
- class LockableProseMirrorStep extends ProseMirrorStep {}
10
+ const isLocked = step => {
11
+ if (step.origin instanceof Transaction) {
12
+ return step.origin.getMeta('mergeIsLocked');
13
+ }
14
+ return false;
15
+ };
35
16
 
36
17
  /**
37
18
  * Merge a set of steps together to reduce the total number of steps stored in memory.
@@ -45,9 +26,9 @@ class LockableProseMirrorStep extends ProseMirrorStep {}
45
26
  */
46
27
  export function mergeUnconfirmedSteps(steps, api) {
47
28
  const mergedSteps = steps.reduce((acc, rebaseable) => {
48
- var _api$connectivity, _api$connectivity$sha, _lastStep$step$isLock, _lastStep$step, _rebaseable$step$isLo, _rebaseable$step;
29
+ var _api$connectivity, _api$connectivity$sha;
49
30
  const lastStep = acc[acc.length - 1];
50
- if ((api === null || api === void 0 ? void 0 : (_api$connectivity = api.connectivity) === null || _api$connectivity === void 0 ? void 0 : (_api$connectivity$sha = _api$connectivity.sharedState.currentState()) === null || _api$connectivity$sha === void 0 ? void 0 : _api$connectivity$sha.mode) === 'offline' && lastStep && ((_lastStep$step$isLock = (_lastStep$step = lastStep.step).isLocked) === null || _lastStep$step$isLock === void 0 ? void 0 : _lastStep$step$isLock.call(_lastStep$step)) !== true && ((_rebaseable$step$isLo = (_rebaseable$step = rebaseable.step).isLocked) === null || _rebaseable$step$isLo === void 0 ? void 0 : _rebaseable$step$isLo.call(_rebaseable$step)) !== true) {
31
+ if ((api === null || api === void 0 ? void 0 : (_api$connectivity = api.connectivity) === null || _api$connectivity === void 0 ? void 0 : (_api$connectivity$sha = _api$connectivity.sharedState.currentState()) === null || _api$connectivity$sha === void 0 ? void 0 : _api$connectivity$sha.mode) === 'offline' && lastStep && !isLocked(lastStep) && !isLocked(rebaseable)) {
51
32
  const mergedStep = lastStep.step.merge(rebaseable.step);
52
33
  const inverted = rebaseable.inverted.merge(lastStep.inverted);
53
34
  // Always take the origin of the new step.
@@ -56,11 +37,11 @@ export function mergeUnconfirmedSteps(steps, api) {
56
37
  // As we want to wait until all the transactions have been pushed through
57
38
  const origin = lastStep.origin;
58
39
  if (mergedStep && inverted) {
59
- acc[acc.length - 1] = new LockableRebaseable(createLockableProseMirrorStep(mergedStep), inverted, origin);
40
+ acc[acc.length - 1] = new LockableRebaseable(mergedStep, inverted, origin);
60
41
  return acc;
61
42
  }
62
43
  }
63
- return acc.concat(new LockableRebaseable(createLockableProseMirrorStep(rebaseable.step), rebaseable.inverted, rebaseable.origin));
44
+ return acc.concat(new LockableRebaseable(rebaseable.step, rebaseable.inverted, rebaseable.origin));
64
45
  }, []);
65
46
  return mergedSteps;
66
47
  }
@@ -38,31 +38,6 @@ export var handlePresence = function handlePresence(presenceData, view) {
38
38
  var tr = view.state.tr;
39
39
  view.dispatch(tr.setMeta('presence', presenceData));
40
40
  };
41
- var ACTIVITY_EDITING = 'EDITING';
42
-
43
- /**
44
- * A Handler for event "activity:ack" forwarded from NCS.
45
- * This event "activity:ack" is emitted by the existing collaborators in response to a new collaborator
46
- * joining. It is used to inform the new collaborator about the current actions or states of the existing
47
- * collaborators, such as viewing or editing.
48
- */
49
- export var handleActivityAck = function handleActivityAck() {};
50
-
51
- /**
52
- * A Handler for event "activity:join" forwarded from NCS.
53
- * Existing participant respond to the new joiner with their status.
54
- * This event "activity:join" is emitted when a new collaborator joins the session. The event carries
55
- * information about the action the new collaborator is currently doing in the session, such as viewing
56
- * or editing.
57
- */
58
- export var handleActivityJoin = function handleActivityJoin(provider) {
59
- if (provider) {
60
- provider.sendMessage({
61
- type: 'activity:ack',
62
- activity: ACTIVITY_EDITING
63
- });
64
- }
65
- };
66
41
  export var applyRemoteData = function applyRemoteData(remoteData, view, options) {
67
42
  var json = remoteData.json,
68
43
  _remoteData$userIds = remoteData.userIds,
@@ -1,4 +1,4 @@
1
- import { applyRemoteData, handleActivityAck, handleActivityJoin, handleConnection, handleInit, handlePresence, handleTelePointer } from '../actions';
1
+ import { applyRemoteData, handleConnection, handleInit, handlePresence, handleTelePointer } from '../actions';
2
2
  import { addSynchronyEntityAnalytics, addSynchronyErrorAnalytics } from '../analytics';
3
3
  import { trackLastRemoteConflictPluginKey } from '../track-reconnection-conflict';
4
4
 
@@ -55,12 +55,6 @@ export var subscribe = effect(function (view, provider, options, featureFlags, _
55
55
  presenceHandler: function presenceHandler(data) {
56
56
  return handlePresence(data, view);
57
57
  },
58
- activityAckHandler: function activityAckHandler() {
59
- return handleActivityAck();
60
- },
61
- activityJoinHandler: function activityJoinHandler() {
62
- return handleActivityJoin(provider);
63
- },
64
58
  telepointerHandler: function telepointerHandler(data) {
65
59
  return handleTelePointer(data, view);
66
60
  },
@@ -89,10 +83,10 @@ export var subscribe = effect(function (view, provider, options, featureFlags, _
89
83
  view.dispatch(view.state.tr.setMeta(trackLastRemoteConflictPluginKey, data));
90
84
  }
91
85
  };
92
- provider.on('init', handlers.initHandler).on('connected', handlers.connectedHandler).on('data', handlers.dataHandler).on('presence', handlers.presenceHandler).on('activity:ack', handlers.activityAckHandler).on('activity:join', handlers.activityJoinHandler).on('telepointer', handlers.telepointerHandler).on('local-steps', handlers.localStepsHandler).on('error', handlers.errorHandler).on('entity', handlers.entityHandler).on('data:conflict', handlers.dataConflictHandler);
86
+ 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);
93
87
  return function () {
94
88
  unsubscribeSynchronyEntity();
95
- provider.off('init', handlers.initHandler).off('connected', handlers.connectedHandler).off('data', handlers.dataHandler).off('presence', handlers.presenceHandler).off('activity:ack', handlers.activityAckHandler).off('activity:join', handlers.activityJoinHandler).off('telepointer', handlers.telepointerHandler).off('local-steps', handlers.localStepsHandler).off('error', handlers.errorHandler).off('entity', handlers.entityHandler).off('data:conflict', handlers.dataConflictHandler);
89
+ 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);
96
90
  };
97
91
  }, function (previousDeps, currentDeps) {
98
92
  return currentDeps && currentDeps.every(function (dep, i) {
@@ -1,35 +1,6 @@
1
- import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
2
- import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
3
- import _inherits from "@babel/runtime/helpers/inherits";
4
1
  import _createClass from "@babel/runtime/helpers/createClass";
5
2
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
6
- function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
7
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
8
- import { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform';
9
- function isLockable(step) {
10
- return (step === null || step === void 0 ? void 0 : step.lockStep) !== undefined;
11
- }
12
- var createLockableProseMirrorStep = function createLockableProseMirrorStep(step) {
13
- var stepIsLocked = false;
14
- if (isLockable(step)) {
15
- return step;
16
- }
17
- return new Proxy(step, {
18
- get: function get(target, prop, receiver) {
19
- if (prop === 'lockStep') {
20
- return function () {
21
- stepIsLocked = true;
22
- };
23
- } else if (prop === 'isLocked') {
24
- return function () {
25
- return stepIsLocked;
26
- };
27
- }
28
- return Reflect.get(target, prop, receiver);
29
- }
30
- });
31
- };
32
-
3
+ import { Transaction } from '@atlaskit/editor-prosemirror/state';
33
4
  // Based on: `packages/editor/prosemirror-collab/src/index.ts`
34
5
  var LockableRebaseable = /*#__PURE__*/_createClass(function LockableRebaseable(step, inverted, origin) {
35
6
  _classCallCheck(this, LockableRebaseable);
@@ -37,14 +8,13 @@ var LockableRebaseable = /*#__PURE__*/_createClass(function LockableRebaseable(s
37
8
  this.inverted = inverted;
38
9
  this.origin = origin;
39
10
  });
40
- var LockableProseMirrorStep = /*#__PURE__*/function (_ProseMirrorStep) {
41
- function LockableProseMirrorStep() {
42
- _classCallCheck(this, LockableProseMirrorStep);
43
- return _callSuper(this, LockableProseMirrorStep, arguments);
11
+ var isLocked = function isLocked(step) {
12
+ if (step.origin instanceof Transaction) {
13
+ return step.origin.getMeta('mergeIsLocked');
44
14
  }
45
- _inherits(LockableProseMirrorStep, _ProseMirrorStep);
46
- return _createClass(LockableProseMirrorStep);
47
- }(ProseMirrorStep);
15
+ return false;
16
+ };
17
+
48
18
  /**
49
19
  * Merge a set of steps together to reduce the total number of steps stored in memory.
50
20
  *
@@ -57,9 +27,9 @@ var LockableProseMirrorStep = /*#__PURE__*/function (_ProseMirrorStep) {
57
27
  */
58
28
  export function mergeUnconfirmedSteps(steps, api) {
59
29
  var mergedSteps = steps.reduce(function (acc, rebaseable) {
60
- var _api$connectivity, _lastStep$step$isLock, _lastStep$step, _rebaseable$step$isLo, _rebaseable$step;
30
+ var _api$connectivity;
61
31
  var lastStep = acc[acc.length - 1];
62
- if ((api === null || api === void 0 || (_api$connectivity = api.connectivity) === null || _api$connectivity === void 0 || (_api$connectivity = _api$connectivity.sharedState.currentState()) === null || _api$connectivity === void 0 ? void 0 : _api$connectivity.mode) === 'offline' && lastStep && ((_lastStep$step$isLock = (_lastStep$step = lastStep.step).isLocked) === null || _lastStep$step$isLock === void 0 ? void 0 : _lastStep$step$isLock.call(_lastStep$step)) !== true && ((_rebaseable$step$isLo = (_rebaseable$step = rebaseable.step).isLocked) === null || _rebaseable$step$isLo === void 0 ? void 0 : _rebaseable$step$isLo.call(_rebaseable$step)) !== true) {
32
+ if ((api === null || api === void 0 || (_api$connectivity = api.connectivity) === null || _api$connectivity === void 0 || (_api$connectivity = _api$connectivity.sharedState.currentState()) === null || _api$connectivity === void 0 ? void 0 : _api$connectivity.mode) === 'offline' && lastStep && !isLocked(lastStep) && !isLocked(rebaseable)) {
63
33
  var mergedStep = lastStep.step.merge(rebaseable.step);
64
34
  var _inverted = rebaseable.inverted.merge(lastStep.inverted);
65
35
  // Always take the origin of the new step.
@@ -68,11 +38,11 @@ export function mergeUnconfirmedSteps(steps, api) {
68
38
  // As we want to wait until all the transactions have been pushed through
69
39
  var _origin = lastStep.origin;
70
40
  if (mergedStep && _inverted) {
71
- acc[acc.length - 1] = new LockableRebaseable(createLockableProseMirrorStep(mergedStep), _inverted, _origin);
41
+ acc[acc.length - 1] = new LockableRebaseable(mergedStep, _inverted, _origin);
72
42
  return acc;
73
43
  }
74
44
  }
75
- return acc.concat(new LockableRebaseable(createLockableProseMirrorStep(rebaseable.step), rebaseable.inverted, rebaseable.origin));
45
+ return acc.concat(new LockableRebaseable(rebaseable.step, rebaseable.inverted, rebaseable.origin));
76
46
  }, []);
77
47
  return mergedSteps;
78
48
  }
@@ -1,5 +1,5 @@
1
1
  import { type EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
2
- import type { CollabEditProvider, CollabEventConnectionData, CollabEventInitData, CollabEventPresenceData, CollabEventRemoteData, CollabSendableSelection, CollabTelepointerPayload } from '@atlaskit/editor-common/collab';
2
+ import type { CollabEventConnectionData, CollabEventInitData, CollabEventPresenceData, CollabEventRemoteData, CollabSendableSelection, CollabTelepointerPayload } from '@atlaskit/editor-common/collab';
3
3
  import type { Selection } from '@atlaskit/editor-prosemirror/state';
4
4
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
5
5
  import type { PrivateCollabEditOptions } from '../types';
@@ -7,21 +7,6 @@ export declare const registerAllCustomSteps: () => void;
7
7
  export declare const handleInit: (initData: CollabEventInitData, view: EditorView, options?: PrivateCollabEditOptions, editorAnalyticsApi?: EditorAnalyticsAPI) => void;
8
8
  export declare const handleConnection: (connectionData: CollabEventConnectionData, view: EditorView) => void;
9
9
  export declare const handlePresence: (presenceData: CollabEventPresenceData, view: EditorView) => void;
10
- /**
11
- * A Handler for event "activity:ack" forwarded from NCS.
12
- * This event "activity:ack" is emitted by the existing collaborators in response to a new collaborator
13
- * joining. It is used to inform the new collaborator about the current actions or states of the existing
14
- * collaborators, such as viewing or editing.
15
- */
16
- export declare const handleActivityAck: () => void;
17
- /**
18
- * A Handler for event "activity:join" forwarded from NCS.
19
- * Existing participant respond to the new joiner with their status.
20
- * This event "activity:join" is emitted when a new collaborator joins the session. The event carries
21
- * information about the action the new collaborator is currently doing in the session, such as viewing
22
- * or editing.
23
- */
24
- export declare const handleActivityJoin: (provider: CollabEditProvider | null) => void;
25
10
  export declare const applyRemoteData: (remoteData: CollabEventRemoteData, view: EditorView, options: PrivateCollabEditOptions) => void;
26
11
  export declare const applyRemoteSteps: (json: any[], view: EditorView, userIds?: (number | string)[], options?: PrivateCollabEditOptions) => void;
27
12
  export declare const handleTelePointer: (telepointerData: CollabTelepointerPayload, view: EditorView) => void;
@@ -13,8 +13,6 @@ export interface CollabHandlers {
13
13
  connectedHandler: (data: CollabEventConnectionData) => void;
14
14
  dataHandler: (data: CollabEventRemoteData) => void;
15
15
  presenceHandler: (data: CollabEventPresenceData) => void;
16
- activityAckHandler: () => void;
17
- activityJoinHandler: () => void;
18
16
  telepointerHandler: (data: CollabTelepointerPayload) => void;
19
17
  localStepsHandler: (data: CollabEventLocalStepData) => void;
20
18
  errorHandler: (error: any) => void;
@@ -3,14 +3,10 @@ import { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform'
3
3
  import type { Transform as ProseMirrorTransform } from '@atlaskit/editor-prosemirror/transform';
4
4
  import type { CollabEditPlugin } from '../collabEditPluginType';
5
5
  declare class LockableRebaseable {
6
- readonly step: LockableProseMirrorStep;
6
+ readonly step: ProseMirrorStep;
7
7
  readonly inverted: ProseMirrorStep;
8
8
  readonly origin: ProseMirrorTransform;
9
- constructor(step: LockableProseMirrorStep, inverted: ProseMirrorStep, origin: ProseMirrorTransform);
10
- }
11
- declare abstract class LockableProseMirrorStep extends ProseMirrorStep {
12
- lockStep?: () => void;
13
- isLocked?: () => boolean;
9
+ constructor(step: ProseMirrorStep, inverted: ProseMirrorStep, origin: ProseMirrorTransform);
14
10
  }
15
11
  /**
16
12
  * Merge a set of steps together to reduce the total number of steps stored in memory.
@@ -1,5 +1,5 @@
1
1
  import { type EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
2
- import type { CollabEditProvider, CollabEventConnectionData, CollabEventInitData, CollabEventPresenceData, CollabEventRemoteData, CollabSendableSelection, CollabTelepointerPayload } from '@atlaskit/editor-common/collab';
2
+ import type { CollabEventConnectionData, CollabEventInitData, CollabEventPresenceData, CollabEventRemoteData, CollabSendableSelection, CollabTelepointerPayload } from '@atlaskit/editor-common/collab';
3
3
  import type { Selection } from '@atlaskit/editor-prosemirror/state';
4
4
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
5
5
  import type { PrivateCollabEditOptions } from '../types';
@@ -7,21 +7,6 @@ export declare const registerAllCustomSteps: () => void;
7
7
  export declare const handleInit: (initData: CollabEventInitData, view: EditorView, options?: PrivateCollabEditOptions, editorAnalyticsApi?: EditorAnalyticsAPI) => void;
8
8
  export declare const handleConnection: (connectionData: CollabEventConnectionData, view: EditorView) => void;
9
9
  export declare const handlePresence: (presenceData: CollabEventPresenceData, view: EditorView) => void;
10
- /**
11
- * A Handler for event "activity:ack" forwarded from NCS.
12
- * This event "activity:ack" is emitted by the existing collaborators in response to a new collaborator
13
- * joining. It is used to inform the new collaborator about the current actions or states of the existing
14
- * collaborators, such as viewing or editing.
15
- */
16
- export declare const handleActivityAck: () => void;
17
- /**
18
- * A Handler for event "activity:join" forwarded from NCS.
19
- * Existing participant respond to the new joiner with their status.
20
- * This event "activity:join" is emitted when a new collaborator joins the session. The event carries
21
- * information about the action the new collaborator is currently doing in the session, such as viewing
22
- * or editing.
23
- */
24
- export declare const handleActivityJoin: (provider: CollabEditProvider | null) => void;
25
10
  export declare const applyRemoteData: (remoteData: CollabEventRemoteData, view: EditorView, options: PrivateCollabEditOptions) => void;
26
11
  export declare const applyRemoteSteps: (json: any[], view: EditorView, userIds?: (number | string)[], options?: PrivateCollabEditOptions) => void;
27
12
  export declare const handleTelePointer: (telepointerData: CollabTelepointerPayload, view: EditorView) => void;
@@ -13,8 +13,6 @@ export interface CollabHandlers {
13
13
  connectedHandler: (data: CollabEventConnectionData) => void;
14
14
  dataHandler: (data: CollabEventRemoteData) => void;
15
15
  presenceHandler: (data: CollabEventPresenceData) => void;
16
- activityAckHandler: () => void;
17
- activityJoinHandler: () => void;
18
16
  telepointerHandler: (data: CollabTelepointerPayload) => void;
19
17
  localStepsHandler: (data: CollabEventLocalStepData) => void;
20
18
  errorHandler: (error: any) => void;
@@ -3,14 +3,10 @@ import { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform'
3
3
  import type { Transform as ProseMirrorTransform } from '@atlaskit/editor-prosemirror/transform';
4
4
  import type { CollabEditPlugin } from '../collabEditPluginType';
5
5
  declare class LockableRebaseable {
6
- readonly step: LockableProseMirrorStep;
6
+ readonly step: ProseMirrorStep;
7
7
  readonly inverted: ProseMirrorStep;
8
8
  readonly origin: ProseMirrorTransform;
9
- constructor(step: LockableProseMirrorStep, inverted: ProseMirrorStep, origin: ProseMirrorTransform);
10
- }
11
- declare abstract class LockableProseMirrorStep extends ProseMirrorStep {
12
- lockStep?: () => void;
13
- isLocked?: () => boolean;
9
+ constructor(step: ProseMirrorStep, inverted: ProseMirrorStep, origin: ProseMirrorTransform);
14
10
  }
15
11
  /**
16
12
  * Merge a set of steps together to reduce the total number of steps stored in memory.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-collab-edit",
3
- "version": "3.0.0",
3
+ "version": "3.1.1",
4
4
  "description": "Collab Edit plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -33,14 +33,14 @@
33
33
  "dependencies": {
34
34
  "@atlaskit/adf-schema": "^47.2.1",
35
35
  "@atlaskit/custom-steps": "^0.10.0",
36
- "@atlaskit/editor-common": "^100.0.0",
36
+ "@atlaskit/editor-common": "^100.4.0",
37
37
  "@atlaskit/editor-json-transformer": "^8.23.0",
38
38
  "@atlaskit/editor-plugin-analytics": "2.0.0",
39
39
  "@atlaskit/editor-plugin-connectivity": "^2.0.0",
40
40
  "@atlaskit/editor-plugin-editor-viewmode": "^3.0.0",
41
41
  "@atlaskit/editor-plugin-feature-flags": "^1.3.0",
42
42
  "@atlaskit/editor-prosemirror": "7.0.0",
43
- "@atlaskit/editor-shared-styles": "^3.3.0",
43
+ "@atlaskit/editor-shared-styles": "^3.4.0",
44
44
  "@atlaskit/platform-feature-flags": "^1.1.0",
45
45
  "@atlaskit/prosemirror-collab": "^0.14.0",
46
46
  "@babel/runtime": "^7.0.0",
@@ -53,7 +53,7 @@
53
53
  "devDependencies": {
54
54
  "@af/integration-testing": "*",
55
55
  "@af/visual-regression": "*",
56
- "@atlaskit/editor-plugin-mentions": "^3.0.0",
56
+ "@atlaskit/editor-plugin-mentions": "^4.0.0",
57
57
  "@atlaskit/editor-plugin-text-formatting": "^2.0.0",
58
58
  "@atlaskit/editor-plugin-type-ahead": "^2.0.0",
59
59
  "@atlaskit/editor-plugin-unsupported-content": "^2.0.0",