@atlaskit/editor-plugin-synced-block 5.2.0 → 5.2.2

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 (65) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/afm-jira/tsconfig.json +1 -1
  3. package/dist/cjs/editor-commands/index.js +10 -4
  4. package/dist/cjs/pm-plugins/menu-and-toolbar-experiences.js +267 -0
  5. package/dist/cjs/syncedBlockPlugin.js +21 -12
  6. package/dist/cjs/types/index.js +6 -3
  7. package/dist/cjs/ui/CreateSyncedBlockButton.js +2 -1
  8. package/dist/cjs/ui/CreateSyncedBlockDropdownItem.js +2 -1
  9. package/dist/cjs/ui/floating-toolbar.js +2 -1
  10. package/dist/es2019/editor-commands/index.js +10 -4
  11. package/dist/es2019/pm-plugins/menu-and-toolbar-experiences.js +261 -0
  12. package/dist/es2019/syncedBlockPlugin.js +19 -12
  13. package/dist/es2019/types/index.js +5 -2
  14. package/dist/es2019/ui/CreateSyncedBlockButton.js +2 -1
  15. package/dist/es2019/ui/CreateSyncedBlockDropdownItem.js +2 -1
  16. package/dist/es2019/ui/floating-toolbar.js +2 -1
  17. package/dist/esm/editor-commands/index.js +10 -4
  18. package/dist/esm/pm-plugins/menu-and-toolbar-experiences.js +260 -0
  19. package/dist/esm/syncedBlockPlugin.js +21 -12
  20. package/dist/esm/types/index.js +5 -2
  21. package/dist/esm/ui/CreateSyncedBlockButton.js +2 -1
  22. package/dist/esm/ui/CreateSyncedBlockDropdownItem.js +2 -1
  23. package/dist/esm/ui/floating-toolbar.js +2 -1
  24. package/dist/types/editor-commands/index.d.ts +3 -1
  25. package/dist/types/pm-plugins/menu-and-toolbar-experiences.d.ts +12 -0
  26. package/dist/types/types/index.d.ts +5 -14
  27. package/dist/types-ts4.5/editor-commands/index.d.ts +3 -1
  28. package/dist/types-ts4.5/pm-plugins/menu-and-toolbar-experiences.d.ts +12 -0
  29. package/dist/types-ts4.5/types/index.d.ts +5 -14
  30. package/package.json +4 -4
  31. package/dist/cjs/pm-plugins/experience-tracking/create-reference-experience.js +0 -113
  32. package/dist/cjs/pm-plugins/experience-tracking/create-source-experience.js +0 -169
  33. package/dist/cjs/pm-plugins/experience-tracking/delete-reference-experience.js +0 -175
  34. package/dist/cjs/pm-plugins/experience-tracking/delete-source-experience.js +0 -103
  35. package/dist/cjs/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -61
  36. package/dist/cjs/pm-plugins/experience-tracking/provider-only-experiences.js +0 -128
  37. package/dist/cjs/pm-plugins/utils/experience-tracking-utils.js +0 -85
  38. package/dist/es2019/pm-plugins/experience-tracking/create-reference-experience.js +0 -109
  39. package/dist/es2019/pm-plugins/experience-tracking/create-source-experience.js +0 -166
  40. package/dist/es2019/pm-plugins/experience-tracking/delete-reference-experience.js +0 -181
  41. package/dist/es2019/pm-plugins/experience-tracking/delete-source-experience.js +0 -98
  42. package/dist/es2019/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -46
  43. package/dist/es2019/pm-plugins/experience-tracking/provider-only-experiences.js +0 -127
  44. package/dist/es2019/pm-plugins/utils/experience-tracking-utils.js +0 -65
  45. package/dist/esm/pm-plugins/experience-tracking/create-reference-experience.js +0 -107
  46. package/dist/esm/pm-plugins/experience-tracking/create-source-experience.js +0 -163
  47. package/dist/esm/pm-plugins/experience-tracking/delete-reference-experience.js +0 -169
  48. package/dist/esm/pm-plugins/experience-tracking/delete-source-experience.js +0 -97
  49. package/dist/esm/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -55
  50. package/dist/esm/pm-plugins/experience-tracking/provider-only-experiences.js +0 -122
  51. package/dist/esm/pm-plugins/utils/experience-tracking-utils.js +0 -79
  52. package/dist/types/pm-plugins/experience-tracking/create-reference-experience.d.ts +0 -10
  53. package/dist/types/pm-plugins/experience-tracking/create-source-experience.d.ts +0 -10
  54. package/dist/types/pm-plugins/experience-tracking/delete-reference-experience.d.ts +0 -13
  55. package/dist/types/pm-plugins/experience-tracking/delete-source-experience.d.ts +0 -12
  56. package/dist/types/pm-plugins/experience-tracking/get-experience-tracking-plugins.d.ts +0 -5
  57. package/dist/types/pm-plugins/experience-tracking/provider-only-experiences.d.ts +0 -3
  58. package/dist/types/pm-plugins/utils/experience-tracking-utils.d.ts +0 -9
  59. package/dist/types-ts4.5/pm-plugins/experience-tracking/create-reference-experience.d.ts +0 -10
  60. package/dist/types-ts4.5/pm-plugins/experience-tracking/create-source-experience.d.ts +0 -10
  61. package/dist/types-ts4.5/pm-plugins/experience-tracking/delete-reference-experience.d.ts +0 -13
  62. package/dist/types-ts4.5/pm-plugins/experience-tracking/delete-source-experience.d.ts +0 -12
  63. package/dist/types-ts4.5/pm-plugins/experience-tracking/get-experience-tracking-plugins.d.ts +0 -5
  64. package/dist/types-ts4.5/pm-plugins/experience-tracking/provider-only-experiences.d.ts +0 -3
  65. package/dist/types-ts4.5/pm-plugins/utils/experience-tracking-utils.d.ts +0 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/editor-plugin-synced-block
2
2
 
3
+ ## 5.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`7f41011a1b0ff`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/7f41011a1b0ff) -
8
+ EDITOR-1665 update sync block experience events to use general experience ids, keep existing error
9
+ events and add success events
10
+ - Updated dependencies
11
+
12
+ ## 5.2.1
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies
17
+
3
18
  ## 5.2.0
4
19
 
5
20
  ### Minor Changes
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../../../tsconfig.entry-points.jira.json",
2
+ "extends": "../../../../tsconfig.local-consumption.json",
3
3
  "compilerOptions": {
4
4
  "target": "es5",
5
5
  "outDir": "../../../../../jira/tsDist/@atlaskit__editor-plugin-synced-block/app",
@@ -15,7 +15,8 @@ var _types = require("../types");
15
15
  var createSyncedBlock = exports.createSyncedBlock = function createSyncedBlock(_ref) {
16
16
  var tr = _ref.tr,
17
17
  syncBlockStore = _ref.syncBlockStore,
18
- typeAheadInsert = _ref.typeAheadInsert;
18
+ typeAheadInsert = _ref.typeAheadInsert,
19
+ fireAnalyticsEvent = _ref.fireAnalyticsEvent;
19
20
  var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
20
21
  bodiedSyncBlock = _tr$doc$type$schema$n.bodiedSyncBlock,
21
22
  paragraph = _tr$doc$type$schema$n.paragraph;
@@ -41,9 +42,14 @@ var createSyncedBlock = exports.createSyncedBlock = function createSyncedBlock(_
41
42
  var conversionInfo = (0, _utils2.canBeConvertedToSyncBlock)(tr.selection);
42
43
  if (!conversionInfo) {
43
44
  if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
44
- var _syncBlockStore$sourc;
45
- (_syncBlockStore$sourc = syncBlockStore.sourceManager.createExperience) === null || _syncBlockStore$sourc === void 0 || _syncBlockStore$sourc.failure({
46
- reason: 'Selection is not allowed to be converted to sync block'
45
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent({
46
+ action: _analytics.ACTION.ERROR,
47
+ actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
48
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
49
+ attributes: {
50
+ error: 'Content cannot be converted to sync block'
51
+ },
52
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL
47
53
  });
48
54
  }
49
55
  return false;
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getMenuAndToolbarExperiencesPlugin = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _bindEventListener = require("bind-event-listener");
10
+ var _analytics = require("@atlaskit/editor-common/analytics");
11
+ var _experiences = require("@atlaskit/editor-common/experiences");
12
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
13
+ var _state = require("@atlaskit/editor-prosemirror/state");
14
+ var _types = require("../types");
15
+ var TIMEOUT_DURATION = 30000;
16
+ var pluginKey = new _state.PluginKey('syncedBlockMenuAndToolbarExperience');
17
+ var SYNCED_BLOCK_BUTTON_TEST_IDS = Object.values(_types.SYNCED_BLOCK_BUTTON_TEST_ID);
18
+ var syncedBlockButtonIds = new Set(SYNCED_BLOCK_BUTTON_TEST_IDS);
19
+ var targetEl;
20
+ var getMenuAndToolbarExperiencesPlugin = exports.getMenuAndToolbarExperiencesPlugin = function getMenuAndToolbarExperiencesPlugin(_ref) {
21
+ var refs = _ref.refs,
22
+ dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent;
23
+ var popupsTargetEl;
24
+ var editorViewEl;
25
+ var getPopupsTarget = function getPopupsTarget() {
26
+ if (!popupsTargetEl) {
27
+ popupsTargetEl = refs.popupsMountPoint || refs.wrapperElement || (0, _experiences.getPopupContainerFromEditorView)(editorViewEl);
28
+ }
29
+ return popupsTargetEl;
30
+ };
31
+ var createSourcePrimaryToolbarExperience = getCreateSourcePrimaryToolbarExperience({
32
+ refs: refs,
33
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent
34
+ });
35
+ var createSourceBlockMenuExperience = getCreateSourceBlockMenuExperience({
36
+ refs: refs,
37
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent
38
+ });
39
+ var createSourceQuickInsertMenuExperience = getCreateSourceQuickInsertMenuExperience({
40
+ refs: refs,
41
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent
42
+ });
43
+ var deleteReferenceSyncedBlockExperience = getDeleteReferenceSyncedBlockToolbarExperience({
44
+ refs: refs,
45
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent
46
+ });
47
+ var unbindClickListener = (0, _bindEventListener.bind)(document, {
48
+ type: 'click',
49
+ listener: function listener(event) {
50
+ var target = event.target;
51
+ if (!target) {
52
+ return;
53
+ }
54
+ var button = target.closest('button[data-testid]');
55
+ if (!button || !(button instanceof HTMLButtonElement)) {
56
+ return;
57
+ }
58
+ var testId = button.dataset.testid;
59
+ if (!isSyncedBlockButtonId(testId)) {
60
+ return;
61
+ }
62
+ handleButtonClick({
63
+ testId: testId,
64
+ createSourcePrimaryToolbarExperience: createSourcePrimaryToolbarExperience,
65
+ createSourceBlockMenuExperience: createSourceBlockMenuExperience,
66
+ createSourceQuickInsertMenuExperience: createSourceQuickInsertMenuExperience,
67
+ deleteReferenceSyncedBlockExperience: deleteReferenceSyncedBlockExperience
68
+ });
69
+ }
70
+ });
71
+ var unbindKeydownListener = (0, _bindEventListener.bind)(document, {
72
+ type: 'keydown',
73
+ listener: function listener(event) {
74
+ if (isEnterKey(event.key)) {
75
+ var typeaheadPopup = (0, _experiences.popupWithNestedElement)(getPopupsTarget(), '.fabric-editor-typeahead');
76
+ if (!typeaheadPopup || !(typeaheadPopup instanceof HTMLElement)) {
77
+ return;
78
+ }
79
+ var firstItem = typeaheadPopup.querySelector('[role="option"]');
80
+ if (!firstItem || !(firstItem instanceof HTMLElement)) {
81
+ return;
82
+ }
83
+ var testId = firstItem.dataset.testid;
84
+ if (testId === _types.SYNCED_BLOCK_BUTTON_TEST_ID.quickInsertCreate) {
85
+ createSourceQuickInsertMenuExperience.start();
86
+ }
87
+ }
88
+ },
89
+ options: {
90
+ capture: true
91
+ }
92
+ });
93
+ return new _safePlugin.SafePlugin({
94
+ key: pluginKey,
95
+ view: function view(editorView) {
96
+ editorViewEl = editorView.dom;
97
+ return {
98
+ destroy: function destroy() {
99
+ createSourcePrimaryToolbarExperience.abort({
100
+ reason: 'editor-destroyed'
101
+ });
102
+ createSourceBlockMenuExperience.abort({
103
+ reason: 'editor-destroyed'
104
+ });
105
+ createSourceQuickInsertMenuExperience.abort({
106
+ reason: 'editor-destroyed'
107
+ });
108
+ deleteReferenceSyncedBlockExperience.abort({
109
+ reason: 'editor-destroyed'
110
+ });
111
+ unbindClickListener();
112
+ unbindKeydownListener();
113
+ }
114
+ };
115
+ }
116
+ });
117
+ };
118
+ var getCreateSourcePrimaryToolbarExperience = function getCreateSourcePrimaryToolbarExperience(_ref2) {
119
+ var refs = _ref2.refs,
120
+ dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
121
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.TOOLBAR_ACTION, {
122
+ action: _analytics.ACTION.SYNCED_BLOCK_CREATE,
123
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PRIMARY_TOOLBAR,
124
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
125
+ checks: [new _experiences.ExperienceCheckTimeout({
126
+ durationMs: TIMEOUT_DURATION
127
+ }), syncedBlockAddedToDomCheck(refs)]
128
+ });
129
+ };
130
+ var getCreateSourceBlockMenuExperience = function getCreateSourceBlockMenuExperience(_ref3) {
131
+ var refs = _ref3.refs,
132
+ dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent;
133
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.MENU_ACTION, {
134
+ action: _analytics.ACTION.SYNCED_BLOCK_CREATE,
135
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.BLOCK_MENU,
136
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
137
+ checks: [new _experiences.ExperienceCheckTimeout({
138
+ durationMs: TIMEOUT_DURATION
139
+ }), syncedBlockAddedToDomCheck(refs)]
140
+ });
141
+ };
142
+ var getCreateSourceQuickInsertMenuExperience = function getCreateSourceQuickInsertMenuExperience(_ref4) {
143
+ var refs = _ref4.refs,
144
+ dispatchAnalyticsEvent = _ref4.dispatchAnalyticsEvent;
145
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.MENU_ACTION, {
146
+ action: _analytics.ACTION.SYNCED_BLOCK_CREATE,
147
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.QUICK_INSERT,
148
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
149
+ checks: [new _experiences.ExperienceCheckTimeout({
150
+ durationMs: TIMEOUT_DURATION
151
+ }), syncedBlockAddedToDomCheck(refs)]
152
+ });
153
+ };
154
+ var getDeleteReferenceSyncedBlockToolbarExperience = function getDeleteReferenceSyncedBlockToolbarExperience(_ref5) {
155
+ var refs = _ref5.refs,
156
+ dispatchAnalyticsEvent = _ref5.dispatchAnalyticsEvent;
157
+ return new _experiences.Experience(_experiences.EXPERIENCE_ID.TOOLBAR_ACTION, {
158
+ action: _analytics.ACTION.REFERENCE_SYNCED_BLOCK_DELETE,
159
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_TOOLBAR,
160
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
161
+ checks: [new _experiences.ExperienceCheckTimeout({
162
+ durationMs: TIMEOUT_DURATION
163
+ }), referenceSyncBlockRemovedFromDomCheck(refs)]
164
+ });
165
+ };
166
+ var isSyncedBlockButtonId = function isSyncedBlockButtonId(value) {
167
+ return !!value && syncedBlockButtonIds.has(value);
168
+ };
169
+ var handleButtonClick = function handleButtonClick(_ref6) {
170
+ var testId = _ref6.testId,
171
+ createSourcePrimaryToolbarExperience = _ref6.createSourcePrimaryToolbarExperience,
172
+ createSourceBlockMenuExperience = _ref6.createSourceBlockMenuExperience,
173
+ createSourceQuickInsertMenuExperience = _ref6.createSourceQuickInsertMenuExperience,
174
+ deleteReferenceSyncedBlockExperience = _ref6.deleteReferenceSyncedBlockExperience;
175
+ switch (testId) {
176
+ case _types.SYNCED_BLOCK_BUTTON_TEST_ID.primaryToolbarCreate:
177
+ createSourcePrimaryToolbarExperience.start();
178
+ break;
179
+ case _types.SYNCED_BLOCK_BUTTON_TEST_ID.blockMenuCreate:
180
+ createSourceBlockMenuExperience.start();
181
+ break;
182
+ case _types.SYNCED_BLOCK_BUTTON_TEST_ID.quickInsertCreate:
183
+ createSourceQuickInsertMenuExperience.start();
184
+ break;
185
+ case _types.SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceDelete:
186
+ deleteReferenceSyncedBlockExperience.start();
187
+ break;
188
+ default:
189
+ {
190
+ // Exhaustiveness check: if a new SyncedBlockToolbarButtonId is added
191
+ // but not handled above, TypeScript will error here.
192
+ var _exhaustiveCheck = testId;
193
+ return _exhaustiveCheck;
194
+ }
195
+ }
196
+ };
197
+ var isEnterKey = function isEnterKey(key) {
198
+ return key === 'Enter';
199
+ };
200
+ var getTarget = function getTarget(containerElement) {
201
+ if (!targetEl) {
202
+ var element = containerElement === null || containerElement === void 0 ? void 0 : containerElement.querySelector('.ProseMirror');
203
+ if (!element || !(element instanceof HTMLElement)) {
204
+ return null;
205
+ }
206
+ targetEl = element;
207
+ }
208
+ return targetEl;
209
+ };
210
+ var syncedBlockAddedToDomCheck = function syncedBlockAddedToDomCheck(refs) {
211
+ return new _experiences.ExperienceCheckDomMutation({
212
+ onDomMutation: function onDomMutation(_ref7) {
213
+ var mutations = _ref7.mutations;
214
+ if (mutations.some(isBodiedSyncBlockAddedInMutation)) {
215
+ return {
216
+ status: 'success'
217
+ };
218
+ }
219
+ return undefined;
220
+ },
221
+ observeConfig: function observeConfig() {
222
+ return {
223
+ target: getTarget(refs.containerElement),
224
+ options: {
225
+ childList: true
226
+ }
227
+ };
228
+ }
229
+ });
230
+ };
231
+ var isBodiedSyncBlockAddedInMutation = function isBodiedSyncBlockAddedInMutation(_ref8) {
232
+ var type = _ref8.type,
233
+ addedNodes = _ref8.addedNodes;
234
+ return type === 'childList' && (0, _toConsumableArray2.default)(addedNodes).some(isBodiedSyncBlockWithinNode);
235
+ };
236
+ var isBodiedSyncBlockWithinNode = function isBodiedSyncBlockWithinNode(node) {
237
+ return (0, _experiences.getNodeQuery)('[data-prosemirror-node-name="bodiedSyncBlock"]')(node);
238
+ };
239
+ var referenceSyncBlockRemovedFromDomCheck = function referenceSyncBlockRemovedFromDomCheck(refs) {
240
+ return new _experiences.ExperienceCheckDomMutation({
241
+ onDomMutation: function onDomMutation(_ref9) {
242
+ var mutations = _ref9.mutations;
243
+ if (mutations.some(isSyncBlockRemovedInMutation)) {
244
+ return {
245
+ status: 'success'
246
+ };
247
+ }
248
+ return undefined;
249
+ },
250
+ observeConfig: function observeConfig() {
251
+ return {
252
+ target: getTarget(refs.containerElement),
253
+ options: {
254
+ childList: true
255
+ }
256
+ };
257
+ }
258
+ });
259
+ };
260
+ var isSyncBlockRemovedInMutation = function isSyncBlockRemovedInMutation(_ref0) {
261
+ var type = _ref0.type,
262
+ removedNodes = _ref0.removedNodes;
263
+ return type === 'childList' && (0, _toConsumableArray2.default)(removedNodes).some(isSyncBlockWithinNode);
264
+ };
265
+ var isSyncBlockWithinNode = function isSyncBlockWithinNode(node) {
266
+ return (0, _experiences.getNodeQuery)('[data-prosemirror-node-name="syncBlock"]')(node);
267
+ };
@@ -15,8 +15,9 @@ var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
15
15
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
16
  var _editorActions = require("./editor-actions");
17
17
  var _editorCommands = require("./editor-commands");
18
- var _getExperienceTrackingPlugins = require("./pm-plugins/experience-tracking/get-experience-tracking-plugins");
19
18
  var _main = require("./pm-plugins/main");
19
+ var _menuAndToolbarExperiences = require("./pm-plugins/menu-and-toolbar-experiences");
20
+ var _types = require("./types");
20
21
  var _blockMenuComponents = require("./ui/block-menu-components");
21
22
  var _DeleteConfirmationModal = require("./ui/DeleteConfirmationModal");
22
23
  var _Flag = require("./ui/Flag");
@@ -49,14 +50,18 @@ var syncedBlockPlugin = exports.syncedBlockPlugin = function syncedBlockPlugin(_
49
50
  plugin: function plugin(params) {
50
51
  return (0, _main.createPlugin)(config, params, syncBlockStore, api);
51
52
  }
52
- }].concat((0, _toConsumableArray2.default)((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? (0, _getExperienceTrackingPlugins.getExperienceTrackingPlugins)({
53
- refs: refs,
54
- dispatchAnalyticsEvent: function dispatchAnalyticsEvent(payload) {
55
- var _api$analytics2;
56
- return api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions.fireAnalyticsEvent(payload);
57
- },
58
- syncBlockStore: syncBlockStore
59
- }) : []));
53
+ }].concat((0, _toConsumableArray2.default)((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? [{
54
+ name: 'menuAndToolbarExperiencesPlugin',
55
+ plugin: function plugin() {
56
+ return (0, _menuAndToolbarExperiences.getMenuAndToolbarExperiencesPlugin)({
57
+ refs: refs,
58
+ dispatchAnalyticsEvent: function dispatchAnalyticsEvent(payload) {
59
+ var _api$analytics2;
60
+ return api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 || (_api$analytics2 = _api$analytics2.actions) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.fireAnalyticsEvent(payload);
61
+ }
62
+ });
63
+ }
64
+ }] : []));
60
65
  },
61
66
  commands: {
62
67
  copySyncedBlockReferenceToClipboard: function copySyncedBlockReferenceToClipboard() {
@@ -64,13 +69,15 @@ var syncedBlockPlugin = exports.syncedBlockPlugin = function syncedBlockPlugin(_
64
69
  },
65
70
  insertSyncedBlock: function insertSyncedBlock() {
66
71
  return function (_ref2) {
72
+ var _api$analytics3;
67
73
  var tr = _ref2.tr;
68
74
  if (!(config !== null && config !== void 0 && config.enableSourceCreation)) {
69
75
  return null;
70
76
  }
71
77
  return (0, _editorCommands.createSyncedBlock)({
72
78
  tr: tr,
73
- syncBlockStore: syncBlockStore
79
+ syncBlockStore: syncBlockStore,
80
+ fireAnalyticsEvent: api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions.fireAnalyticsEvent
74
81
  }) || null;
75
82
  };
76
83
  }
@@ -106,13 +113,15 @@ var syncedBlockPlugin = exports.syncedBlockPlugin = function syncedBlockPlugin(_
106
113
  });
107
114
  },
108
115
  action: function action(insert, state) {
116
+ var _api$analytics4;
109
117
  return (0, _editorCommands.createSyncedBlock)({
110
118
  tr: state.tr,
111
119
  syncBlockStore: syncBlockStore,
112
- typeAheadInsert: insert
120
+ typeAheadInsert: insert,
121
+ fireAnalyticsEvent: api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions.fireAnalyticsEvent
113
122
  });
114
123
  },
115
- testId: (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? 'create-synced-block-quick-insert-btn' : undefined
124
+ testId: (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? _types.SYNCED_BLOCK_BUTTON_TEST_ID.quickInsertCreate : undefined
116
125
  }];
117
126
  },
118
127
  floatingToolbar: function floatingToolbar(state, intl) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FLAG_ID = exports.EXPERIENCE_ABORT_REASON = void 0;
6
+ exports.SYNCED_BLOCK_BUTTON_TEST_ID = exports.FLAG_ID = void 0;
7
7
  var FLAG_ID = exports.FLAG_ID = /*#__PURE__*/function (FLAG_ID) {
8
8
  FLAG_ID["CANNOT_DELETE_WHEN_OFFLINE"] = "cannot-delete-when-offline";
9
9
  FLAG_ID["CANNOT_EDIT_WHEN_OFFLINE"] = "cannot-edit-when-offline";
@@ -12,6 +12,9 @@ var FLAG_ID = exports.FLAG_ID = /*#__PURE__*/function (FLAG_ID) {
12
12
  FLAG_ID["SYNC_BLOCK_COPIED"] = "sync-block-copied";
13
13
  return FLAG_ID;
14
14
  }({});
15
- var EXPERIENCE_ABORT_REASON = exports.EXPERIENCE_ABORT_REASON = {
16
- EDITOR_DESTROYED: 'editor-destroyed'
15
+ var SYNCED_BLOCK_BUTTON_TEST_ID = exports.SYNCED_BLOCK_BUTTON_TEST_ID = {
16
+ primaryToolbarCreate: 'create-synced-block-toolbar-btn',
17
+ blockMenuCreate: 'create-synced-block-block-menu-btn',
18
+ quickInsertCreate: 'create-synced-block-quick-insert-btn',
19
+ syncedBlockToolbarReferenceDelete: 'reference-synced-block-delete-btn'
17
20
  };
@@ -14,6 +14,7 @@ var _editorPluginConnectivity = require("@atlaskit/editor-plugin-connectivity");
14
14
  var _editorToolbar = require("@atlaskit/editor-toolbar");
15
15
  var _blockSynced = _interopRequireDefault(require("@atlaskit/icon-lab/core/block-synced"));
16
16
  var _utils = require("../pm-plugins/utils/utils");
17
+ var _types = require("../types");
17
18
  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); }
18
19
  var CreateSyncedBlockButton = exports.CreateSyncedBlockButton = function CreateSyncedBlockButton(_ref) {
19
20
  var api = _ref.api;
@@ -53,7 +54,7 @@ var CreateSyncedBlockButton = exports.CreateSyncedBlockButton = function CreateS
53
54
  label: ""
54
55
  }),
55
56
  isDisabled: isDisabled,
56
- testId: "create-synced-block-toolbar-btn",
57
+ testId: _types.SYNCED_BLOCK_BUTTON_TEST_ID.primaryToolbarCreate,
57
58
  onClick: onClick
58
59
  }));
59
60
  };
@@ -14,6 +14,7 @@ var _editorPluginConnectivity = require("@atlaskit/editor-plugin-connectivity");
14
14
  var _editorToolbar = require("@atlaskit/editor-toolbar");
15
15
  var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
16
16
  var _utils = require("../pm-plugins/utils/utils");
17
+ var _types = require("../types");
17
18
  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); }
18
19
  var CreateSyncedBlockDropdownItem = function CreateSyncedBlockDropdownItem(_ref) {
19
20
  var api = _ref.api;
@@ -51,7 +52,7 @@ var CreateSyncedBlockDropdownItem = function CreateSyncedBlockDropdownItem(_ref)
51
52
  }),
52
53
  onClick: onClick,
53
54
  isDisabled: isOffline,
54
- testId: "create-synced-block-block-menu-btn",
55
+ testId: _types.SYNCED_BLOCK_BUTTON_TEST_ID.blockMenuCreate,
55
56
  elemAfter: /*#__PURE__*/_react.default.createElement(_lozenge.default, {
56
57
  appearance: "new"
57
58
  }, formatMessage(_messages.blockMenuMessages.newLozenge))
@@ -18,6 +18,7 @@ var _edit = _interopRequireDefault(require("@atlaskit/icon/core/edit"));
18
18
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
19
19
  var _editorCommands = require("../editor-commands");
20
20
  var _utils2 = require("../pm-plugins/utils/utils");
21
+ var _types = require("../types");
21
22
  var _SyncedLocationDropdown = require("./SyncedLocationDropdown");
22
23
  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); }
23
24
  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; }
@@ -54,7 +55,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(stat
54
55
  title: formatMessage(_messages.default.delete),
55
56
  onClick: (0, _editorCommands.removeSyncedBlock)(api),
56
57
  icon: _delete.default,
57
- testId: (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? 'reference-synced-block-delete-button' : undefined
58
+ testId: (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? _types.SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceDelete : undefined
58
59
  }, hoverDecorationProps(nodeType, _consts.akEditorSelectedNodeClassName));
59
60
  items.push(deleteButton);
60
61
  } else {
@@ -9,7 +9,8 @@ import { FLAG_ID } from '../types';
9
9
  export const createSyncedBlock = ({
10
10
  tr,
11
11
  syncBlockStore,
12
- typeAheadInsert
12
+ typeAheadInsert,
13
+ fireAnalyticsEvent
13
14
  }) => {
14
15
  const {
15
16
  schema: {
@@ -41,9 +42,14 @@ export const createSyncedBlock = ({
41
42
  const conversionInfo = canBeConvertedToSyncBlock(tr.selection);
42
43
  if (!conversionInfo) {
43
44
  if (fg('platform_synced_block_dogfooding')) {
44
- var _syncBlockStore$sourc;
45
- (_syncBlockStore$sourc = syncBlockStore.sourceManager.createExperience) === null || _syncBlockStore$sourc === void 0 ? void 0 : _syncBlockStore$sourc.failure({
46
- reason: 'Selection is not allowed to be converted to sync block'
45
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent({
46
+ action: ACTION.ERROR,
47
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
48
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
49
+ attributes: {
50
+ error: 'Content cannot be converted to sync block'
51
+ },
52
+ eventType: EVENT_TYPE.OPERATIONAL
47
53
  });
48
54
  }
49
55
  return false;