@atlaskit/editor-plugin-synced-block 5.4.5 → 5.4.7
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 +18 -0
- package/dist/cjs/nodeviews/syncedBlock.js +15 -0
- package/dist/cjs/pm-plugins/main.js +38 -67
- package/dist/cjs/pm-plugins/utils/track-sync-blocks.js +24 -66
- package/dist/cjs/pm-plugins/utils/utils.js +20 -10
- package/dist/cjs/syncedBlockPlugin.js +1 -3
- package/dist/cjs/types/index.js +1 -0
- package/dist/cjs/ui/Flag.js +5 -1
- package/dist/cjs/ui/SyncedLocationDropdown.js +11 -20
- package/dist/es2019/nodeviews/syncedBlock.js +11 -0
- package/dist/es2019/pm-plugins/main.js +39 -68
- package/dist/es2019/pm-plugins/utils/track-sync-blocks.js +25 -58
- package/dist/es2019/pm-plugins/utils/utils.js +18 -8
- package/dist/es2019/syncedBlockPlugin.js +2 -4
- package/dist/es2019/types/index.js +1 -0
- package/dist/es2019/ui/Flag.js +5 -0
- package/dist/es2019/ui/SyncedLocationDropdown.js +12 -21
- package/dist/esm/nodeviews/syncedBlock.js +15 -0
- package/dist/esm/pm-plugins/main.js +39 -68
- package/dist/esm/pm-plugins/utils/track-sync-blocks.js +24 -66
- package/dist/esm/pm-plugins/utils/utils.js +19 -9
- package/dist/esm/syncedBlockPlugin.js +2 -4
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/ui/Flag.js +5 -1
- package/dist/esm/ui/SyncedLocationDropdown.js +11 -20
- package/dist/types/nodeviews/syncedBlock.d.ts +3 -1
- package/dist/types/pm-plugins/utils/utils.d.ts +1 -1
- package/dist/types/types/index.d.ts +6 -5
- package/dist/types-ts4.5/nodeviews/syncedBlock.d.ts +3 -1
- package/dist/types-ts4.5/pm-plugins/utils/utils.d.ts +1 -1
- package/dist/types-ts4.5/types/index.d.ts +6 -5
- package/package.json +3 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-synced-block
|
|
2
2
|
|
|
3
|
+
## 5.4.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`dc717554783a6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/dc717554783a6) -
|
|
8
|
+
[ux] EDITOR-5556 show warning flag when extensions are added inside synced blocks
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
11
|
+
## 5.4.6
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`2e6129d5b39bc`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2e6129d5b39bc) -
|
|
16
|
+
EDITOR-5529 clean up platform_synced_block_patch_3 and platform_synced_block_patch_4
|
|
17
|
+
- [`b853527230a60`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b853527230a60) -
|
|
18
|
+
[EDITOR-5520] Fix reference sync block shows old page data when transitioning between live pages
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
|
|
3
21
|
## 5.4.5
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -17,6 +17,7 @@ var _errorBoundary = require("@atlaskit/editor-common/error-boundary");
|
|
|
17
17
|
var _reactNodeView = _interopRequireDefault(require("@atlaskit/editor-common/react-node-view"));
|
|
18
18
|
var _syncBlock = require("@atlaskit/editor-common/sync-block");
|
|
19
19
|
var _editorSyncedBlockProvider = require("@atlaskit/editor-synced-block-provider");
|
|
20
|
+
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
20
21
|
var _editorCommands = require("../editor-commands");
|
|
21
22
|
var _SyncBlockRendererWrapper = require("../ui/SyncBlockRendererWrapper");
|
|
22
23
|
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)); }
|
|
@@ -40,6 +41,20 @@ var SyncBlock = exports.SyncBlock = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
40
41
|
domRef.classList.add(_syncBlock.SyncBlockSharedCssClassName.prefix);
|
|
41
42
|
return domRef;
|
|
42
43
|
}
|
|
44
|
+
}, {
|
|
45
|
+
key: "validUpdate",
|
|
46
|
+
value: function validUpdate(currentNode, newNode) {
|
|
47
|
+
// Only consider as the valid update if the localId and resourceId are the same
|
|
48
|
+
// This prevents PM reusing the same node view for different sync block node in live page transition
|
|
49
|
+
return currentNode.attrs.localId === newNode.attrs.localId && currentNode.attrs.resourceId === newNode.attrs.resourceId;
|
|
50
|
+
}
|
|
51
|
+
}, {
|
|
52
|
+
key: "update",
|
|
53
|
+
value: function update(node, decorations, innerDecorations) {
|
|
54
|
+
return _superPropGet(SyncBlock, "update", this, 3)([node, decorations, innerDecorations, (0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
55
|
+
exposure: true
|
|
56
|
+
}) ? this.validUpdate : undefined]);
|
|
57
|
+
}
|
|
43
58
|
}, {
|
|
44
59
|
key: "render",
|
|
45
60
|
value: function render(_ref) {
|
|
@@ -81,24 +81,23 @@ var showCopiedFlag = function showCopiedFlag(api) {
|
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
};
|
|
84
|
-
var
|
|
84
|
+
var showExtensionInSyncBlockWarningIfNeeded = function showExtensionInSyncBlockWarningIfNeeded(tr, state, api, extensionFlagShown) {
|
|
85
85
|
var _api$connectivity;
|
|
86
|
-
if (!(0, _platformFeatureFlags.fg)('platform_synced_block_patch_3')) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
86
|
if (!tr.docChanged || tr.getMeta('isRemote') || Boolean(tr.getMeta(_utils.pmHistoryPluginKey)) || (0, _editorPluginConnectivity.isOfflineMode)(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)) {
|
|
90
87
|
return;
|
|
91
88
|
}
|
|
92
|
-
var resourceId = (0, _utils2.
|
|
89
|
+
var resourceId = (0, _utils2.wasExtensionInsertedInBodiedSyncBlock)(tr, state);
|
|
93
90
|
// Only show the flag on the first instance per sync block (same as UNPUBLISHED_SYNC_BLOCK_PASTED)
|
|
94
|
-
if (resourceId && !
|
|
95
|
-
|
|
91
|
+
if (resourceId && !extensionFlagShown.has(resourceId)) {
|
|
92
|
+
extensionFlagShown.add(resourceId);
|
|
96
93
|
(0, _utils2.deferDispatch)(function () {
|
|
97
94
|
api === null || api === void 0 || api.core.actions.execute(function (_ref2) {
|
|
98
95
|
var tr = _ref2.tr;
|
|
99
96
|
return tr.setMeta(syncedBlockPluginKey, {
|
|
100
97
|
activeFlag: {
|
|
101
|
-
id:
|
|
98
|
+
id: (0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
99
|
+
exposure: true
|
|
100
|
+
}) ? _types.FLAG_ID.EXTENSION_IN_SYNC_BLOCK : _types.FLAG_ID.INLINE_EXTENSION_IN_SYNC_BLOCK
|
|
102
101
|
}
|
|
103
102
|
});
|
|
104
103
|
});
|
|
@@ -120,7 +119,7 @@ var filterTransactionOnline = function filterTransactionOnline(_ref3) {
|
|
|
120
119
|
confirmationTransactionRef = _ref3.confirmationTransactionRef,
|
|
121
120
|
bodiedSyncBlockRemoved = _ref3.bodiedSyncBlockRemoved,
|
|
122
121
|
bodiedSyncBlockAdded = _ref3.bodiedSyncBlockAdded,
|
|
123
|
-
|
|
122
|
+
extensionFlagShown = _ref3.extensionFlagShown;
|
|
124
123
|
var _trackSyncBlocks = (0, _trackSyncBlocks8.trackSyncBlocks)(function (node) {
|
|
125
124
|
return node.type.name === 'syncBlock';
|
|
126
125
|
}, tr, state),
|
|
@@ -140,31 +139,17 @@ var filterTransactionOnline = function filterTransactionOnline(_ref3) {
|
|
|
140
139
|
});
|
|
141
140
|
});
|
|
142
141
|
syncBlockAdded.forEach(function (syncBlock) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
});
|
|
155
|
-
} else {
|
|
156
|
-
var _api$analytics3;
|
|
157
|
-
api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 || (_api$analytics3 = _api$analytics3.actions) === null || _api$analytics3 === void 0 || _api$analytics3.fireAnalyticsEvent({
|
|
158
|
-
action: _analytics.ACTION.INSERTED,
|
|
159
|
-
actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
|
|
160
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
|
|
161
|
-
attributes: {
|
|
162
|
-
resourceId: syncBlock.attrs.resourceId,
|
|
163
|
-
blockInstanceId: syncBlock.attrs.localId
|
|
164
|
-
},
|
|
165
|
-
eventType: _analytics.EVENT_TYPE.OPERATIONAL
|
|
166
|
-
});
|
|
167
|
-
}
|
|
142
|
+
var _api$analytics2;
|
|
143
|
+
api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 || (_api$analytics2 = _api$analytics2.actions) === null || _api$analytics2 === void 0 || _api$analytics2.fireAnalyticsEvent({
|
|
144
|
+
action: _analytics.ACTION.INSERTED,
|
|
145
|
+
actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
|
|
146
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK,
|
|
147
|
+
attributes: {
|
|
148
|
+
resourceId: syncBlock.attrs.resourceId,
|
|
149
|
+
blockInstanceId: syncBlock.attrs.localId
|
|
150
|
+
},
|
|
151
|
+
eventType: _analytics.EVENT_TYPE.TRACK
|
|
152
|
+
});
|
|
168
153
|
});
|
|
169
154
|
if (bodiedSyncBlockRemoved.length > 0) {
|
|
170
155
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -181,7 +166,7 @@ var filterTransactionOnline = function filterTransactionOnline(_ref3) {
|
|
|
181
166
|
(0, _handleBodiedSyncBlockCreation.handleBodiedSyncBlockCreation)(bodiedSyncBlockAdded, state, api);
|
|
182
167
|
return true;
|
|
183
168
|
}
|
|
184
|
-
|
|
169
|
+
showExtensionInSyncBlockWarningIfNeeded(tr, state, api, extensionFlagShown);
|
|
185
170
|
return true;
|
|
186
171
|
};
|
|
187
172
|
var filterTransactionOffline = function filterTransactionOffline(_ref4) {
|
|
@@ -233,7 +218,7 @@ var SyncedBlockPluginContext = /*#__PURE__*/function () {
|
|
|
233
218
|
});
|
|
234
219
|
(0, _defineProperty2.default)(this, "_isCopyEvent", false);
|
|
235
220
|
(0, _defineProperty2.default)(this, "unpublishedFlagShown", new Set());
|
|
236
|
-
(0, _defineProperty2.default)(this, "
|
|
221
|
+
(0, _defineProperty2.default)(this, "extensionFlagShown", new Set());
|
|
237
222
|
}
|
|
238
223
|
return (0, _createClass2.default)(SyncedBlockPluginContext, [{
|
|
239
224
|
key: "isCopyEvent",
|
|
@@ -255,7 +240,7 @@ var SyncedBlockPluginContext = /*#__PURE__*/function () {
|
|
|
255
240
|
}]);
|
|
256
241
|
}();
|
|
257
242
|
var createPlugin = exports.createPlugin = function createPlugin(options, pmPluginFactoryParams, syncBlockStore, api) {
|
|
258
|
-
var _ctx$confirmationTran, _ctx$unpublishedFlagS, _ctx$
|
|
243
|
+
var _ctx$confirmationTran, _ctx$unpublishedFlagS, _ctx$extensionFlagSho;
|
|
259
244
|
var _ref6 = options || {},
|
|
260
245
|
_ref6$useLongPressSel = _ref6.useLongPressSelection,
|
|
261
246
|
useLongPressSelection = _ref6$useLongPressSel === void 0 ? false : _ref6$useLongPressSel;
|
|
@@ -265,7 +250,7 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
|
|
|
265
250
|
};
|
|
266
251
|
var isCopyEvent = false;
|
|
267
252
|
var unpublishedFlagShown = (_ctx$unpublishedFlagS = ctx === null || ctx === void 0 ? void 0 : ctx.unpublishedFlagShown) !== null && _ctx$unpublishedFlagS !== void 0 ? _ctx$unpublishedFlagS : new Set();
|
|
268
|
-
var
|
|
253
|
+
var extensionFlagShown = (_ctx$extensionFlagSho = ctx === null || ctx === void 0 ? void 0 : ctx.extensionFlagShown) !== null && _ctx$extensionFlagSho !== void 0 ? _ctx$extensionFlagSho : new Set();
|
|
269
254
|
|
|
270
255
|
// Set up callback to detect unpublished sync blocks when they're fetched
|
|
271
256
|
syncBlockStore.referenceManager.setOnUnpublishedSyncBlockDetected(function (resourceId) {
|
|
@@ -519,7 +504,7 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
|
|
|
519
504
|
confirmationTransactionRef: confirmationTransactionRef,
|
|
520
505
|
bodiedSyncBlockRemoved: bodiedSyncBlockRemoved,
|
|
521
506
|
bodiedSyncBlockAdded: bodiedSyncBlockAdded,
|
|
522
|
-
|
|
507
|
+
extensionFlagShown: extensionFlagShown
|
|
523
508
|
});
|
|
524
509
|
}
|
|
525
510
|
if (!isOffline) {
|
|
@@ -529,8 +514,8 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
|
|
|
529
514
|
_syncBlockRemoved = _trackSyncBlocks5.removed,
|
|
530
515
|
_syncBlockAdded = _trackSyncBlocks5.added;
|
|
531
516
|
_syncBlockRemoved.forEach(function (syncBlock) {
|
|
532
|
-
var _api$
|
|
533
|
-
api === null || api === void 0 || (_api$
|
|
517
|
+
var _api$analytics3;
|
|
518
|
+
api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 || (_api$analytics3 = _api$analytics3.actions) === null || _api$analytics3 === void 0 || _api$analytics3.fireAnalyticsEvent({
|
|
534
519
|
action: _analytics.ACTION.DELETED,
|
|
535
520
|
actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
|
|
536
521
|
actionSubjectId: _analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_DELETE,
|
|
@@ -542,31 +527,17 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
|
|
|
542
527
|
});
|
|
543
528
|
});
|
|
544
529
|
_syncBlockAdded.forEach(function (syncBlock) {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
});
|
|
557
|
-
} else {
|
|
558
|
-
var _api$analytics6;
|
|
559
|
-
api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 || (_api$analytics6 = _api$analytics6.actions) === null || _api$analytics6 === void 0 || _api$analytics6.fireAnalyticsEvent({
|
|
560
|
-
action: _analytics.ACTION.INSERTED,
|
|
561
|
-
actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
|
|
562
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
|
|
563
|
-
attributes: {
|
|
564
|
-
resourceId: syncBlock.attrs.resourceId,
|
|
565
|
-
blockInstanceId: syncBlock.attrs.localId
|
|
566
|
-
},
|
|
567
|
-
eventType: _analytics.EVENT_TYPE.OPERATIONAL
|
|
568
|
-
});
|
|
569
|
-
}
|
|
530
|
+
var _api$analytics4;
|
|
531
|
+
api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 || (_api$analytics4 = _api$analytics4.actions) === null || _api$analytics4 === void 0 || _api$analytics4.fireAnalyticsEvent({
|
|
532
|
+
action: _analytics.ACTION.INSERTED,
|
|
533
|
+
actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
|
|
534
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK,
|
|
535
|
+
attributes: {
|
|
536
|
+
resourceId: syncBlock.attrs.resourceId,
|
|
537
|
+
blockInstanceId: syncBlock.attrs.localId
|
|
538
|
+
},
|
|
539
|
+
eventType: _analytics.EVENT_TYPE.TRACK
|
|
540
|
+
});
|
|
570
541
|
});
|
|
571
542
|
if (bodiedSyncBlockRemoved.length > 0) {
|
|
572
543
|
confirmationTransactionRef.current = tr;
|
|
@@ -582,7 +553,7 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
|
|
|
582
553
|
(0, _handleBodiedSyncBlockCreation.handleBodiedSyncBlockCreation)(bodiedSyncBlockAdded, state, api);
|
|
583
554
|
return true;
|
|
584
555
|
}
|
|
585
|
-
|
|
556
|
+
showExtensionInSyncBlockWarningIfNeeded(tr, state, api, extensionFlagShown);
|
|
586
557
|
return true;
|
|
587
558
|
}
|
|
588
559
|
var _trackSyncBlocks6 = (0, _trackSyncBlocks8.trackSyncBlocks)(function (node) {
|
|
@@ -6,10 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.trackSyncBlocks = exports.hasEditInSyncBlock = void 0;
|
|
7
7
|
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
8
8
|
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
9
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
10
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
11
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
12
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
13
9
|
var trackSyncBlocks = exports.trackSyncBlocks = function trackSyncBlocks(predicate, tr, state) {
|
|
14
10
|
var removed = {};
|
|
15
11
|
var added = {};
|
|
@@ -26,10 +22,10 @@ var trackSyncBlocks = exports.trackSyncBlocks = function trackSyncBlocks(predica
|
|
|
26
22
|
});
|
|
27
23
|
|
|
28
24
|
// this is a quick check to see if any insertion/deletion of bodiedSyncBlock happened
|
|
29
|
-
var hasBodiedSyncBlockChanges = replaceSteps.some(function (step
|
|
25
|
+
var hasBodiedSyncBlockChanges = replaceSteps.some(function (step) {
|
|
30
26
|
var from = step.from,
|
|
31
27
|
to = step.to;
|
|
32
|
-
var docAtStep =
|
|
28
|
+
var docAtStep = tr.docs[tr.steps.indexOf(step)];
|
|
33
29
|
var hasChange = false;
|
|
34
30
|
if (from !== to) {
|
|
35
31
|
step.getMap().forEach(function (oldStart, oldEnd) {
|
|
@@ -109,70 +105,32 @@ var trackSyncBlocks = exports.trackSyncBlocks = function trackSyncBlocks(predica
|
|
|
109
105
|
*/
|
|
110
106
|
var hasEditInSyncBlock = exports.hasEditInSyncBlock = function hasEditInSyncBlock(tr, state) {
|
|
111
107
|
var bodiedSyncBlock = state.schema.nodes.bodiedSyncBlock;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
var positions = [];
|
|
108
|
+
for (var i = 0; i < tr.steps.length; i++) {
|
|
109
|
+
var _tr$docs;
|
|
110
|
+
var step = tr.steps[i];
|
|
111
|
+
var map = step.getMap();
|
|
112
|
+
var docAfterStep = (_tr$docs = tr.docs[i + 1]) !== null && _tr$docs !== void 0 ? _tr$docs : tr.doc;
|
|
113
|
+
var positions = [];
|
|
119
114
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
for (var _i = 0, _positions = positions; _i < _positions.length; _i++) {
|
|
132
|
-
var _pos = _positions[_i];
|
|
133
|
-
var newPos = map.map(_pos);
|
|
134
|
-
if (newPos >= 0 && newPos <= docAfterStep.content.size) {
|
|
135
|
-
if ((0, _utils.findParentNodeOfTypeClosestToPos)(docAfterStep.resolve(newPos), bodiedSyncBlock)) {
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
115
|
+
// Extract positions from steps dynamically based on applicable properties
|
|
116
|
+
if ('from' in step && typeof step.from === 'number' && 'to' in step && typeof step.to === 'number') {
|
|
117
|
+
var _ref = step,
|
|
118
|
+
from = _ref.from,
|
|
119
|
+
to = _ref.to;
|
|
120
|
+
positions.push(from, to);
|
|
121
|
+
} else if ('pos' in step && typeof step.pos === 'number') {
|
|
122
|
+
var _ref2 = step,
|
|
123
|
+
pos = _ref2.pos;
|
|
124
|
+
positions.push(pos);
|
|
140
125
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
var _map = _step2.getMap();
|
|
148
|
-
var doc = tr.doc;
|
|
149
|
-
var _positions2 = [];
|
|
150
|
-
|
|
151
|
-
// Extract positions from steps dynamically based on applicable properties
|
|
152
|
-
if ('from' in _step2 && typeof _step2.from === 'number' && 'to' in _step2 && typeof _step2.to === 'number') {
|
|
153
|
-
var _ref3 = _step2,
|
|
154
|
-
_from = _ref3.from,
|
|
155
|
-
_to = _ref3.to;
|
|
156
|
-
_positions2.push(_from, _to);
|
|
157
|
-
} else if ('pos' in _step2 && typeof _step2.pos === 'number') {
|
|
158
|
-
var _ref4 = _step2,
|
|
159
|
-
_pos2 = _ref4.pos;
|
|
160
|
-
_positions2.push(_pos2);
|
|
161
|
-
}
|
|
162
|
-
for (var _i2 = 0, _positions3 = _positions2; _i2 < _positions3.length; _i2++) {
|
|
163
|
-
var _pos3 = _positions3[_i2];
|
|
164
|
-
var _newPos = _map.map(_pos3);
|
|
165
|
-
if (_newPos >= 0 && _newPos <= doc.content.size) {
|
|
166
|
-
if ((0, _utils.findParentNodeOfTypeClosestToPos)(doc.resolve(_newPos), bodiedSyncBlock)) {
|
|
167
|
-
return true;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
126
|
+
for (var _i = 0, _positions = positions; _i < _positions.length; _i++) {
|
|
127
|
+
var _pos = _positions[_i];
|
|
128
|
+
var newPos = map.map(_pos);
|
|
129
|
+
if (newPos >= 0 && newPos <= docAfterStep.content.size) {
|
|
130
|
+
if ((0, _utils.findParentNodeOfTypeClosestToPos)(docAfterStep.resolve(newPos), bodiedSyncBlock)) {
|
|
131
|
+
return true;
|
|
170
132
|
}
|
|
171
133
|
}
|
|
172
|
-
} catch (err) {
|
|
173
|
-
_iterator.e(err);
|
|
174
|
-
} finally {
|
|
175
|
-
_iterator.f();
|
|
176
134
|
}
|
|
177
135
|
}
|
|
178
136
|
return false;
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.wasExtensionInsertedInBodiedSyncBlock = exports.sliceFullyContainsNode = exports.isBodiedSyncBlockNode = exports.findSyncBlockOrBodiedSyncBlock = exports.findSyncBlock = exports.findBodiedSyncBlock = exports.deferDispatch = exports.canBeConvertedToSyncBlock = void 0;
|
|
7
7
|
var _selection = require("@atlaskit/editor-common/selection");
|
|
8
8
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
9
9
|
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
10
10
|
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
11
11
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
|
+
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
12
13
|
/**
|
|
13
14
|
* Defers a callback to the next microtask (when gated) or next macrotask via setTimeout(0).
|
|
14
15
|
* Used to avoid re-entrant ProseMirror dispatch cycles.
|
|
@@ -97,31 +98,36 @@ var sliceFullyContainsNode = exports.sliceFullyContainsNode = function sliceFull
|
|
|
97
98
|
}
|
|
98
99
|
return true;
|
|
99
100
|
};
|
|
100
|
-
|
|
101
|
+
|
|
102
|
+
// even though extension and bodiedExtension are explicitly not allowed by the schema, they can still be inserted nested inside other nodes e.g. layouts
|
|
103
|
+
var EXTENSION_NODES = new Set(['inlineExtension', 'extension', 'bodiedExtension']);
|
|
104
|
+
var _fragmentContainsExtension = function fragmentContainsExtension(fragment) {
|
|
101
105
|
var found = false;
|
|
102
106
|
fragment.forEach(function (node) {
|
|
103
107
|
if (found) {
|
|
104
108
|
return;
|
|
105
109
|
}
|
|
106
|
-
if (
|
|
110
|
+
if ((0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
111
|
+
exposure: true
|
|
112
|
+
}) ? EXTENSION_NODES.has(node.type.name) : node.type.name === 'inlineExtension') {
|
|
107
113
|
found = true;
|
|
108
114
|
} else if (node.content.size) {
|
|
109
|
-
if (
|
|
115
|
+
if (_fragmentContainsExtension(node.content)) {
|
|
110
116
|
found = true;
|
|
111
117
|
}
|
|
112
118
|
}
|
|
113
119
|
});
|
|
114
120
|
return found;
|
|
115
121
|
};
|
|
116
|
-
var
|
|
117
|
-
return
|
|
122
|
+
var sliceContainsExtension = function sliceContainsExtension(slice) {
|
|
123
|
+
return _fragmentContainsExtension(slice.content);
|
|
118
124
|
};
|
|
119
125
|
|
|
120
126
|
/**
|
|
121
127
|
* Returns the resourceId of the bodied sync block where an inline extension was inserted, or undefined.
|
|
122
128
|
* Used to show a warning flag only on the first instance per sync block.
|
|
123
129
|
*/
|
|
124
|
-
var
|
|
130
|
+
var wasExtensionInsertedInBodiedSyncBlock = exports.wasExtensionInsertedInBodiedSyncBlock = function wasExtensionInsertedInBodiedSyncBlock(tr, state) {
|
|
125
131
|
if (!tr.docChanged || tr.getMeta('isRemote')) {
|
|
126
132
|
return undefined;
|
|
127
133
|
}
|
|
@@ -141,7 +147,7 @@ var wasInlineExtensionInsertedInBodiedSyncBlock = exports.wasInlineExtensionInse
|
|
|
141
147
|
continue;
|
|
142
148
|
}
|
|
143
149
|
var replaceStep = step;
|
|
144
|
-
if (!
|
|
150
|
+
if (!sliceContainsExtension(replaceStep.slice)) {
|
|
145
151
|
continue;
|
|
146
152
|
}
|
|
147
153
|
var docAfterStep = (_docs = docs[i + 1]) !== null && _docs !== void 0 ? _docs : tr.doc;
|
|
@@ -164,13 +170,17 @@ var wasInlineExtensionInsertedInBodiedSyncBlock = exports.wasInlineExtensionInse
|
|
|
164
170
|
if (resourceId !== undefined) {
|
|
165
171
|
return false;
|
|
166
172
|
}
|
|
167
|
-
if (
|
|
173
|
+
if ((0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
174
|
+
exposure: true
|
|
175
|
+
}) ? EXTENSION_NODES.has(node.type.name) : node.type.name === 'inlineExtension') {
|
|
168
176
|
var _$pos = tr.doc.resolve(pos);
|
|
169
177
|
var _parent = (0, _utils.findParentNodeOfTypeClosestToPos)(_$pos, bodiedSyncBlock);
|
|
170
178
|
if (_parent !== null && _parent !== void 0 && _parent.node.attrs.resourceId) {
|
|
171
179
|
var mappedPos = tr.mapping.invert().map(pos);
|
|
172
180
|
var nodeBefore = state.doc.nodeAt(mappedPos);
|
|
173
|
-
if (!nodeBefore ||
|
|
181
|
+
if (!nodeBefore || ((0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
182
|
+
exposure: true
|
|
183
|
+
}) ? EXTENSION_NODES.has(nodeBefore.type.name) : nodeBefore.type.name !== 'inlineExtension')) {
|
|
174
184
|
resourceId = _parent.node.attrs.resourceId;
|
|
175
185
|
return false;
|
|
176
186
|
}
|
|
@@ -39,9 +39,7 @@ var syncedBlockPlugin = exports.syncedBlockPlugin = function syncedBlockPlugin(_
|
|
|
39
39
|
node: _adfSchema.syncBlock
|
|
40
40
|
}, {
|
|
41
41
|
name: 'bodiedSyncBlock',
|
|
42
|
-
node:
|
|
43
|
-
// eslint-disable-next-line @atlaskit/platform/no-preconditioning
|
|
44
|
-
(0, _platformFeatureFlags.fg)('platform_synced_block_patch_3') && !(0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
42
|
+
node: !(0, _experiments.editorExperiment)('platform_synced_block_patch_6', true, {
|
|
45
43
|
exposure: true
|
|
46
44
|
}) ?
|
|
47
45
|
// delete bodiedSyncBlockNodeWithToDOMFixed when cleaning up platform_synced_block_patch_6
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -13,6 +13,7 @@ var FLAG_ID = exports.FLAG_ID = /*#__PURE__*/function (FLAG_ID) {
|
|
|
13
13
|
FLAG_ID["UNPUBLISHED_SYNC_BLOCK_PASTED"] = "unpublished-sync-block-pasted";
|
|
14
14
|
FLAG_ID["CANNOT_CREATE_SYNC_BLOCK"] = "cannot-create-sync-block";
|
|
15
15
|
FLAG_ID["INLINE_EXTENSION_IN_SYNC_BLOCK"] = "inline-extension-in-sync-block";
|
|
16
|
+
FLAG_ID["EXTENSION_IN_SYNC_BLOCK"] = "extension-in-sync-block";
|
|
16
17
|
return FLAG_ID;
|
|
17
18
|
}({});
|
|
18
19
|
var SYNCED_BLOCK_BUTTON_TEST_ID = exports.SYNCED_BLOCK_BUTTON_TEST_ID = {
|
package/dist/cjs/ui/Flag.js
CHANGED
|
@@ -21,7 +21,7 @@ var _types = require("../types");
|
|
|
21
21
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
22
22
|
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; }
|
|
23
23
|
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; }
|
|
24
|
-
var flagMap = (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _types.FLAG_ID.CANNOT_DELETE_WHEN_OFFLINE, {
|
|
24
|
+
var flagMap = (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _types.FLAG_ID.CANNOT_DELETE_WHEN_OFFLINE, {
|
|
25
25
|
title: _messages.syncBlockMessages.failToDeleteTitle,
|
|
26
26
|
description: _messages.syncBlockMessages.failToDeleteWhenOfflineDescription,
|
|
27
27
|
type: 'error'
|
|
@@ -48,6 +48,10 @@ var flagMap = (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _d
|
|
|
48
48
|
title: _messages.syncBlockMessages.cannotCreateSyncBlockTitle,
|
|
49
49
|
description: _messages.syncBlockMessages.CannotCreateSyncBlockDescription,
|
|
50
50
|
type: 'error'
|
|
51
|
+
}), _types.FLAG_ID.EXTENSION_IN_SYNC_BLOCK, {
|
|
52
|
+
title: _messages.syncBlockMessages.extensionInSyncBlockTitle,
|
|
53
|
+
description: _messages.syncBlockMessages.extensionInSyncBlockDescription,
|
|
54
|
+
type: 'error'
|
|
51
55
|
}), _types.FLAG_ID.INLINE_EXTENSION_IN_SYNC_BLOCK, {
|
|
52
56
|
title: _messages.syncBlockMessages.inlineExtensionInSyncBlockTitle,
|
|
53
57
|
description: _messages.syncBlockMessages.inlineExtensionInSyncBlockDescription,
|
|
@@ -31,7 +31,6 @@ var _quotationMark = _interopRequireDefault(require("@atlaskit/icon/core/quotati
|
|
|
31
31
|
var _statusError = _interopRequireDefault(require("@atlaskit/icon/core/status-error"));
|
|
32
32
|
var _logo = require("@atlaskit/logo");
|
|
33
33
|
var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
|
|
34
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
35
34
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
36
35
|
var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
|
|
37
36
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
@@ -89,31 +88,23 @@ var productIconMap = {
|
|
|
89
88
|
'jira-work-item': _logo.JiraIcon
|
|
90
89
|
};
|
|
91
90
|
var subTypeIconMap = {
|
|
92
|
-
live: _pageLiveDoc.default,
|
|
93
|
-
page: _page.default,
|
|
94
|
-
blogpost: _quotationMark.default
|
|
95
|
-
};
|
|
96
|
-
var subTypeIconMapNew = {
|
|
97
91
|
live: _pageLiveDoc.default,
|
|
98
92
|
page: _page.default
|
|
99
93
|
};
|
|
100
94
|
var getConfluenceSubTypeIcon = function getConfluenceSubTypeIcon(sourceAri, subType) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return subType && subType in subTypeIconMapNew ? subTypeIconMapNew[subType] : _page.default;
|
|
111
|
-
}
|
|
112
|
-
} catch (_unused) {
|
|
113
|
-
return _page.default;
|
|
95
|
+
try {
|
|
96
|
+
var _getPageIdAndTypeFrom = (0, _editorSyncedBlockProvider.getPageIdAndTypeFromConfluencePageAri)({
|
|
97
|
+
ari: sourceAri
|
|
98
|
+
}),
|
|
99
|
+
pageType = _getPageIdAndTypeFrom.type;
|
|
100
|
+
if (pageType === 'blogpost') {
|
|
101
|
+
return _quotationMark.default;
|
|
102
|
+
} else {
|
|
103
|
+
return subType && subType in subTypeIconMap ? subTypeIconMap[subType] : _page.default;
|
|
114
104
|
}
|
|
105
|
+
} catch (_unused) {
|
|
106
|
+
return _page.default;
|
|
115
107
|
}
|
|
116
|
-
return subType && subType in subTypeIconMap ? subTypeIconMap[subType] : _page.default;
|
|
117
108
|
};
|
|
118
109
|
var ProductIcon = function ProductIcon(_ref2) {
|
|
119
110
|
var _productIconMap$produ;
|
|
@@ -4,6 +4,7 @@ import { ErrorBoundary } from '@atlaskit/editor-common/error-boundary';
|
|
|
4
4
|
import ReactNodeView from '@atlaskit/editor-common/react-node-view';
|
|
5
5
|
import { SyncBlockSharedCssClassName, SyncBlockActionsProvider } from '@atlaskit/editor-common/sync-block';
|
|
6
6
|
import { useFetchSyncBlockData, useFetchSyncBlockTitle } from '@atlaskit/editor-synced-block-provider';
|
|
7
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
7
8
|
import { removeSyncedBlockAtPos } from '../editor-commands';
|
|
8
9
|
import { SyncBlockRendererWrapper } from '../ui/SyncBlockRendererWrapper';
|
|
9
10
|
export class SyncBlock extends ReactNodeView {
|
|
@@ -18,6 +19,16 @@ export class SyncBlock extends ReactNodeView {
|
|
|
18
19
|
domRef.classList.add(SyncBlockSharedCssClassName.prefix);
|
|
19
20
|
return domRef;
|
|
20
21
|
}
|
|
22
|
+
validUpdate(currentNode, newNode) {
|
|
23
|
+
// Only consider as the valid update if the localId and resourceId are the same
|
|
24
|
+
// This prevents PM reusing the same node view for different sync block node in live page transition
|
|
25
|
+
return currentNode.attrs.localId === newNode.attrs.localId && currentNode.attrs.resourceId === newNode.attrs.resourceId;
|
|
26
|
+
}
|
|
27
|
+
update(node, decorations, innerDecorations) {
|
|
28
|
+
return super.update(node, decorations, innerDecorations, editorExperiment('platform_synced_block_patch_6', true, {
|
|
29
|
+
exposure: true
|
|
30
|
+
}) ? this.validUpdate : undefined);
|
|
31
|
+
}
|
|
21
32
|
render({
|
|
22
33
|
getPos
|
|
23
34
|
}) {
|