@atlaskit/editor-plugin-collab-edit 23.0.9 → 24.0.0
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 +15 -0
- package/dist/cjs/collabEditPlugin.js +10 -5
- package/dist/cjs/pm-plugins/track-last-organic-change.js +22 -6
- package/dist/es2019/collabEditPlugin.js +7 -0
- package/dist/es2019/pm-plugins/track-last-organic-change.js +15 -0
- package/dist/esm/collabEditPlugin.js +10 -5
- package/dist/esm/pm-plugins/track-last-organic-change.js +21 -6
- package/dist/types/types/index.d.ts +2 -0
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-collab-edit
|
|
2
2
|
|
|
3
|
+
## 24.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`24d07fc254d9d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/24d07fc254d9d) -
|
|
8
|
+
Expose a monotonic count of direct local human body edits, excluding remote, agent, and
|
|
9
|
+
comment-only transactions, so draft sync can attribute contributors without changing content
|
|
10
|
+
syncing.
|
|
11
|
+
|
|
12
|
+
Enabled behind `confluence_ncs_step_diffing_version_history`.
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
|
|
3
18
|
## 23.0.9
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.collabEditPlugin = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
12
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
13
13
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
@@ -120,9 +120,12 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
|
|
|
120
120
|
return {
|
|
121
121
|
name: 'collabEdit',
|
|
122
122
|
getSharedState: function getSharedState(state) {
|
|
123
|
+
var _lastOrganicChangeSta;
|
|
123
124
|
if (!state) {
|
|
124
125
|
return {
|
|
125
|
-
initialised: {
|
|
126
|
+
initialised: _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
|
|
127
|
+
localHumanBodyChangeCount: 0
|
|
128
|
+
}), {}, {
|
|
126
129
|
collabInitialisedAt: null,
|
|
127
130
|
firstChangeAfterInitAt: null,
|
|
128
131
|
firstContentBodyChangeAfterInitAt: null,
|
|
@@ -130,7 +133,7 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
|
|
|
130
133
|
lastRemoteOrganicChangeAt: null,
|
|
131
134
|
lastLocalOrganicBodyChangeAt: null,
|
|
132
135
|
lastRemoteOrganicBodyChangeAt: null
|
|
133
|
-
},
|
|
136
|
+
}),
|
|
134
137
|
activeParticipants: undefined,
|
|
135
138
|
sessionId: undefined,
|
|
136
139
|
lastReconnectionConflictMetadata: undefined
|
|
@@ -143,7 +146,9 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
|
|
|
143
146
|
return {
|
|
144
147
|
activeParticipants: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.activeParticipants,
|
|
145
148
|
sessionId: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.sessionId,
|
|
146
|
-
initialised: {
|
|
149
|
+
initialised: _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
|
|
150
|
+
localHumanBodyChangeCount: (_lastOrganicChangeSta = lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.localHumanBodyChangeCount) !== null && _lastOrganicChangeSta !== void 0 ? _lastOrganicChangeSta : 0
|
|
151
|
+
}), {}, {
|
|
147
152
|
collabInitialisedAt: (metadata === null || metadata === void 0 ? void 0 : metadata.collabInitialisedAt) || null,
|
|
148
153
|
firstChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstChangeAfterInitAt) || null,
|
|
149
154
|
firstContentBodyChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstContentBodyChangeAfterInitAt) || null,
|
|
@@ -151,7 +156,7 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
|
|
|
151
156
|
lastRemoteOrganicChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicChangeAt) || null,
|
|
152
157
|
lastLocalOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastLocalOrganicBodyChangeAt) || null,
|
|
153
158
|
lastRemoteOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicBodyChangeAt) || null
|
|
154
|
-
},
|
|
159
|
+
}),
|
|
155
160
|
lastReconnectionConflictMetadata: lastRemoteConflict
|
|
156
161
|
};
|
|
157
162
|
},
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.trackLastOrganicChangePluginKey = exports.createPlugin = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
9
|
var _collab = require("@atlaskit/editor-common/collab");
|
|
8
10
|
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
11
|
+
var _transactionAgentAttribution = require("@atlaskit/editor-common/transaction-agent-attribution");
|
|
9
12
|
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
10
13
|
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
14
|
+
var _fg = require("@atlaskit/platform-feature-flags/fg");
|
|
11
15
|
var _utils = require("./utils");
|
|
16
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
18
|
var trackLastOrganicChangePluginKey = exports.trackLastOrganicChangePluginKey = new _state.PluginKey('collabTrackLastOrganicChangePlugin');
|
|
13
19
|
var createPlugin = exports.createPlugin = function createPlugin() {
|
|
14
20
|
return new _safePlugin.SafePlugin({
|
|
15
21
|
key: trackLastOrganicChangePluginKey,
|
|
16
22
|
state: {
|
|
17
23
|
init: function init() {
|
|
18
|
-
return {
|
|
24
|
+
return _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
|
|
25
|
+
localHumanBodyChangeCount: 0
|
|
26
|
+
}), {}, {
|
|
19
27
|
lastLocalOrganicChangeAt: null,
|
|
20
28
|
lastRemoteOrganicChangeAt: null,
|
|
21
29
|
lastLocalOrganicBodyChangeAt: null,
|
|
22
30
|
lastRemoteOrganicBodyChangeAt: null
|
|
23
|
-
};
|
|
31
|
+
});
|
|
24
32
|
},
|
|
25
33
|
apply: function apply(transaction, prevPluginState) {
|
|
26
34
|
if (Boolean(transaction.getMeta('appendedTransaction'))) {
|
|
@@ -41,20 +49,28 @@ var createPlugin = exports.createPlugin = function createPlugin() {
|
|
|
41
49
|
return prevPluginState;
|
|
42
50
|
}
|
|
43
51
|
if ((0, _utils.isOrganicChange)(transaction)) {
|
|
52
|
+
var _prevPluginState$loca;
|
|
44
53
|
if (isRemote) {
|
|
45
|
-
return {
|
|
54
|
+
return _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
|
|
55
|
+
localHumanBodyChangeCount: prevPluginState.localHumanBodyChangeCount
|
|
56
|
+
}), {}, {
|
|
46
57
|
lastLocalOrganicChangeAt: prevPluginState.lastLocalOrganicChangeAt,
|
|
47
58
|
lastRemoteOrganicChangeAt: Date.now(),
|
|
48
59
|
lastLocalOrganicBodyChangeAt: prevPluginState.lastLocalOrganicBodyChangeAt,
|
|
49
60
|
lastRemoteOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastRemoteOrganicBodyChangeAt : Date.now()
|
|
50
|
-
};
|
|
61
|
+
});
|
|
51
62
|
}
|
|
52
|
-
|
|
63
|
+
// Agent transactions can be local (frontend streaming) or remote (NCS).
|
|
64
|
+
// Keep organic-change tracking intact for saving, but track human attribution separately.
|
|
65
|
+
var isAgentChange = (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && Boolean(transaction.getMeta(_transactionAgentAttribution.AGENT_ATTRIBUTION_META));
|
|
66
|
+
return _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
|
|
67
|
+
localHumanBodyChangeCount: ((_prevPluginState$loca = prevPluginState.localHumanBodyChangeCount) !== null && _prevPluginState$loca !== void 0 ? _prevPluginState$loca : 0) + (isAnnotationStep || isAgentChange ? 0 : 1)
|
|
68
|
+
}), {}, {
|
|
53
69
|
lastLocalOrganicChangeAt: Date.now(),
|
|
54
70
|
lastRemoteOrganicChangeAt: prevPluginState.lastRemoteOrganicChangeAt,
|
|
55
71
|
lastLocalOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastLocalOrganicBodyChangeAt : Date.now(),
|
|
56
72
|
lastRemoteOrganicBodyChangeAt: prevPluginState.lastRemoteOrganicBodyChangeAt
|
|
57
|
-
};
|
|
73
|
+
});
|
|
58
74
|
}
|
|
59
75
|
return prevPluginState;
|
|
60
76
|
}
|
|
@@ -81,9 +81,13 @@ export const collabEditPlugin = ({
|
|
|
81
81
|
return {
|
|
82
82
|
name: 'collabEdit',
|
|
83
83
|
getSharedState(state) {
|
|
84
|
+
var _lastOrganicChangeSta;
|
|
84
85
|
if (!state) {
|
|
85
86
|
return {
|
|
86
87
|
initialised: {
|
|
88
|
+
...(fg('confluence_ncs_step_diffing_version_history') && {
|
|
89
|
+
localHumanBodyChangeCount: 0
|
|
90
|
+
}),
|
|
87
91
|
collabInitialisedAt: null,
|
|
88
92
|
firstChangeAfterInitAt: null,
|
|
89
93
|
firstContentBodyChangeAfterInitAt: null,
|
|
@@ -105,6 +109,9 @@ export const collabEditPlugin = ({
|
|
|
105
109
|
activeParticipants: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.activeParticipants,
|
|
106
110
|
sessionId: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.sessionId,
|
|
107
111
|
initialised: {
|
|
112
|
+
...(fg('confluence_ncs_step_diffing_version_history') && {
|
|
113
|
+
localHumanBodyChangeCount: (_lastOrganicChangeSta = lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.localHumanBodyChangeCount) !== null && _lastOrganicChangeSta !== void 0 ? _lastOrganicChangeSta : 0
|
|
114
|
+
}),
|
|
108
115
|
collabInitialisedAt: (metadata === null || metadata === void 0 ? void 0 : metadata.collabInitialisedAt) || null,
|
|
109
116
|
firstChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstChangeAfterInitAt) || null,
|
|
110
117
|
firstContentBodyChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstContentBodyChangeAfterInitAt) || null,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { isDirtyTransaction } from '@atlaskit/editor-common/collab';
|
|
2
2
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
3
|
+
import { AGENT_ATTRIBUTION_META } from '@atlaskit/editor-common/transaction-agent-attribution';
|
|
3
4
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
4
5
|
import { AddMarkStep, RemoveMarkStep } from '@atlaskit/editor-prosemirror/transform';
|
|
6
|
+
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
5
7
|
import { isOrganicChange } from './utils';
|
|
6
8
|
export const trackLastOrganicChangePluginKey = new PluginKey('collabTrackLastOrganicChangePlugin');
|
|
7
9
|
export const createPlugin = () => {
|
|
@@ -10,6 +12,9 @@ export const createPlugin = () => {
|
|
|
10
12
|
state: {
|
|
11
13
|
init() {
|
|
12
14
|
return {
|
|
15
|
+
...(fg('confluence_ncs_step_diffing_version_history') && {
|
|
16
|
+
localHumanBodyChangeCount: 0
|
|
17
|
+
}),
|
|
13
18
|
lastLocalOrganicChangeAt: null,
|
|
14
19
|
lastRemoteOrganicChangeAt: null,
|
|
15
20
|
lastLocalOrganicBodyChangeAt: null,
|
|
@@ -35,15 +40,25 @@ export const createPlugin = () => {
|
|
|
35
40
|
return prevPluginState;
|
|
36
41
|
}
|
|
37
42
|
if (isOrganicChange(transaction)) {
|
|
43
|
+
var _prevPluginState$loca;
|
|
38
44
|
if (isRemote) {
|
|
39
45
|
return {
|
|
46
|
+
...(fg('confluence_ncs_step_diffing_version_history') && {
|
|
47
|
+
localHumanBodyChangeCount: prevPluginState.localHumanBodyChangeCount
|
|
48
|
+
}),
|
|
40
49
|
lastLocalOrganicChangeAt: prevPluginState.lastLocalOrganicChangeAt,
|
|
41
50
|
lastRemoteOrganicChangeAt: Date.now(),
|
|
42
51
|
lastLocalOrganicBodyChangeAt: prevPluginState.lastLocalOrganicBodyChangeAt,
|
|
43
52
|
lastRemoteOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastRemoteOrganicBodyChangeAt : Date.now()
|
|
44
53
|
};
|
|
45
54
|
}
|
|
55
|
+
// Agent transactions can be local (frontend streaming) or remote (NCS).
|
|
56
|
+
// Keep organic-change tracking intact for saving, but track human attribution separately.
|
|
57
|
+
const isAgentChange = fg('confluence_ncs_step_diffing_version_history') && Boolean(transaction.getMeta(AGENT_ATTRIBUTION_META));
|
|
46
58
|
return {
|
|
59
|
+
...(fg('confluence_ncs_step_diffing_version_history') && {
|
|
60
|
+
localHumanBodyChangeCount: ((_prevPluginState$loca = prevPluginState.localHumanBodyChangeCount) !== null && _prevPluginState$loca !== void 0 ? _prevPluginState$loca : 0) + (isAnnotationStep || isAgentChange ? 0 : 1)
|
|
61
|
+
}),
|
|
47
62
|
lastLocalOrganicChangeAt: Date.now(),
|
|
48
63
|
lastRemoteOrganicChangeAt: prevPluginState.lastRemoteOrganicChangeAt,
|
|
49
64
|
lastLocalOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastLocalOrganicBodyChangeAt : Date.now(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
1
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
3
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
4
4
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
5
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -113,9 +113,12 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
|
|
|
113
113
|
return {
|
|
114
114
|
name: 'collabEdit',
|
|
115
115
|
getSharedState: function getSharedState(state) {
|
|
116
|
+
var _lastOrganicChangeSta;
|
|
116
117
|
if (!state) {
|
|
117
118
|
return {
|
|
118
|
-
initialised: {
|
|
119
|
+
initialised: _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
|
|
120
|
+
localHumanBodyChangeCount: 0
|
|
121
|
+
}), {}, {
|
|
119
122
|
collabInitialisedAt: null,
|
|
120
123
|
firstChangeAfterInitAt: null,
|
|
121
124
|
firstContentBodyChangeAfterInitAt: null,
|
|
@@ -123,7 +126,7 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
|
|
|
123
126
|
lastRemoteOrganicChangeAt: null,
|
|
124
127
|
lastLocalOrganicBodyChangeAt: null,
|
|
125
128
|
lastRemoteOrganicBodyChangeAt: null
|
|
126
|
-
},
|
|
129
|
+
}),
|
|
127
130
|
activeParticipants: undefined,
|
|
128
131
|
sessionId: undefined,
|
|
129
132
|
lastReconnectionConflictMetadata: undefined
|
|
@@ -136,7 +139,9 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
|
|
|
136
139
|
return {
|
|
137
140
|
activeParticipants: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.activeParticipants,
|
|
138
141
|
sessionId: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.sessionId,
|
|
139
|
-
initialised: {
|
|
142
|
+
initialised: _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
|
|
143
|
+
localHumanBodyChangeCount: (_lastOrganicChangeSta = lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.localHumanBodyChangeCount) !== null && _lastOrganicChangeSta !== void 0 ? _lastOrganicChangeSta : 0
|
|
144
|
+
}), {}, {
|
|
140
145
|
collabInitialisedAt: (metadata === null || metadata === void 0 ? void 0 : metadata.collabInitialisedAt) || null,
|
|
141
146
|
firstChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstChangeAfterInitAt) || null,
|
|
142
147
|
firstContentBodyChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstContentBodyChangeAfterInitAt) || null,
|
|
@@ -144,7 +149,7 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
|
|
|
144
149
|
lastRemoteOrganicChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicChangeAt) || null,
|
|
145
150
|
lastLocalOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastLocalOrganicBodyChangeAt) || null,
|
|
146
151
|
lastRemoteOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicBodyChangeAt) || null
|
|
147
|
-
},
|
|
152
|
+
}),
|
|
148
153
|
lastReconnectionConflictMetadata: lastRemoteConflict
|
|
149
154
|
};
|
|
150
155
|
},
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1
4
|
import { isDirtyTransaction } from '@atlaskit/editor-common/collab';
|
|
2
5
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
6
|
+
import { AGENT_ATTRIBUTION_META } from '@atlaskit/editor-common/transaction-agent-attribution';
|
|
3
7
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
4
8
|
import { AddMarkStep, RemoveMarkStep } from '@atlaskit/editor-prosemirror/transform';
|
|
9
|
+
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
5
10
|
import { isOrganicChange } from './utils';
|
|
6
11
|
export var trackLastOrganicChangePluginKey = new PluginKey('collabTrackLastOrganicChangePlugin');
|
|
7
12
|
export var createPlugin = function createPlugin() {
|
|
@@ -9,12 +14,14 @@ export var createPlugin = function createPlugin() {
|
|
|
9
14
|
key: trackLastOrganicChangePluginKey,
|
|
10
15
|
state: {
|
|
11
16
|
init: function init() {
|
|
12
|
-
return {
|
|
17
|
+
return _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
|
|
18
|
+
localHumanBodyChangeCount: 0
|
|
19
|
+
}), {}, {
|
|
13
20
|
lastLocalOrganicChangeAt: null,
|
|
14
21
|
lastRemoteOrganicChangeAt: null,
|
|
15
22
|
lastLocalOrganicBodyChangeAt: null,
|
|
16
23
|
lastRemoteOrganicBodyChangeAt: null
|
|
17
|
-
};
|
|
24
|
+
});
|
|
18
25
|
},
|
|
19
26
|
apply: function apply(transaction, prevPluginState) {
|
|
20
27
|
if (Boolean(transaction.getMeta('appendedTransaction'))) {
|
|
@@ -35,20 +42,28 @@ export var createPlugin = function createPlugin() {
|
|
|
35
42
|
return prevPluginState;
|
|
36
43
|
}
|
|
37
44
|
if (isOrganicChange(transaction)) {
|
|
45
|
+
var _prevPluginState$loca;
|
|
38
46
|
if (isRemote) {
|
|
39
|
-
return {
|
|
47
|
+
return _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
|
|
48
|
+
localHumanBodyChangeCount: prevPluginState.localHumanBodyChangeCount
|
|
49
|
+
}), {}, {
|
|
40
50
|
lastLocalOrganicChangeAt: prevPluginState.lastLocalOrganicChangeAt,
|
|
41
51
|
lastRemoteOrganicChangeAt: Date.now(),
|
|
42
52
|
lastLocalOrganicBodyChangeAt: prevPluginState.lastLocalOrganicBodyChangeAt,
|
|
43
53
|
lastRemoteOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastRemoteOrganicBodyChangeAt : Date.now()
|
|
44
|
-
};
|
|
54
|
+
});
|
|
45
55
|
}
|
|
46
|
-
|
|
56
|
+
// Agent transactions can be local (frontend streaming) or remote (NCS).
|
|
57
|
+
// Keep organic-change tracking intact for saving, but track human attribution separately.
|
|
58
|
+
var isAgentChange = fg('confluence_ncs_step_diffing_version_history') && Boolean(transaction.getMeta(AGENT_ATTRIBUTION_META));
|
|
59
|
+
return _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
|
|
60
|
+
localHumanBodyChangeCount: ((_prevPluginState$loca = prevPluginState.localHumanBodyChangeCount) !== null && _prevPluginState$loca !== void 0 ? _prevPluginState$loca : 0) + (isAnnotationStep || isAgentChange ? 0 : 1)
|
|
61
|
+
}), {}, {
|
|
47
62
|
lastLocalOrganicChangeAt: Date.now(),
|
|
48
63
|
lastRemoteOrganicChangeAt: prevPluginState.lastRemoteOrganicChangeAt,
|
|
49
64
|
lastLocalOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastLocalOrganicBodyChangeAt : Date.now(),
|
|
50
65
|
lastRemoteOrganicBodyChangeAt: prevPluginState.lastRemoteOrganicBodyChangeAt
|
|
51
|
-
};
|
|
66
|
+
});
|
|
52
67
|
}
|
|
53
68
|
return prevPluginState;
|
|
54
69
|
}
|
|
@@ -23,6 +23,8 @@ export type LastOrganicChangeMetadata = {
|
|
|
23
23
|
lastLocalOrganicChangeAt: null | number;
|
|
24
24
|
lastRemoteOrganicBodyChangeAt: null | number;
|
|
25
25
|
lastRemoteOrganicChangeAt: null | number;
|
|
26
|
+
/** Monotonic count of direct local human body edits, excluding agents and comments. */
|
|
27
|
+
localHumanBodyChangeCount?: number;
|
|
26
28
|
};
|
|
27
29
|
export type TrackSpammingStepsMetadata = {
|
|
28
30
|
recentTransactionsTimestemps: Map<string, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-collab-edit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "24.0.0",
|
|
4
4
|
"description": "Collab Edit plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,22 +22,22 @@
|
|
|
22
22
|
"@atlaskit/adf-schema": "^57.6.0",
|
|
23
23
|
"@atlaskit/custom-steps": "^1.1.0",
|
|
24
24
|
"@atlaskit/editor-json-transformer": "^10.0.0",
|
|
25
|
-
"@atlaskit/editor-plugin-analytics": "^
|
|
26
|
-
"@atlaskit/editor-plugin-connectivity": "^
|
|
27
|
-
"@atlaskit/editor-plugin-editor-viewmode": "^
|
|
28
|
-
"@atlaskit/editor-plugin-feature-flags": "^
|
|
25
|
+
"@atlaskit/editor-plugin-analytics": "^23.0.0",
|
|
26
|
+
"@atlaskit/editor-plugin-connectivity": "^23.0.0",
|
|
27
|
+
"@atlaskit/editor-plugin-editor-viewmode": "^25.0.0",
|
|
28
|
+
"@atlaskit/editor-plugin-feature-flags": "^22.0.0",
|
|
29
29
|
"@atlaskit/editor-prosemirror": "^9.0.0",
|
|
30
30
|
"@atlaskit/editor-shared-styles": "^4.3.0",
|
|
31
31
|
"@atlaskit/platform-feature-experiments": "^0.3.0",
|
|
32
32
|
"@atlaskit/platform-feature-flags": "^2.2.0",
|
|
33
33
|
"@atlaskit/prosemirror-collab": "^1.1.0",
|
|
34
|
-
"@atlaskit/tmp-editor-statsig": "^
|
|
34
|
+
"@atlaskit/tmp-editor-statsig": "^219.0.0",
|
|
35
35
|
"@atlaskit/tokens": "^20.1.0",
|
|
36
36
|
"@babel/runtime": "^7.0.0",
|
|
37
37
|
"memoize-one": "^6.0.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@atlaskit/editor-common": "^
|
|
40
|
+
"@atlaskit/editor-common": "^127.0.0",
|
|
41
41
|
"react": "^18.2.0 || ^19.2.0",
|
|
42
42
|
"react-dom": "^18.2.0 || ^19.2.0"
|
|
43
43
|
},
|