@atlaskit/editor-plugin-synced-block 5.3.11 → 5.3.13

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/afm-cc/tsconfig.json +0 -3
  3. package/afm-jira/tsconfig.json +0 -3
  4. package/afm-products/tsconfig.json +0 -3
  5. package/dist/cjs/editor-commands/index.js +99 -40
  6. package/dist/cjs/nodeviews/bodiedSyncedBlock.js +2 -7
  7. package/dist/cjs/nodeviews/syncedBlock.js +4 -18
  8. package/dist/cjs/pm-plugins/main.js +34 -43
  9. package/dist/cjs/pm-plugins/menu-and-toolbar-experiences.js +221 -81
  10. package/dist/cjs/pm-plugins/utils/track-sync-blocks.js +1 -2
  11. package/dist/cjs/pm-plugins/utils/utils.js +1 -46
  12. package/dist/cjs/syncedBlockPlugin.js +5 -7
  13. package/dist/cjs/types/index.js +5 -1
  14. package/dist/cjs/ui/CreateSyncedBlockDropdownItem.js +2 -1
  15. package/dist/cjs/ui/DeleteConfirmationModal.js +4 -20
  16. package/dist/cjs/ui/SyncBlockLabel.js +4 -10
  17. package/dist/cjs/ui/SyncBlockRefresher.js +7 -9
  18. package/dist/cjs/ui/SyncedLocationDropdown.js +32 -6
  19. package/dist/cjs/ui/floating-toolbar.js +11 -7
  20. package/dist/es2019/editor-commands/index.js +99 -40
  21. package/dist/es2019/nodeviews/bodiedSyncedBlock.js +2 -7
  22. package/dist/es2019/nodeviews/syncedBlock.js +4 -15
  23. package/dist/es2019/pm-plugins/main.js +33 -42
  24. package/dist/es2019/pm-plugins/menu-and-toolbar-experiences.js +206 -71
  25. package/dist/es2019/pm-plugins/utils/track-sync-blocks.js +1 -2
  26. package/dist/es2019/pm-plugins/utils/utils.js +0 -47
  27. package/dist/es2019/syncedBlockPlugin.js +4 -5
  28. package/dist/es2019/types/index.js +5 -1
  29. package/dist/es2019/ui/CreateSyncedBlockDropdownItem.js +2 -1
  30. package/dist/es2019/ui/DeleteConfirmationModal.js +4 -20
  31. package/dist/es2019/ui/SyncBlockLabel.js +4 -10
  32. package/dist/es2019/ui/SyncBlockRefresher.js +7 -9
  33. package/dist/es2019/ui/SyncedLocationDropdown.js +30 -6
  34. package/dist/es2019/ui/floating-toolbar.js +10 -6
  35. package/dist/esm/editor-commands/index.js +99 -40
  36. package/dist/esm/nodeviews/bodiedSyncedBlock.js +2 -7
  37. package/dist/esm/nodeviews/syncedBlock.js +4 -18
  38. package/dist/esm/pm-plugins/main.js +34 -43
  39. package/dist/esm/pm-plugins/menu-and-toolbar-experiences.js +221 -81
  40. package/dist/esm/pm-plugins/utils/track-sync-blocks.js +1 -2
  41. package/dist/esm/pm-plugins/utils/utils.js +0 -45
  42. package/dist/esm/syncedBlockPlugin.js +5 -7
  43. package/dist/esm/types/index.js +5 -1
  44. package/dist/esm/ui/CreateSyncedBlockDropdownItem.js +2 -1
  45. package/dist/esm/ui/DeleteConfirmationModal.js +4 -20
  46. package/dist/esm/ui/SyncBlockLabel.js +4 -10
  47. package/dist/esm/ui/SyncBlockRefresher.js +7 -9
  48. package/dist/esm/ui/SyncedLocationDropdown.js +32 -6
  49. package/dist/esm/ui/floating-toolbar.js +11 -7
  50. package/dist/types/editor-commands/index.d.ts +3 -2
  51. package/dist/types/pm-plugins/utils/handle-bodied-sync-block-removal.d.ts +1 -1
  52. package/dist/types/pm-plugins/utils/utils.d.ts +1 -3
  53. package/dist/types/syncedBlockPluginType.d.ts +2 -1
  54. package/dist/types/types/index.d.ts +4 -0
  55. package/dist/types/ui/SyncedLocationDropdown.d.ts +4 -1
  56. package/dist/types-ts4.5/editor-commands/index.d.ts +3 -2
  57. package/dist/types-ts4.5/pm-plugins/utils/handle-bodied-sync-block-removal.d.ts +1 -1
  58. package/dist/types-ts4.5/pm-plugins/utils/utils.d.ts +1 -3
  59. package/dist/types-ts4.5/syncedBlockPluginType.d.ts +2 -1
  60. package/dist/types-ts4.5/types/index.d.ts +4 -0
  61. package/dist/types-ts4.5/ui/SyncedLocationDropdown.d.ts +4 -1
  62. package/package.json +5 -6
@@ -13,9 +13,7 @@ import { isOfflineMode } from '@atlaskit/editor-plugin-connectivity';
13
13
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
14
14
  import { DecorationSet, Decoration } from '@atlaskit/editor-prosemirror/view';
15
15
  import { convertPMNodesToSyncBlockNodes, rebaseTransaction } from '@atlaskit/editor-synced-block-provider';
16
- import { fg } from '@atlaskit/platform-feature-flags';
17
16
  import { lazyBodiedSyncBlockView } from '../nodeviews/bodiedLazySyncedBlock';
18
- import { lazySyncBlockView } from '../nodeviews/lazySyncedBlock';
19
17
  import { SyncBlock as SyncBlockView } from '../nodeviews/syncedBlock';
20
18
  import { FLAG_ID } from '../types';
21
19
  import { handleBodiedSyncBlockRemoval } from './utils/handle-bodied-sync-block-removal';
@@ -57,7 +55,7 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
57
55
  var unpublishedFlagShown = new Set();
58
56
 
59
57
  // Set up callback to detect unpublished sync blocks when they're fetched
60
- fg('platform_synced_block_dogfooding') && syncBlockStore.referenceManager.setOnUnpublishedSyncBlockDetected(function (resourceId) {
58
+ syncBlockStore.referenceManager.setOnUnpublishedSyncBlockDetected(function (resourceId) {
61
59
  // Only show the flag once per sync block
62
60
  if (!unpublishedFlagShown.has(resourceId)) {
63
61
  unpublishedFlagShown.add(resourceId);
@@ -108,7 +106,7 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
108
106
  },
109
107
  props: {
110
108
  nodeViews: {
111
- syncBlock: fg('platform_synced_block_dogfooding') ? function (node, view, getPos, _decorations) {
109
+ syncBlock: function syncBlock(node, view, getPos, _decorations) {
112
110
  // To support SSR, pass `syncBlockStore` here
113
111
  // and do not use lazy loading.
114
112
  // We cannot start rendering and then load `syncBlockStore` asynchronously,
@@ -123,11 +121,7 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
123
121
  eventDispatcher: pmPluginFactoryParams.eventDispatcher,
124
122
  syncBlockStore: syncBlockStore
125
123
  }).init();
126
- } : lazySyncBlockView({
127
- options: options,
128
- pmPluginFactoryParams: pmPluginFactoryParams,
129
- api: api
130
- }),
124
+ },
131
125
  bodiedSyncBlock: lazyBodiedSyncBlockView({
132
126
  pluginOptions: options,
133
127
  pmPluginFactoryParams: pmPluginFactoryParams,
@@ -217,7 +211,7 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
217
211
  var isConfirmedSyncBlockDeletion = Boolean(tr.getMeta('isConfirmedSyncBlockDeletion'));
218
212
 
219
213
  // Track newly added reference sync blocks before processing the transaction
220
- if (tr.docChanged && !tr.getMeta('isRemote') && fg('platform_synced_block_dogfooding')) {
214
+ if (tr.docChanged && !tr.getMeta('isRemote')) {
221
215
  var _trackSyncBlocks = trackSyncBlocks(function (node) {
222
216
  return node.type.name === 'syncBlock';
223
217
  }, tr, state),
@@ -242,43 +236,40 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
242
236
  bodiedSyncBlockRemoved = _trackSyncBlocks2.removed,
243
237
  bodiedSyncBlockAdded = _trackSyncBlocks2.added;
244
238
  if (!isOffline) {
245
- if (fg('platform_synced_block_dogfooding')) {
246
- var _trackSyncBlocks3 = trackSyncBlocks(function (node) {
247
- return node.type.name === 'syncBlock';
248
- }, tr, state),
249
- syncBlockRemoved = _trackSyncBlocks3.removed,
250
- syncBlockAdded = _trackSyncBlocks3.added;
251
- syncBlockRemoved.forEach(function (syncBlock) {
252
- var _api$analytics;
253
- api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.fireAnalyticsEvent({
254
- action: ACTION.DELETED,
255
- actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
256
- actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_DELETE,
257
- attributes: {
258
- resourceId: syncBlock.attrs.resourceId,
259
- blockInstanceId: syncBlock.attrs.localId
260
- },
261
- eventType: EVENT_TYPE.OPERATIONAL
262
- });
239
+ var _trackSyncBlocks3 = trackSyncBlocks(function (node) {
240
+ return node.type.name === 'syncBlock';
241
+ }, tr, state),
242
+ syncBlockRemoved = _trackSyncBlocks3.removed,
243
+ syncBlockAdded = _trackSyncBlocks3.added;
244
+ syncBlockRemoved.forEach(function (syncBlock) {
245
+ var _api$analytics;
246
+ api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.fireAnalyticsEvent({
247
+ action: ACTION.DELETED,
248
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
249
+ actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_DELETE,
250
+ attributes: {
251
+ resourceId: syncBlock.attrs.resourceId,
252
+ blockInstanceId: syncBlock.attrs.localId
253
+ },
254
+ eventType: EVENT_TYPE.OPERATIONAL
263
255
  });
264
- syncBlockAdded.forEach(function (syncBlock) {
265
- var _api$analytics2;
266
- 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({
267
- action: ACTION.INSERTED,
268
- actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
269
- actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
270
- attributes: {
271
- resourceId: syncBlock.attrs.resourceId,
272
- blockInstanceId: syncBlock.attrs.localId
273
- },
274
- eventType: EVENT_TYPE.OPERATIONAL
275
- });
256
+ });
257
+ syncBlockAdded.forEach(function (syncBlock) {
258
+ var _api$analytics2;
259
+ 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({
260
+ action: ACTION.INSERTED,
261
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
262
+ actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
263
+ attributes: {
264
+ resourceId: syncBlock.attrs.resourceId,
265
+ blockInstanceId: syncBlock.attrs.localId
266
+ },
267
+ eventType: EVENT_TYPE.OPERATIONAL
276
268
  });
277
- }
278
- ;
269
+ });
279
270
  if (bodiedSyncBlockRemoved.length > 0) {
280
271
  confirmationTransactionRef.current = tr;
281
- return handleBodiedSyncBlockRemoval(bodiedSyncBlockRemoved, syncBlockStore, api, confirmationTransactionRef, fg('platform_synced_block_dogfooding') ? getDeleteReason(tr) : undefined);
272
+ return handleBodiedSyncBlockRemoval(bodiedSyncBlockRemoved, syncBlockStore, api, confirmationTransactionRef, getDeleteReason(tr));
282
273
  }
283
274
  if (bodiedSyncBlockAdded.length > 0) {
284
275
  if (Boolean(tr.getMeta(pmHistoryPluginKey))) {
@@ -4,6 +4,7 @@ import { ACTION, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
4
4
  import { Experience, EXPERIENCE_ID, ExperienceCheckDomMutation, ExperienceCheckTimeout, getNodeQuery, getPopupContainerFromEditorView, popupWithNestedElement } from '@atlaskit/editor-common/experiences';
5
5
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
6
6
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
7
8
  import { SYNCED_BLOCK_BUTTON_TEST_ID } from '../types';
8
9
  var TIMEOUT_DURATION = 30000;
9
10
  var pluginKey = new PluginKey('syncedBlockMenuAndToolbarExperience');
@@ -21,22 +22,76 @@ export var getMenuAndToolbarExperiencesPlugin = function getMenuAndToolbarExperi
21
22
  }
22
23
  return popupsTargetEl;
23
24
  };
24
- var createSourcePrimaryToolbarExperience = getCreateSourcePrimaryToolbarExperience({
25
- refs: refs,
26
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
25
+ var createSourcePrimaryToolbarExperience = new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
26
+ action: ACTION.SYNCED_BLOCK_CREATE,
27
+ actionSubjectId: ACTION_SUBJECT_ID.PRIMARY_TOOLBAR,
28
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
29
+ checks: [new ExperienceCheckTimeout({
30
+ durationMs: TIMEOUT_DURATION
31
+ }), syncedBlockAddedToDomCheck(refs)]
27
32
  });
28
- var createSourceBlockMenuExperience = getCreateSourceBlockMenuExperience({
29
- refs: refs,
30
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
33
+ var createSourceBlockMenuExperience = new Experience(EXPERIENCE_ID.MENU_ACTION, {
34
+ action: ACTION.SYNCED_BLOCK_CREATE,
35
+ actionSubjectId: ACTION_SUBJECT_ID.BLOCK_MENU,
36
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
37
+ checks: [new ExperienceCheckTimeout({
38
+ durationMs: TIMEOUT_DURATION
39
+ }), syncedBlockAddedToDomCheck(refs)]
31
40
  });
32
- var createSourceQuickInsertMenuExperience = getCreateSourceQuickInsertMenuExperience({
33
- refs: refs,
34
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
41
+ var createSourceQuickInsertMenuExperience = new Experience(EXPERIENCE_ID.MENU_ACTION, {
42
+ action: ACTION.SYNCED_BLOCK_CREATE,
43
+ actionSubjectId: ACTION_SUBJECT_ID.QUICK_INSERT,
44
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
45
+ checks: [new ExperienceCheckTimeout({
46
+ durationMs: TIMEOUT_DURATION
47
+ }), syncedBlockAddedToDomCheck(refs)]
35
48
  });
36
- var deleteReferenceSyncedBlockExperience = getDeleteReferenceSyncedBlockToolbarExperience({
37
- refs: refs,
38
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
49
+ var deleteReferenceSyncedBlockExperience = new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
50
+ action: ACTION.REFERENCE_SYNCED_BLOCK_DELETE,
51
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
52
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
53
+ checks: [new ExperienceCheckTimeout({
54
+ durationMs: TIMEOUT_DURATION
55
+ }), referenceSyncBlockRemovedFromDomCheck(refs)]
39
56
  });
57
+ var unsyncReferenceSyncedBlockExperience;
58
+ var unsyncSourceSyncedBlockExperience;
59
+ var deleteSourceSyncedBlockExperience;
60
+ var syncedLocationsExperience;
61
+ if (fg('platform_synced_block_patch_1')) {
62
+ unsyncReferenceSyncedBlockExperience = new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
63
+ action: ACTION.REFERENCE_SYNCED_BLOCK_UNSYNC,
64
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
65
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
66
+ checks: [new ExperienceCheckTimeout({
67
+ durationMs: TIMEOUT_DURATION
68
+ }), referenceSyncBlockRemovedFromDomCheck(refs)]
69
+ });
70
+ unsyncSourceSyncedBlockExperience = new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
71
+ action: ACTION.SYNCED_BLOCK_UNSYNC,
72
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
73
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
74
+ checks: [new ExperienceCheckTimeout({
75
+ durationMs: TIMEOUT_DURATION
76
+ }), syncBlockDeleteConfirmationModalAddedCheck(refs)]
77
+ });
78
+ deleteSourceSyncedBlockExperience = new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
79
+ action: ACTION.SYNCED_BLOCK_DELETE,
80
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
81
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
82
+ checks: [new ExperienceCheckTimeout({
83
+ durationMs: TIMEOUT_DURATION
84
+ }), syncBlockDeleteConfirmationModalAddedCheck(refs)]
85
+ });
86
+ syncedLocationsExperience = new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
87
+ action: ACTION.SYNCED_BLOCK_VIEW_SYNCED_LOCATIONS,
88
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
89
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
90
+ checks: [new ExperienceCheckTimeout({
91
+ durationMs: TIMEOUT_DURATION
92
+ }), syncedLocationsDropdownOpenedCheck(refs)]
93
+ });
94
+ }
40
95
  var unbindClickListener = bind(document, {
41
96
  type: 'click',
42
97
  listener: function listener(event) {
@@ -52,13 +107,24 @@ export var getMenuAndToolbarExperiencesPlugin = function getMenuAndToolbarExperi
52
107
  if (!isSyncedBlockButtonId(testId)) {
53
108
  return;
54
109
  }
110
+ if (button.disabled) {
111
+ return;
112
+ }
55
113
  handleButtonClick({
56
114
  testId: testId,
115
+ button: button,
57
116
  createSourcePrimaryToolbarExperience: createSourcePrimaryToolbarExperience,
58
117
  createSourceBlockMenuExperience: createSourceBlockMenuExperience,
59
118
  createSourceQuickInsertMenuExperience: createSourceQuickInsertMenuExperience,
60
- deleteReferenceSyncedBlockExperience: deleteReferenceSyncedBlockExperience
119
+ deleteReferenceSyncedBlockExperience: deleteReferenceSyncedBlockExperience,
120
+ unsyncReferenceSyncedBlockExperience: unsyncReferenceSyncedBlockExperience,
121
+ unsyncSourceSyncedBlockExperience: unsyncSourceSyncedBlockExperience,
122
+ deleteSourceSyncedBlockExperience: deleteSourceSyncedBlockExperience,
123
+ syncedLocationsExperience: syncedLocationsExperience
61
124
  });
125
+ },
126
+ options: {
127
+ capture: true
62
128
  }
63
129
  });
64
130
  var unbindKeydownListener = bind(document, {
@@ -89,6 +155,7 @@ export var getMenuAndToolbarExperiencesPlugin = function getMenuAndToolbarExperi
89
155
  editorViewEl = editorView.dom;
90
156
  return {
91
157
  destroy: function destroy() {
158
+ var _deleteSourceSyncedBl, _unsyncReferenceSynce, _unsyncSourceSyncedBl, _syncedLocationsExper;
92
159
  createSourcePrimaryToolbarExperience.abort({
93
160
  reason: 'editorDestroyed'
94
161
  });
@@ -101,6 +168,18 @@ export var getMenuAndToolbarExperiencesPlugin = function getMenuAndToolbarExperi
101
168
  deleteReferenceSyncedBlockExperience.abort({
102
169
  reason: 'editorDestroyed'
103
170
  });
171
+ (_deleteSourceSyncedBl = deleteSourceSyncedBlockExperience) === null || _deleteSourceSyncedBl === void 0 || _deleteSourceSyncedBl.abort({
172
+ reason: 'editorDestroyed'
173
+ });
174
+ (_unsyncReferenceSynce = unsyncReferenceSyncedBlockExperience) === null || _unsyncReferenceSynce === void 0 || _unsyncReferenceSynce.abort({
175
+ reason: 'editorDestroyed'
176
+ });
177
+ (_unsyncSourceSyncedBl = unsyncSourceSyncedBlockExperience) === null || _unsyncSourceSyncedBl === void 0 || _unsyncSourceSyncedBl.abort({
178
+ reason: 'editorDestroyed'
179
+ });
180
+ (_syncedLocationsExper = syncedLocationsExperience) === null || _syncedLocationsExper === void 0 || _syncedLocationsExper.abort({
181
+ reason: 'editorDestroyed'
182
+ });
104
183
  unbindClickListener();
105
184
  unbindKeydownListener();
106
185
  }
@@ -108,75 +187,63 @@ export var getMenuAndToolbarExperiencesPlugin = function getMenuAndToolbarExperi
108
187
  }
109
188
  });
110
189
  };
111
- var getCreateSourcePrimaryToolbarExperience = function getCreateSourcePrimaryToolbarExperience(_ref2) {
112
- var refs = _ref2.refs,
113
- dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
114
- return new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
115
- action: ACTION.SYNCED_BLOCK_CREATE,
116
- actionSubjectId: ACTION_SUBJECT_ID.PRIMARY_TOOLBAR,
117
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
118
- checks: [new ExperienceCheckTimeout({
119
- durationMs: TIMEOUT_DURATION
120
- }), syncedBlockAddedToDomCheck(refs)]
121
- });
122
- };
123
- var getCreateSourceBlockMenuExperience = function getCreateSourceBlockMenuExperience(_ref3) {
124
- var refs = _ref3.refs,
125
- dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent;
126
- return new Experience(EXPERIENCE_ID.MENU_ACTION, {
127
- action: ACTION.SYNCED_BLOCK_CREATE,
128
- actionSubjectId: ACTION_SUBJECT_ID.BLOCK_MENU,
129
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
130
- checks: [new ExperienceCheckTimeout({
131
- durationMs: TIMEOUT_DURATION
132
- }), syncedBlockAddedToDomCheck(refs)]
133
- });
134
- };
135
- var getCreateSourceQuickInsertMenuExperience = function getCreateSourceQuickInsertMenuExperience(_ref4) {
136
- var refs = _ref4.refs,
137
- dispatchAnalyticsEvent = _ref4.dispatchAnalyticsEvent;
138
- return new Experience(EXPERIENCE_ID.MENU_ACTION, {
139
- action: ACTION.SYNCED_BLOCK_CREATE,
140
- actionSubjectId: ACTION_SUBJECT_ID.QUICK_INSERT,
141
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
142
- checks: [new ExperienceCheckTimeout({
143
- durationMs: TIMEOUT_DURATION
144
- }), syncedBlockAddedToDomCheck(refs)]
145
- });
146
- };
147
- var getDeleteReferenceSyncedBlockToolbarExperience = function getDeleteReferenceSyncedBlockToolbarExperience(_ref5) {
148
- var refs = _ref5.refs,
149
- dispatchAnalyticsEvent = _ref5.dispatchAnalyticsEvent;
150
- return new Experience(EXPERIENCE_ID.TOOLBAR_ACTION, {
151
- action: ACTION.REFERENCE_SYNCED_BLOCK_DELETE,
152
- actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
153
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
154
- checks: [new ExperienceCheckTimeout({
155
- durationMs: TIMEOUT_DURATION
156
- }), referenceSyncBlockRemovedFromDomCheck(refs)]
157
- });
158
- };
159
190
  var isSyncedBlockButtonId = function isSyncedBlockButtonId(value) {
160
191
  return !!value && syncedBlockButtonIds.has(value);
161
192
  };
162
- var handleButtonClick = function handleButtonClick(_ref6) {
163
- var testId = _ref6.testId,
164
- createSourcePrimaryToolbarExperience = _ref6.createSourcePrimaryToolbarExperience,
165
- createSourceBlockMenuExperience = _ref6.createSourceBlockMenuExperience,
166
- createSourceQuickInsertMenuExperience = _ref6.createSourceQuickInsertMenuExperience,
167
- deleteReferenceSyncedBlockExperience = _ref6.deleteReferenceSyncedBlockExperience;
193
+ var handleButtonClick = function handleButtonClick(_ref2) {
194
+ var testId = _ref2.testId,
195
+ button = _ref2.button,
196
+ createSourcePrimaryToolbarExperience = _ref2.createSourcePrimaryToolbarExperience,
197
+ createSourceBlockMenuExperience = _ref2.createSourceBlockMenuExperience,
198
+ createSourceQuickInsertMenuExperience = _ref2.createSourceQuickInsertMenuExperience,
199
+ deleteReferenceSyncedBlockExperience = _ref2.deleteReferenceSyncedBlockExperience,
200
+ unsyncReferenceSyncedBlockExperience = _ref2.unsyncReferenceSyncedBlockExperience,
201
+ unsyncSourceSyncedBlockExperience = _ref2.unsyncSourceSyncedBlockExperience,
202
+ deleteSourceSyncedBlockExperience = _ref2.deleteSourceSyncedBlockExperience,
203
+ syncedLocationsExperience = _ref2.syncedLocationsExperience;
168
204
  switch (testId) {
169
205
  case SYNCED_BLOCK_BUTTON_TEST_ID.primaryToolbarCreate:
170
- createSourcePrimaryToolbarExperience.start();
206
+ createSourcePrimaryToolbarExperience.start({
207
+ forceRestart: true
208
+ });
171
209
  break;
172
210
  case SYNCED_BLOCK_BUTTON_TEST_ID.blockMenuCreate:
173
- createSourceBlockMenuExperience.start();
211
+ createSourceBlockMenuExperience.start({
212
+ forceRestart: true
213
+ });
174
214
  break;
175
215
  case SYNCED_BLOCK_BUTTON_TEST_ID.quickInsertCreate:
176
- createSourceQuickInsertMenuExperience.start();
216
+ createSourceQuickInsertMenuExperience.start({
217
+ forceRestart: true
218
+ });
177
219
  break;
178
220
  case SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceDelete:
179
- deleteReferenceSyncedBlockExperience.start();
221
+ deleteReferenceSyncedBlockExperience.start({
222
+ forceRestart: true
223
+ });
224
+ break;
225
+ case SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceUnsync:
226
+ unsyncReferenceSyncedBlockExperience === null || unsyncReferenceSyncedBlockExperience === void 0 || unsyncReferenceSyncedBlockExperience.start({
227
+ forceRestart: true
228
+ });
229
+ break;
230
+ case SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSourceUnsync:
231
+ unsyncSourceSyncedBlockExperience === null || unsyncSourceSyncedBlockExperience === void 0 || unsyncSourceSyncedBlockExperience.start({
232
+ forceRestart: true
233
+ });
234
+ break;
235
+ case SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSourceDelete:
236
+ deleteSourceSyncedBlockExperience === null || deleteSourceSyncedBlockExperience === void 0 || deleteSourceSyncedBlockExperience.start({
237
+ forceRestart: true
238
+ });
239
+ break;
240
+ case SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSyncedLocationsTrigger:
241
+ // Only track when opening the dropdown
242
+ if (button.getAttribute('aria-pressed') === 'false') {
243
+ syncedLocationsExperience === null || syncedLocationsExperience === void 0 || syncedLocationsExperience.start({
244
+ forceRestart: true
245
+ });
246
+ }
180
247
  break;
181
248
  default:
182
249
  {
@@ -202,8 +269,8 @@ var getTarget = function getTarget(containerElement) {
202
269
  };
203
270
  var syncedBlockAddedToDomCheck = function syncedBlockAddedToDomCheck(refs) {
204
271
  return new ExperienceCheckDomMutation({
205
- onDomMutation: function onDomMutation(_ref7) {
206
- var mutations = _ref7.mutations;
272
+ onDomMutation: function onDomMutation(_ref3) {
273
+ var mutations = _ref3.mutations;
207
274
  if (mutations.some(isBodiedSyncBlockAddedInMutation)) {
208
275
  return {
209
276
  status: 'success'
@@ -221,9 +288,9 @@ var syncedBlockAddedToDomCheck = function syncedBlockAddedToDomCheck(refs) {
221
288
  }
222
289
  });
223
290
  };
224
- var isBodiedSyncBlockAddedInMutation = function isBodiedSyncBlockAddedInMutation(_ref8) {
225
- var type = _ref8.type,
226
- addedNodes = _ref8.addedNodes;
291
+ var isBodiedSyncBlockAddedInMutation = function isBodiedSyncBlockAddedInMutation(_ref4) {
292
+ var type = _ref4.type,
293
+ addedNodes = _ref4.addedNodes;
227
294
  return type === 'childList' && _toConsumableArray(addedNodes).some(isBodiedSyncBlockWithinNode);
228
295
  };
229
296
  var isBodiedSyncBlockWithinNode = function isBodiedSyncBlockWithinNode(node) {
@@ -231,8 +298,8 @@ var isBodiedSyncBlockWithinNode = function isBodiedSyncBlockWithinNode(node) {
231
298
  };
232
299
  var referenceSyncBlockRemovedFromDomCheck = function referenceSyncBlockRemovedFromDomCheck(refs) {
233
300
  return new ExperienceCheckDomMutation({
234
- onDomMutation: function onDomMutation(_ref9) {
235
- var mutations = _ref9.mutations;
301
+ onDomMutation: function onDomMutation(_ref5) {
302
+ var mutations = _ref5.mutations;
236
303
  if (mutations.some(isSyncBlockRemovedInMutation)) {
237
304
  return {
238
305
  status: 'success'
@@ -250,11 +317,84 @@ var referenceSyncBlockRemovedFromDomCheck = function referenceSyncBlockRemovedFr
250
317
  }
251
318
  });
252
319
  };
253
- var isSyncBlockRemovedInMutation = function isSyncBlockRemovedInMutation(_ref0) {
254
- var type = _ref0.type,
255
- removedNodes = _ref0.removedNodes;
320
+ var isSyncBlockRemovedInMutation = function isSyncBlockRemovedInMutation(_ref6) {
321
+ var type = _ref6.type,
322
+ removedNodes = _ref6.removedNodes;
256
323
  return type === 'childList' && _toConsumableArray(removedNodes).some(isSyncBlockWithinNode);
257
324
  };
258
325
  var isSyncBlockWithinNode = function isSyncBlockWithinNode(node) {
259
326
  return getNodeQuery('[data-prosemirror-node-name="syncBlock"]')(node);
327
+ };
328
+ var syncBlockDeleteConfirmationModalAddedCheck = function syncBlockDeleteConfirmationModalAddedCheck(refs) {
329
+ return new ExperienceCheckDomMutation({
330
+ onDomMutation: function onDomMutation(_ref7) {
331
+ var mutations = _ref7.mutations;
332
+ if (mutations.some(isDeleteConfirmationModalAddedInMutation)) {
333
+ return {
334
+ status: 'success'
335
+ };
336
+ }
337
+ return undefined;
338
+ },
339
+ observeConfig: function observeConfig() {
340
+ return {
341
+ target: document.body,
342
+ options: {
343
+ childList: true,
344
+ subtree: true
345
+ }
346
+ };
347
+ }
348
+ });
349
+ };
350
+ var isDeleteConfirmationModalAddedInMutation = function isDeleteConfirmationModalAddedInMutation(_ref8) {
351
+ var type = _ref8.type,
352
+ addedNodes = _ref8.addedNodes;
353
+ return type === 'childList' && _toConsumableArray(addedNodes).some(isDeleteConfirmationModalWithinNode);
354
+ };
355
+ var isDeleteConfirmationModalWithinNode = function isDeleteConfirmationModalWithinNode(node) {
356
+ return getNodeQuery('[data-testid="sync-block-delete-confirmation"]')(node);
357
+ };
358
+ var syncedLocationsDropdownOpenedCheck = function syncedLocationsDropdownOpenedCheck(refs) {
359
+ return new ExperienceCheckDomMutation({
360
+ onDomMutation: function onDomMutation(_ref9) {
361
+ var mutations = _ref9.mutations;
362
+ if (mutations.some(isSyncedLocationsDropdownErrorInMutation)) {
363
+ return {
364
+ status: 'failure'
365
+ };
366
+ }
367
+ if (mutations.some(isSyncedLocationsDropdownAddedInMutation)) {
368
+ return {
369
+ status: 'success'
370
+ };
371
+ }
372
+ return undefined;
373
+ },
374
+ observeConfig: function observeConfig() {
375
+ return {
376
+ target: document.body,
377
+ options: {
378
+ childList: true,
379
+ subtree: true
380
+ }
381
+ };
382
+ }
383
+ });
384
+ };
385
+ var isSyncedLocationsDropdownAddedInMutation = function isSyncedLocationsDropdownAddedInMutation(_ref0) {
386
+ var type = _ref0.type,
387
+ addedNodes = _ref0.addedNodes;
388
+ return type === 'childList' && _toConsumableArray(addedNodes).some(isSyncedLocationsDropdownWithinNode);
389
+ };
390
+ var isSyncedLocationsDropdownErrorInMutation = function isSyncedLocationsDropdownErrorInMutation(_ref1) {
391
+ var type = _ref1.type,
392
+ addedNodes = _ref1.addedNodes;
393
+ return type === 'childList' && _toConsumableArray(addedNodes).some(isSyncedLocationsDropdownErrorWithinNode);
394
+ };
395
+ var isSyncedLocationsDropdownWithinNode = function isSyncedLocationsDropdownWithinNode(node) {
396
+ return !!(getNodeQuery('[data-testid="synced-locations-dropdown-content"]')(node) || getNodeQuery('[data-testid="synced-locations-dropdown-content-no-results"]')(node));
397
+ };
398
+ var isSyncedLocationsDropdownErrorWithinNode = function isSyncedLocationsDropdownErrorWithinNode(node) {
399
+ return !!getNodeQuery('[data-testid="synced-locations-dropdown-content-error"]')(node);
260
400
  };
@@ -3,7 +3,6 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
3
3
  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; }
4
4
  import { ReplaceAroundStep, ReplaceStep } from '@atlaskit/editor-prosemirror/transform';
5
5
  import { findParentNodeOfTypeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
6
- import { fg } from '@atlaskit/platform-feature-flags';
7
6
  export var trackSyncBlocks = function trackSyncBlocks(predicate, tr, state) {
8
7
  var removed = {};
9
8
  var added = {};
@@ -23,7 +22,7 @@ export var trackSyncBlocks = function trackSyncBlocks(predicate, tr, state) {
23
22
  var hasBodiedSyncBlockChanges = replaceSteps.some(function (step, idx) {
24
23
  var from = step.from,
25
24
  to = step.to;
26
- var docAtStep = fg('platform_synced_block_dogfooding') ? tr.docs[idx] : state.doc;
25
+ var docAtStep = tr.docs[idx];
27
26
  var hasChange = false;
28
27
  if (from !== to) {
29
28
  step.getMap().forEach(function (oldStart, oldEnd) {
@@ -1,9 +1,6 @@
1
1
  import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
2
2
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
3
- import { TextSelection } from '@atlaskit/editor-prosemirror/state';
4
3
  import { findParentNodeOfType, findSelectedNodeOfType } from '@atlaskit/editor-prosemirror/utils';
5
- import { CellSelection, findTable } from '@atlaskit/editor-tables';
6
- import { fg } from '@atlaskit/platform-feature-flags';
7
4
  export var findSyncBlock = function findSyncBlock(schema, selection) {
8
5
  var syncBlock = schema.nodes.syncBlock;
9
6
  return findSelectedNodeOfType(syncBlock)(selection);
@@ -28,48 +25,6 @@ var UNSUPPORTED_NODE_TYPES = new Set(['inlineExtension', 'extension', 'bodiedExt
28
25
  * or false if conversion is not possible
29
26
  */
30
27
  export var canBeConvertedToSyncBlock = function canBeConvertedToSyncBlock(selection) {
31
- return fg('platform_synced_block_dogfooding') ? canBeConvertedToSyncBlockNew(selection) : canBeConvertedToSyncBlockOld(selection);
32
- };
33
- export var canBeConvertedToSyncBlockOld = function canBeConvertedToSyncBlockOld(selection) {
34
- var schema = selection.$from.doc.type.schema;
35
- var nodes = schema.nodes;
36
- var from = selection.from;
37
- var to = selection.to;
38
- var contentToInclude = selection.content().content;
39
- if (selection instanceof CellSelection) {
40
- var table = findTable(selection);
41
- if (!table) {
42
- return false;
43
- }
44
- contentToInclude = Fragment.from([table.node]);
45
- from = table.pos;
46
- to = table.pos + table.node.nodeSize;
47
- } else if (selection instanceof TextSelection) {
48
- var trueParent = findParentNodeOfType([nodes.bulletList, nodes.orderedList, nodes.taskList, nodes.blockquote])(selection);
49
- if (trueParent) {
50
- contentToInclude = Fragment.from([trueParent.node]);
51
- from = trueParent.pos;
52
- to = trueParent.pos + trueParent.node.nodeSize;
53
- }
54
- }
55
- var canBeConverted = true;
56
- selection.$from.doc.nodesBetween(from, to, function (node) {
57
- if (UNSUPPORTED_NODE_TYPES.has(node.type.name)) {
58
- canBeConverted = false;
59
- return false;
60
- }
61
- });
62
- if (!canBeConverted) {
63
- return false;
64
- }
65
- contentToInclude = removeBreakoutMarks(contentToInclude);
66
- return {
67
- contentToInclude: contentToInclude,
68
- from: from,
69
- to: to
70
- };
71
- };
72
- export var canBeConvertedToSyncBlockNew = function canBeConvertedToSyncBlockNew(selection) {
73
28
  var _expandSelectionToBlo = expandSelectionToBlockRange(selection),
74
29
  $from = _expandSelectionToBlo.$from,
75
30
  range = _expandSelectionToBlo.range;
@@ -1,11 +1,9 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
1
  import React from 'react';
3
2
  import { bodiedSyncBlock, syncBlock } from '@atlaskit/adf-schema';
4
3
  import { blockTypeMessages } from '@atlaskit/editor-common/messages';
5
4
  import { IconSyncBlock } from '@atlaskit/editor-common/quick-insert';
6
5
  import { SyncBlockStoreManager } from '@atlaskit/editor-synced-block-provider';
7
6
  import Lozenge from '@atlaskit/lozenge';
8
- import { fg } from '@atlaskit/platform-feature-flags';
9
7
  import { flushBodiedSyncBlocks as _flushBodiedSyncBlocks, flushSyncBlocks } from './editor-actions';
10
8
  import { copySyncedBlockReferenceToClipboardEditorCommand, createSyncedBlock } from './editor-commands';
11
9
  import { createPlugin, syncedBlockPluginKey } from './pm-plugins/main';
@@ -43,7 +41,7 @@ export var syncedBlockPlugin = function syncedBlockPlugin(_ref) {
43
41
  plugin: function plugin(params) {
44
42
  return createPlugin(config, params, syncBlockStore, api);
45
43
  }
46
- }].concat(_toConsumableArray(fg('platform_synced_block_dogfooding') ? [{
44
+ }, {
47
45
  name: 'menuAndToolbarExperiencesPlugin',
48
46
  plugin: function plugin() {
49
47
  return getMenuAndToolbarExperiencesPlugin({
@@ -54,11 +52,11 @@ export var syncedBlockPlugin = function syncedBlockPlugin(_ref) {
54
52
  }
55
53
  });
56
54
  }
57
- }] : []));
55
+ }];
58
56
  },
59
57
  commands: {
60
- copySyncedBlockReferenceToClipboard: function copySyncedBlockReferenceToClipboard() {
61
- return copySyncedBlockReferenceToClipboardEditorCommand(syncBlockStore, api);
58
+ copySyncedBlockReferenceToClipboard: function copySyncedBlockReferenceToClipboard(inputMethod) {
59
+ return copySyncedBlockReferenceToClipboardEditorCommand(syncBlockStore, inputMethod, api);
62
60
  },
63
61
  insertSyncedBlock: function insertSyncedBlock() {
64
62
  return function (_ref2) {
@@ -114,7 +112,7 @@ export var syncedBlockPlugin = function syncedBlockPlugin(_ref) {
114
112
  fireAnalyticsEvent: api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions.fireAnalyticsEvent
115
113
  });
116
114
  },
117
- testId: fg('platform_synced_block_dogfooding') ? SYNCED_BLOCK_BUTTON_TEST_ID.quickInsertCreate : undefined
115
+ testId: SYNCED_BLOCK_BUTTON_TEST_ID.quickInsertCreate
118
116
  }];
119
117
  },
120
118
  floatingToolbar: function floatingToolbar(state, intl) {
@@ -11,5 +11,9 @@ export var SYNCED_BLOCK_BUTTON_TEST_ID = {
11
11
  primaryToolbarCreate: 'create-synced-block-toolbar-btn',
12
12
  blockMenuCreate: 'create-synced-block-block-menu-btn',
13
13
  quickInsertCreate: 'create-synced-block-quick-insert-btn',
14
- syncedBlockToolbarReferenceDelete: 'reference-synced-block-delete-btn'
14
+ syncedBlockToolbarReferenceDelete: 'reference-synced-block-delete-btn',
15
+ syncedBlockToolbarSourceDelete: 'source-synced-block-delete-btn',
16
+ syncedBlockToolbarReferenceUnsync: 'reference-synced-block-unsync-btn',
17
+ syncedBlockToolbarSourceUnsync: 'source-synced-block-unsync-btn',
18
+ syncedBlockToolbarSyncedLocationsTrigger: 'synced-block-synced-locations-dropdown--trigger'
15
19
  };