@atlaskit/editor-plugin-synced-block 5.2.1 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/afm-jira/tsconfig.json +1 -1
  3. package/dist/cjs/editor-commands/index.js +43 -5
  4. package/dist/cjs/editor-commands/utils.js +20 -0
  5. package/dist/cjs/pm-plugins/menu-and-toolbar-experiences.js +267 -0
  6. package/dist/cjs/syncedBlockPlugin.js +21 -12
  7. package/dist/cjs/types/index.js +6 -3
  8. package/dist/cjs/ui/CreateSyncedBlockButton.js +2 -1
  9. package/dist/cjs/ui/CreateSyncedBlockDropdownItem.js +2 -1
  10. package/dist/cjs/ui/SyncBlockRefresher.js +18 -4
  11. package/dist/cjs/ui/SyncedLocationDropdown.js +14 -11
  12. package/dist/cjs/ui/floating-toolbar.js +21 -2
  13. package/dist/es2019/editor-commands/index.js +44 -4
  14. package/dist/es2019/editor-commands/utils.js +14 -0
  15. package/dist/es2019/pm-plugins/menu-and-toolbar-experiences.js +261 -0
  16. package/dist/es2019/syncedBlockPlugin.js +19 -12
  17. package/dist/es2019/types/index.js +5 -2
  18. package/dist/es2019/ui/CreateSyncedBlockButton.js +2 -1
  19. package/dist/es2019/ui/CreateSyncedBlockDropdownItem.js +2 -1
  20. package/dist/es2019/ui/SyncBlockRefresher.js +18 -4
  21. package/dist/es2019/ui/SyncedLocationDropdown.js +14 -11
  22. package/dist/es2019/ui/floating-toolbar.js +20 -3
  23. package/dist/esm/editor-commands/index.js +42 -4
  24. package/dist/esm/editor-commands/utils.js +14 -0
  25. package/dist/esm/pm-plugins/menu-and-toolbar-experiences.js +260 -0
  26. package/dist/esm/syncedBlockPlugin.js +21 -12
  27. package/dist/esm/types/index.js +5 -2
  28. package/dist/esm/ui/CreateSyncedBlockButton.js +2 -1
  29. package/dist/esm/ui/CreateSyncedBlockDropdownItem.js +2 -1
  30. package/dist/esm/ui/SyncBlockRefresher.js +18 -4
  31. package/dist/esm/ui/SyncedLocationDropdown.js +14 -11
  32. package/dist/esm/ui/floating-toolbar.js +22 -3
  33. package/dist/types/editor-commands/index.d.ts +8 -1
  34. package/dist/types/editor-commands/utils.d.ts +2 -0
  35. package/dist/types/pm-plugins/menu-and-toolbar-experiences.d.ts +12 -0
  36. package/dist/types/types/index.d.ts +5 -14
  37. package/dist/types-ts4.5/editor-commands/index.d.ts +8 -1
  38. package/dist/types-ts4.5/editor-commands/utils.d.ts +2 -0
  39. package/dist/types-ts4.5/pm-plugins/menu-and-toolbar-experiences.d.ts +12 -0
  40. package/dist/types-ts4.5/types/index.d.ts +5 -14
  41. package/package.json +3 -3
  42. package/dist/cjs/pm-plugins/experience-tracking/create-reference-experience.js +0 -113
  43. package/dist/cjs/pm-plugins/experience-tracking/create-source-experience.js +0 -169
  44. package/dist/cjs/pm-plugins/experience-tracking/delete-reference-experience.js +0 -175
  45. package/dist/cjs/pm-plugins/experience-tracking/delete-source-experience.js +0 -103
  46. package/dist/cjs/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -61
  47. package/dist/cjs/pm-plugins/experience-tracking/provider-only-experiences.js +0 -128
  48. package/dist/cjs/pm-plugins/utils/experience-tracking-utils.js +0 -85
  49. package/dist/es2019/pm-plugins/experience-tracking/create-reference-experience.js +0 -109
  50. package/dist/es2019/pm-plugins/experience-tracking/create-source-experience.js +0 -166
  51. package/dist/es2019/pm-plugins/experience-tracking/delete-reference-experience.js +0 -181
  52. package/dist/es2019/pm-plugins/experience-tracking/delete-source-experience.js +0 -98
  53. package/dist/es2019/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -46
  54. package/dist/es2019/pm-plugins/experience-tracking/provider-only-experiences.js +0 -127
  55. package/dist/es2019/pm-plugins/utils/experience-tracking-utils.js +0 -65
  56. package/dist/esm/pm-plugins/experience-tracking/create-reference-experience.js +0 -107
  57. package/dist/esm/pm-plugins/experience-tracking/create-source-experience.js +0 -163
  58. package/dist/esm/pm-plugins/experience-tracking/delete-reference-experience.js +0 -169
  59. package/dist/esm/pm-plugins/experience-tracking/delete-source-experience.js +0 -97
  60. package/dist/esm/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -55
  61. package/dist/esm/pm-plugins/experience-tracking/provider-only-experiences.js +0 -122
  62. package/dist/esm/pm-plugins/utils/experience-tracking-utils.js +0 -79
  63. package/dist/types/pm-plugins/experience-tracking/create-reference-experience.d.ts +0 -10
  64. package/dist/types/pm-plugins/experience-tracking/create-source-experience.d.ts +0 -10
  65. package/dist/types/pm-plugins/experience-tracking/delete-reference-experience.d.ts +0 -13
  66. package/dist/types/pm-plugins/experience-tracking/delete-source-experience.d.ts +0 -12
  67. package/dist/types/pm-plugins/experience-tracking/get-experience-tracking-plugins.d.ts +0 -5
  68. package/dist/types/pm-plugins/experience-tracking/provider-only-experiences.d.ts +0 -3
  69. package/dist/types/pm-plugins/utils/experience-tracking-utils.d.ts +0 -9
  70. package/dist/types-ts4.5/pm-plugins/experience-tracking/create-reference-experience.d.ts +0 -10
  71. package/dist/types-ts4.5/pm-plugins/experience-tracking/create-source-experience.d.ts +0 -10
  72. package/dist/types-ts4.5/pm-plugins/experience-tracking/delete-reference-experience.d.ts +0 -13
  73. package/dist/types-ts4.5/pm-plugins/experience-tracking/delete-source-experience.d.ts +0 -12
  74. package/dist/types-ts4.5/pm-plugins/experience-tracking/get-experience-tracking-plugins.d.ts +0 -5
  75. package/dist/types-ts4.5/pm-plugins/experience-tracking/provider-only-experiences.d.ts +0 -3
  76. package/dist/types-ts4.5/pm-plugins/utils/experience-tracking-utils.d.ts +0 -9
@@ -1,107 +0,0 @@
1
- import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
2
- import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
3
- import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
4
- import { PluginKey } from '@atlaskit/editor-prosemirror/state';
5
- import { EXPERIENCE_ABORT_REASON } from '../../types';
6
- import { getAddedResourceIds, wasSyncBlockDeletedOrAddedByHistory, getTarget } from '../utils/experience-tracking-utils';
7
- var isPastedFromFabricEditor = function isPastedFromFabricEditor(html) {
8
- return !!html && html.indexOf('data-pm-slice="') >= 0;
9
- };
10
- var pluginKey = new PluginKey('createReferenceSyncBlockExperience');
11
- var START_METHOD = {
12
- PASTE: 'paste',
13
- UNDO: 'undo',
14
- REDO: 'redo'
15
- };
16
-
17
- /**
18
- * This experience tracks when a reference sync block is inserted.
19
- *
20
- * Start: When user pastes a sync block from editor and createSyncedBlock is called
21
- * Success: When the sync block is added to the DOM within 500ms of start
22
- * Failure: When 500ms passes without the reference sync block being added to the DOM
23
- */
24
- export var getCreateReferenceExperiencePlugin = function getCreateReferenceExperiencePlugin(_ref) {
25
- var refs = _ref.refs,
26
- dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent;
27
- var experience = getCreateReferenceExperience({
28
- refs: refs,
29
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
30
- });
31
- return new SafePlugin({
32
- key: pluginKey,
33
- view: function view() {
34
- return {
35
- destroy: function destroy() {
36
- experience.abort({
37
- reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
38
- });
39
- }
40
- };
41
- },
42
- props: {
43
- handlePaste: function handlePaste(_view, rawEvent, slice) {
44
- var _event$clipboardData;
45
- var event = rawEvent;
46
- var html = (_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.getData('text/html');
47
-
48
- // do not start on paste from renderer, because this flattens the content and does not create a reference block
49
- if (isPastedFromFabricEditor(html)) {
50
- slice.content.forEach(function (node) {
51
- if (node.type.name === 'syncBlock' || node.type.name === 'bodiedSyncBlock') {
52
- experience.start({
53
- method: START_METHOD.PASTE
54
- });
55
- }
56
- });
57
- }
58
- }
59
- },
60
- appendTransaction: function appendTransaction(transactions, oldState, newState) {
61
- transactions.forEach(function (tr) {
62
- var _wasSyncBlockDeletedO = wasSyncBlockDeletedOrAddedByHistory(tr, oldState, newState),
63
- hasAddedSyncBlock = _wasSyncBlockDeletedO.hasAddedSyncBlock,
64
- isUndo = _wasSyncBlockDeletedO.isUndo;
65
- if (hasAddedSyncBlock) {
66
- experience.start({
67
- method: isUndo ? START_METHOD.UNDO : START_METHOD.REDO
68
- });
69
- }
70
- });
71
- return null;
72
- }
73
- });
74
- };
75
- var getCreateReferenceExperience = function getCreateReferenceExperience(_ref2) {
76
- var refs = _ref2.refs,
77
- dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
78
- return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
79
- actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
80
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
81
- checks: [new ExperienceCheckTimeout({
82
- durationMs: 500
83
- }), new ExperienceCheckDomMutation({
84
- onDomMutation: function onDomMutation(_ref3) {
85
- var mutations = _ref3.mutations;
86
- var insertedResourceIds = getAddedResourceIds(mutations, '[data-prosemirror-node-name="syncBlock"]');
87
- if (insertedResourceIds.length > 0) {
88
- return {
89
- status: 'success',
90
- metadata: {
91
- insertedResourceIds: insertedResourceIds
92
- }
93
- };
94
- }
95
- return undefined;
96
- },
97
- observeConfig: function observeConfig() {
98
- return {
99
- target: getTarget(refs.containerElement),
100
- options: {
101
- childList: true
102
- }
103
- };
104
- }
105
- })]
106
- });
107
- };
@@ -1,163 +0,0 @@
1
- import { bind } from 'bind-event-listener';
2
- import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
3
- import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout, getPopupContainerFromEditorView, popupWithNestedElement } from '@atlaskit/editor-common/experiences';
4
- import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
- import { PluginKey } from '@atlaskit/editor-prosemirror/state';
6
- import { EXPERIENCE_ABORT_REASON } from '../../types';
7
- import { getAddedResourceIds, getTarget } from '../utils/experience-tracking-utils';
8
- var pluginKey = new PluginKey('createSourceSyncBlockExperience');
9
- var START_METHOD = {
10
- BLOCK_MENU: 'block-menu',
11
- PINNED_TOOLBAR: 'pinned-toolbar',
12
- QUICK_INSERT: 'quick-insert'
13
- };
14
- var SYNCED_BLOCK_CREATE_BUTTON_IDS = ['create-synced-block-toolbar-btn', 'create-synced-block-block-menu-btn', 'create-synced-block-quick-insert-btn'];
15
- var syncedBlockCreateButtonIds = new Set(SYNCED_BLOCK_CREATE_BUTTON_IDS);
16
-
17
- /**
18
- * This experience tracks when a source sync block is inserted.
19
- *
20
- * Start: When user inserts a sync block via block menu, quick insert or pinned toolbar
21
- * Success: When the sync block is added to the DOM within 3000ms of start
22
- * Failure: When 3000ms passes without the source sync block being added to the DOM
23
- */
24
- export var getCreateSourceExperiencePlugin = function getCreateSourceExperiencePlugin(_ref) {
25
- var refs = _ref.refs,
26
- dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
27
- syncBlockStore = _ref.syncBlockStore;
28
- var popupsTargetEl;
29
- var editorViewEl;
30
- var getPopupsTarget = function getPopupsTarget() {
31
- if (!popupsTargetEl) {
32
- popupsTargetEl = refs.popupsMountPoint || refs.wrapperElement || getPopupContainerFromEditorView(editorViewEl);
33
- }
34
- return popupsTargetEl;
35
- };
36
- var experience = getCreateSourceExperience({
37
- refs: refs,
38
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
39
- });
40
- syncBlockStore.sourceManager.setCreateExperience(experience);
41
- var unbindClickListener = bind(document, {
42
- type: 'click',
43
- listener: function listener(event) {
44
- var target = event.target;
45
- if (!target) {
46
- return;
47
- }
48
- var button = target.closest('button[data-testid]');
49
- if (!button || !(button instanceof HTMLButtonElement)) {
50
- return;
51
- }
52
- var testId = button.dataset.testid;
53
- if (!isSyncedBlockCreateButtonId(testId)) {
54
- return;
55
- }
56
- handleButtonClick(testId, experience);
57
- }
58
- });
59
- var unbindKeydownListener = bind(document, {
60
- type: 'keydown',
61
- listener: function listener(event) {
62
- if (isEnterKey(event.key)) {
63
- var typeaheadPopup = popupWithNestedElement(getPopupsTarget(), '.fabric-editor-typeahead');
64
- if (!typeaheadPopup || !(typeaheadPopup instanceof HTMLElement)) {
65
- return;
66
- }
67
- var firstItem = typeaheadPopup.querySelector('[role="option"]');
68
- if (!firstItem || !(firstItem instanceof HTMLElement)) {
69
- return;
70
- }
71
- var testId = firstItem.dataset.testid;
72
- if (testId === 'create-synced-block-quick-insert-btn') {
73
- experience.start({
74
- method: START_METHOD.QUICK_INSERT
75
- });
76
- }
77
- }
78
- },
79
- options: {
80
- capture: true
81
- }
82
- });
83
- return new SafePlugin({
84
- key: pluginKey,
85
- view: function view(editorView) {
86
- editorViewEl = editorView.dom;
87
- return {
88
- destroy: function destroy() {
89
- experience.abort({
90
- reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
91
- });
92
- unbindClickListener();
93
- unbindKeydownListener();
94
- }
95
- };
96
- }
97
- });
98
- };
99
- var getCreateSourceExperience = function getCreateSourceExperience(_ref2) {
100
- var refs = _ref2.refs,
101
- dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
102
- return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
103
- actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
104
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
105
- checks: [new ExperienceCheckTimeout({
106
- durationMs: 3000
107
- }), new ExperienceCheckDomMutation({
108
- onDomMutation: function onDomMutation(_ref3) {
109
- var mutations = _ref3.mutations;
110
- var createdResourceIds = getAddedResourceIds(mutations, '[data-prosemirror-node-name="bodiedSyncBlock"]');
111
- if (createdResourceIds.length > 0) {
112
- return {
113
- status: 'success',
114
- metadata: {
115
- createdResourceIds: createdResourceIds
116
- }
117
- };
118
- }
119
- return undefined;
120
- },
121
- observeConfig: function observeConfig() {
122
- return {
123
- target: getTarget(refs.containerElement),
124
- options: {
125
- childList: true
126
- }
127
- };
128
- }
129
- })]
130
- });
131
- };
132
- var isSyncedBlockCreateButtonId = function isSyncedBlockCreateButtonId(value) {
133
- return !!value && syncedBlockCreateButtonIds.has(value);
134
- };
135
- var handleButtonClick = function handleButtonClick(testId, experience) {
136
- switch (testId) {
137
- case 'create-synced-block-toolbar-btn':
138
- experience.start({
139
- method: START_METHOD.PINNED_TOOLBAR
140
- });
141
- break;
142
- case 'create-synced-block-block-menu-btn':
143
- experience.start({
144
- method: START_METHOD.BLOCK_MENU
145
- });
146
- break;
147
- case 'create-synced-block-quick-insert-btn':
148
- experience.start({
149
- method: START_METHOD.QUICK_INSERT
150
- });
151
- break;
152
- default:
153
- {
154
- // Exhaustiveness check: if a new SyncedBlockToolbarButtonId is added
155
- // but not handled above, TypeScript will error here.
156
- var _exhaustiveCheck = testId;
157
- return _exhaustiveCheck;
158
- }
159
- }
160
- };
161
- var isEnterKey = function isEnterKey(key) {
162
- return key === 'Enter';
163
- };
@@ -1,169 +0,0 @@
1
- import { bind } from 'bind-event-listener';
2
- import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
3
- import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
4
- import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
- import { PluginKey } from '@atlaskit/editor-prosemirror/state';
6
- import { EXPERIENCE_ABORT_REASON } from '../../types';
7
- import { getRemovedResourceIds, getTarget, wasSyncBlockDeletedOrAddedByHistory } from '../utils/experience-tracking-utils';
8
- var pluginKey = new PluginKey('deleteReferenceSyncBlockExperience');
9
- var START_METHOD = {
10
- ELEMENT_TOOLBAR: 'element-toolbar',
11
- DELETE: 'delete',
12
- TYPED_OVER: 'typed-over',
13
- CUT: 'cut',
14
- UNDO: 'undo',
15
- REDO: 'redo'
16
- };
17
-
18
- /**
19
- * This experience tracks when a reference sync block is deleted.
20
- *
21
- * Start: When user deletes ref sync block from toolbar, presses delete when cursor is in front of ref sync block,
22
- * presses any key with a ref sync block selected, cuts with a ref sync block selected, triggers undo/redo that deletes a ref sync block
23
- * Success: When the sync block is removed from the DOM within 2000ms of start
24
- * Failure: When 2000ms passes without the reference sync block being removed from the DOM
25
- */
26
- export var getDeleteReferenceExperiencePlugin = function getDeleteReferenceExperiencePlugin(_ref) {
27
- var refs = _ref.refs,
28
- dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
29
- syncBlockStore = _ref.syncBlockStore;
30
- var experience = getDeleteReferenceExperience({
31
- refs: refs,
32
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
33
- });
34
- syncBlockStore.sourceManager.setDeleteExperience(experience);
35
- var unbindClickListener = bind(document, {
36
- type: 'click',
37
- listener: function listener(event) {
38
- var target = event.target;
39
- if (!target) {
40
- return;
41
- }
42
- var button = target.closest('button[data-testid]');
43
- if (!button || !(button instanceof HTMLButtonElement)) {
44
- return;
45
- }
46
- var testId = button.dataset.testid;
47
- if (isReferenceSyncedBlockDeleteButtonId(testId)) {
48
- experience.start({
49
- method: START_METHOD.ELEMENT_TOOLBAR
50
- });
51
- }
52
- }
53
- });
54
- return new SafePlugin({
55
- key: pluginKey,
56
- props: {
57
- handleDOMEvents: {
58
- cut: function cut(view) {
59
- var state = view.state;
60
- if (hasSyncBlockInSelection(state.selection)) {
61
- experience.start({
62
- method: START_METHOD.CUT
63
- });
64
- }
65
- return false;
66
- },
67
- keydown: function keydown(view, event) {
68
- var state = view.state;
69
- var hasSelection = hasSyncBlockInSelection(state.selection);
70
- var hasAdjacent = hasSyncBlockBeforeCursor(state.selection);
71
- if (hasSelection) {
72
- experience.start({
73
- method: START_METHOD.TYPED_OVER
74
- });
75
- }
76
- if (isDeleteKey(event.key) && hasAdjacent) {
77
- experience.start({
78
- method: START_METHOD.DELETE
79
- });
80
- }
81
- return false;
82
- }
83
- }
84
- },
85
- appendTransaction: function appendTransaction(transactions, oldState, newState) {
86
- transactions.forEach(function (tr) {
87
- var _wasSyncBlockDeletedO = wasSyncBlockDeletedOrAddedByHistory(tr, oldState, newState),
88
- hasDeletedSyncBlock = _wasSyncBlockDeletedO.hasDeletedSyncBlock,
89
- isUndo = _wasSyncBlockDeletedO.isUndo;
90
- if (hasDeletedSyncBlock) {
91
- experience.start({
92
- method: isUndo ? START_METHOD.UNDO : START_METHOD.REDO
93
- });
94
- }
95
- });
96
- return null;
97
- },
98
- view: function view() {
99
- return {
100
- destroy: function destroy() {
101
- experience.abort({
102
- reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
103
- });
104
- unbindClickListener();
105
- }
106
- };
107
- }
108
- });
109
- };
110
- export var getDeleteReferenceExperience = function getDeleteReferenceExperience(_ref2) {
111
- var refs = _ref2.refs,
112
- dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
113
- return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
114
- actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_DELETE,
115
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
116
- checks: [new ExperienceCheckTimeout({
117
- durationMs: 2000
118
- }), new ExperienceCheckDomMutation({
119
- onDomMutation: function onDomMutation(_ref3) {
120
- var mutations = _ref3.mutations;
121
- var deletedResourceIds = getRemovedResourceIds(mutations, '[data-prosemirror-node-name="syncBlock"]');
122
- if (deletedResourceIds.length > 0) {
123
- return {
124
- status: 'success',
125
- metadata: {
126
- deletedResourceIds: deletedResourceIds
127
- }
128
- };
129
- }
130
- return undefined;
131
- },
132
- observeConfig: function observeConfig() {
133
- return {
134
- target: getTarget(refs.containerElement),
135
- options: {
136
- childList: true
137
- }
138
- };
139
- }
140
- })]
141
- });
142
- };
143
- var isReferenceSyncedBlockDeleteButtonId = function isReferenceSyncedBlockDeleteButtonId(testId) {
144
- return testId === 'reference-synced-block-delete-button';
145
- };
146
- var isDeleteKey = function isDeleteKey(key) {
147
- return key === 'Delete' || key === 'Backspace';
148
- };
149
- var hasSyncBlockInSelection = function hasSyncBlockInSelection(selection) {
150
- var syncBlock = selection.$from.doc.type.schema.nodes.syncBlock;
151
- var found = false;
152
- selection.$from.doc.nodesBetween(selection.from, selection.to, function (node) {
153
- if (node.type === syncBlock) {
154
- found = true;
155
- return false;
156
- }
157
- // sync block nodes can only be found at the top level
158
- return false;
159
- });
160
- return found;
161
- };
162
- var hasSyncBlockBeforeCursor = function hasSyncBlockBeforeCursor(selection) {
163
- if (!selection.empty) {
164
- return false;
165
- }
166
- var syncBlock = selection.$from.doc.type.schema.nodes.syncBlock;
167
- var nodeBefore = selection.$from.nodeBefore;
168
- return (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) === syncBlock;
169
- };
@@ -1,97 +0,0 @@
1
- import { bind } from 'bind-event-listener';
2
- import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
3
- import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
4
- import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
- import { PluginKey } from '@atlaskit/editor-prosemirror/state';
6
- import { EXPERIENCE_ABORT_REASON } from '../../types';
7
- import { getRemovedResourceIds, getTarget } from '../utils/experience-tracking-utils';
8
- var pluginKey = new PluginKey('deleteSourceSyncBlockExperience');
9
- var START_METHOD = {
10
- DELETE_CONFIRM_BUTTON: 'delete-confirm-button'
11
- };
12
-
13
- /**
14
- * This experience tracks when a source sync block is deleted.
15
- *
16
- * Start: When user clicks the delete button in the delete modal
17
- * Success: When the sync block is removed from the DOM within 2000ms of start
18
- * Failure: When 2000ms passes without the source sync block being removed from the DOM
19
- */
20
- export var getDeleteSourceExperiencePlugin = function getDeleteSourceExperiencePlugin(_ref) {
21
- var refs = _ref.refs,
22
- dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
23
- syncBlockStore = _ref.syncBlockStore;
24
- var experience = getDeleteSourceExperience({
25
- refs: refs,
26
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
27
- });
28
- syncBlockStore.sourceManager.setDeleteExperience(experience);
29
- var unbindClickListener = bind(document, {
30
- type: 'click',
31
- listener: function listener(event) {
32
- var target = event.target;
33
- if (!target) {
34
- return;
35
- }
36
- var button = target.closest('button[data-testid]');
37
- if (!button || !(button instanceof HTMLButtonElement)) {
38
- return;
39
- }
40
- var testId = button.dataset.testid;
41
- if (isSyncedBlockDeleteButtonId(testId)) {
42
- experience.start({
43
- method: START_METHOD.DELETE_CONFIRM_BUTTON
44
- });
45
- }
46
- }
47
- });
48
- return new SafePlugin({
49
- key: pluginKey,
50
- view: function view() {
51
- return {
52
- destroy: function destroy() {
53
- experience.abort({
54
- reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
55
- });
56
- unbindClickListener();
57
- }
58
- };
59
- }
60
- });
61
- };
62
- export var getDeleteSourceExperience = function getDeleteSourceExperience(_ref2) {
63
- var refs = _ref2.refs,
64
- dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
65
- return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
66
- actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE,
67
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
68
- checks: [new ExperienceCheckTimeout({
69
- durationMs: 2000
70
- }), new ExperienceCheckDomMutation({
71
- onDomMutation: function onDomMutation(_ref3) {
72
- var mutations = _ref3.mutations;
73
- var deletedResourceIds = getRemovedResourceIds(mutations, '[data-prosemirror-node-name="bodiedSyncBlock"]');
74
- if (deletedResourceIds.length > 0) {
75
- return {
76
- status: 'success',
77
- metadata: {
78
- deletedResourceIds: deletedResourceIds
79
- }
80
- };
81
- }
82
- return undefined;
83
- },
84
- observeConfig: function observeConfig() {
85
- return {
86
- target: getTarget(refs.containerElement),
87
- options: {
88
- childList: true
89
- }
90
- };
91
- }
92
- })]
93
- });
94
- };
95
- var isSyncedBlockDeleteButtonId = function isSyncedBlockDeleteButtonId(testId) {
96
- return testId === 'synced-block-delete-confirmation-modal-delete-button';
97
- };
@@ -1,55 +0,0 @@
1
- import { getCreateReferenceExperiencePlugin } from "./create-reference-experience";
2
- import { getCreateSourceExperiencePlugin } from "./create-source-experience";
3
- import { getDeleteReferenceExperiencePlugin } from "./delete-reference-experience";
4
- import { getDeleteSourceExperiencePlugin } from "./delete-source-experience";
5
- import { getProviderOnlyExperiencesPlugin } from "./provider-only-experiences";
6
- export var getExperienceTrackingPlugins = function getExperienceTrackingPlugins(_ref) {
7
- var refs = _ref.refs,
8
- dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
9
- syncBlockStore = _ref.syncBlockStore;
10
- return [{
11
- name: 'createReferenceSyncedBlockExperiencePlugin',
12
- plugin: function plugin() {
13
- return getCreateReferenceExperiencePlugin({
14
- refs: refs,
15
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
16
- });
17
- }
18
- }, {
19
- name: 'createSourceSyncedBlockExperiencePlugin',
20
- plugin: function plugin() {
21
- return getCreateSourceExperiencePlugin({
22
- refs: refs,
23
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
24
- syncBlockStore: syncBlockStore
25
- });
26
- }
27
- }, {
28
- name: 'deleteSourceExperiencePlugin',
29
- plugin: function plugin() {
30
- return getDeleteSourceExperiencePlugin({
31
- refs: refs,
32
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
33
- syncBlockStore: syncBlockStore
34
- });
35
- }
36
- }, {
37
- name: 'deleteReferenceExperiencePlugin',
38
- plugin: function plugin() {
39
- return getDeleteReferenceExperiencePlugin({
40
- refs: refs,
41
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
42
- syncBlockStore: syncBlockStore
43
- });
44
- }
45
- }, {
46
- name: 'providerOnlySyncedBlockExperiencesPlugin',
47
- plugin: function plugin() {
48
- return getProviderOnlyExperiencesPlugin({
49
- refs: refs,
50
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
51
- syncBlockStore: syncBlockStore
52
- });
53
- }
54
- }];
55
- };