@atlaskit/editor-plugin-card 0.3.4 → 0.3.5

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 (99) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/analytics/create-events-queue.js +55 -0
  3. package/dist/cjs/{pm-plugins/analytics → analytics}/events-from-tr.js +90 -81
  4. package/dist/cjs/{pm-plugins/analytics → analytics}/index.js +3 -3
  5. package/dist/cjs/analytics/types.js +24 -0
  6. package/dist/cjs/analytics/utils.js +134 -0
  7. package/dist/cjs/plugin.js +7 -4
  8. package/dist/cjs/pm-plugins/actions.js +1 -10
  9. package/dist/cjs/pm-plugins/doc.js +3 -0
  10. package/dist/cjs/pm-plugins/main.js +15 -13
  11. package/dist/cjs/pm-plugins/reducers.js +0 -7
  12. package/dist/cjs/ui/EditorLinkingPlatformAnalytics/DatasourceEvents.js +52 -0
  13. package/dist/cjs/ui/EditorLinkingPlatformAnalytics/LinkEvents.js +132 -0
  14. package/dist/cjs/ui/EditorLinkingPlatformAnalytics/common.js +65 -0
  15. package/dist/cjs/ui/EditorLinkingPlatformAnalytics/index.js +54 -0
  16. package/dist/cjs/version.json +1 -1
  17. package/dist/es2019/analytics/create-events-queue.js +43 -0
  18. package/dist/es2019/{pm-plugins/analytics → analytics}/events-from-tr.js +82 -72
  19. package/dist/es2019/analytics/index.js +2 -0
  20. package/dist/es2019/analytics/types.js +17 -0
  21. package/dist/es2019/analytics/utils.js +118 -0
  22. package/dist/es2019/plugin.js +7 -6
  23. package/dist/es2019/pm-plugins/actions.js +0 -4
  24. package/dist/es2019/pm-plugins/doc.js +3 -0
  25. package/dist/es2019/pm-plugins/main.js +15 -15
  26. package/dist/es2019/pm-plugins/reducers.js +0 -8
  27. package/dist/es2019/ui/EditorLinkingPlatformAnalytics/DatasourceEvents.js +46 -0
  28. package/dist/es2019/ui/EditorLinkingPlatformAnalytics/LinkEvents.js +127 -0
  29. package/dist/es2019/ui/EditorLinkingPlatformAnalytics/common.js +60 -0
  30. package/dist/es2019/ui/EditorLinkingPlatformAnalytics/index.js +30 -0
  31. package/dist/es2019/version.json +1 -1
  32. package/dist/esm/analytics/create-events-queue.js +48 -0
  33. package/dist/esm/{pm-plugins/analytics → analytics}/events-from-tr.js +90 -80
  34. package/dist/esm/analytics/index.js +2 -0
  35. package/dist/esm/analytics/types.js +17 -0
  36. package/dist/esm/analytics/utils.js +118 -0
  37. package/dist/esm/plugin.js +7 -4
  38. package/dist/esm/pm-plugins/actions.js +0 -8
  39. package/dist/esm/pm-plugins/doc.js +3 -0
  40. package/dist/esm/pm-plugins/main.js +15 -13
  41. package/dist/esm/pm-plugins/reducers.js +0 -7
  42. package/dist/esm/ui/EditorLinkingPlatformAnalytics/DatasourceEvents.js +44 -0
  43. package/dist/esm/ui/EditorLinkingPlatformAnalytics/LinkEvents.js +125 -0
  44. package/dist/esm/ui/EditorLinkingPlatformAnalytics/common.js +55 -0
  45. package/dist/esm/ui/EditorLinkingPlatformAnalytics/index.js +47 -0
  46. package/dist/esm/version.json +1 -1
  47. package/dist/types/analytics/create-events-queue.d.ts +21 -0
  48. package/dist/types/analytics/events-from-tr.d.ts +19 -0
  49. package/dist/types/analytics/index.d.ts +2 -0
  50. package/dist/types/analytics/types.d.ts +66 -0
  51. package/dist/types/analytics/utils.d.ts +22 -0
  52. package/dist/types/pm-plugins/actions.d.ts +1 -2
  53. package/dist/types/pm-plugins/util/state.d.ts +0 -1
  54. package/dist/types/types.d.ts +4 -34
  55. package/dist/types/ui/EditorLinkingPlatformAnalytics/DatasourceEvents.d.ts +6 -0
  56. package/dist/types/ui/EditorLinkingPlatformAnalytics/LinkEvents.d.ts +6 -0
  57. package/dist/types/ui/EditorLinkingPlatformAnalytics/common.d.ts +20 -0
  58. package/dist/types/ui/EditorLinkingPlatformAnalytics/index.d.ts +9 -0
  59. package/dist/types-ts4.5/analytics/create-events-queue.d.ts +21 -0
  60. package/dist/types-ts4.5/analytics/events-from-tr.d.ts +19 -0
  61. package/dist/types-ts4.5/analytics/index.d.ts +2 -0
  62. package/dist/types-ts4.5/analytics/types.d.ts +66 -0
  63. package/dist/types-ts4.5/analytics/utils.d.ts +22 -0
  64. package/dist/types-ts4.5/pm-plugins/actions.d.ts +1 -2
  65. package/dist/types-ts4.5/pm-plugins/util/state.d.ts +0 -1
  66. package/dist/types-ts4.5/types.d.ts +4 -34
  67. package/dist/types-ts4.5/ui/EditorLinkingPlatformAnalytics/DatasourceEvents.d.ts +6 -0
  68. package/dist/types-ts4.5/ui/EditorLinkingPlatformAnalytics/LinkEvents.d.ts +6 -0
  69. package/dist/types-ts4.5/ui/EditorLinkingPlatformAnalytics/common.d.ts +20 -0
  70. package/dist/types-ts4.5/ui/EditorLinkingPlatformAnalytics/index.d.ts +9 -0
  71. package/package.json +2 -2
  72. package/report.api.md +84 -8
  73. package/tmp/api-report-tmp.d.ts +81 -8
  74. package/dist/cjs/pm-plugins/analytics/create-analytics-queue.js +0 -48
  75. package/dist/cjs/pm-plugins/analytics/types.js +0 -5
  76. package/dist/cjs/pm-plugins/analytics/utils.js +0 -178
  77. package/dist/cjs/ui/EditorSmartCardEventsNext.js +0 -204
  78. package/dist/es2019/pm-plugins/analytics/create-analytics-queue.js +0 -38
  79. package/dist/es2019/pm-plugins/analytics/index.js +0 -2
  80. package/dist/es2019/pm-plugins/analytics/types.js +0 -1
  81. package/dist/es2019/pm-plugins/analytics/utils.js +0 -160
  82. package/dist/es2019/ui/EditorSmartCardEventsNext.js +0 -188
  83. package/dist/esm/pm-plugins/analytics/create-analytics-queue.js +0 -41
  84. package/dist/esm/pm-plugins/analytics/index.js +0 -2
  85. package/dist/esm/pm-plugins/analytics/types.js +0 -1
  86. package/dist/esm/pm-plugins/analytics/utils.js +0 -160
  87. package/dist/esm/ui/EditorSmartCardEventsNext.js +0 -192
  88. package/dist/types/pm-plugins/analytics/create-analytics-queue.d.ts +0 -10
  89. package/dist/types/pm-plugins/analytics/events-from-tr.d.ts +0 -17
  90. package/dist/types/pm-plugins/analytics/index.d.ts +0 -2
  91. package/dist/types/pm-plugins/analytics/types.d.ts +0 -12
  92. package/dist/types/pm-plugins/analytics/utils.d.ts +0 -32
  93. package/dist/types/ui/EditorSmartCardEventsNext.d.ts +0 -18
  94. package/dist/types-ts4.5/pm-plugins/analytics/create-analytics-queue.d.ts +0 -10
  95. package/dist/types-ts4.5/pm-plugins/analytics/events-from-tr.d.ts +0 -17
  96. package/dist/types-ts4.5/pm-plugins/analytics/index.d.ts +0 -2
  97. package/dist/types-ts4.5/pm-plugins/analytics/types.d.ts +0 -12
  98. package/dist/types-ts4.5/pm-plugins/analytics/utils.d.ts +0 -32
  99. package/dist/types-ts4.5/ui/EditorSmartCardEventsNext.d.ts +0 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @atlaskit/editor-plugin-card
2
2
 
3
+ ## 0.3.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`f9cdc991f20`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f9cdc991f20) - Updates analytics to better support datasources
8
+ - Updated dependencies
9
+
3
10
  ## 0.3.4
4
11
 
5
12
  ### Patch Changes
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createEventsQueue = void 0;
7
+ /**
8
+ * Simple mechanism to defer event related callbacks
9
+ *
10
+ * Probably think twice whether your event should use this instead of
11
+ * editor's built-in `editor-plugin-analytics`
12
+ *
13
+ * Editor-Plugin-Analytics provides methods methods to dispatch events, and attach events into prosemiror transactions
14
+ * However we do not have access to the smart card context in prosemirror
15
+ *
16
+ * We are using this queue to relay events occurring in prosemirror (which does not have access to the react context)
17
+ * to be subscribed to elsewhere where the react context is available (contentComponent or otherwise) (smart card context)
18
+ * in order to be able to annotate events with additional attributes to events
19
+ */
20
+ var createEventsQueue = function createEventsQueue() {
21
+ var queue = [];
22
+ var subscribers = new Set();
23
+ var subscribe = function subscribe(subscriber) {
24
+ subscribers.add(subscriber);
25
+ return function () {
26
+ subscribers.delete(subscriber);
27
+ };
28
+ };
29
+ var push = function push() {
30
+ queue.push.apply(queue, arguments);
31
+ };
32
+ var flush = function flush() {
33
+ var _loop = function _loop() {
34
+ var event = queue.shift();
35
+ if (event) {
36
+ subscribers.forEach(function (subscriber) {
37
+ subscriber(event);
38
+ });
39
+ }
40
+ };
41
+ while (queue.length) {
42
+ _loop();
43
+ }
44
+ };
45
+ var getSize = function getSize() {
46
+ return queue.length;
47
+ };
48
+ return {
49
+ push: push,
50
+ flush: flush,
51
+ subscribe: subscribe,
52
+ getSize: getSize
53
+ };
54
+ };
55
+ exports.createEventsQueue = createEventsQueue;
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.eventsFromTransaction = eventsFromTransaction;
8
- exports.findChangedLinks = void 0;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+ exports.findChanged = void 0;
10
9
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
11
  var _steps = require("@atlaskit/adf-schema/steps");
@@ -14,30 +13,23 @@ var _analytics = require("@atlaskit/editor-common/analytics");
14
13
  var _card = require("@atlaskit/editor-common/card");
15
14
  var _utils = require("@atlaskit/editor-common/utils");
16
15
  var _transform = require("@atlaskit/editor-prosemirror/transform");
17
- var _pluginKey = require("../plugin-key");
18
- var _state = require("../util/state");
16
+ var _pluginKey = require("../pm-plugins/plugin-key");
17
+ var _state = require("../pm-plugins/util/state");
18
+ var _types = require("./types");
19
19
  var _utils2 = require("./utils");
20
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
- var findLinksInNodeRange = function findLinksInNodeRange(doc, schema, from, to) {
23
- var links = [];
24
- doc.nodesBetween(from, to, function (node, pos) {
25
- if ((0, _utils2.isLink)(schema, node)) {
26
- var entireLinkInRange = pos >= from && pos + node.nodeSize <= to;
27
- if (entireLinkInRange) {
28
- var link = (0, _utils2.linkObjectFromNode)(doc, schema, node, pos);
29
- if (link) {
30
- links.push(link);
31
- }
32
- }
33
- }
34
- });
35
- return links;
36
- };
37
- var findChangedLinks = function findChangedLinks(tr, state) {
20
+ /**
21
+ * Find the links, smartLinks, datasources that were changed in a transaction
22
+ */
23
+ var findChanged = function findChanged(tr, state) {
38
24
  var schema = tr.doc.type.schema;
39
25
  var removed = [];
40
26
  var inserted = [];
27
+ /**
28
+ * Ideally we have the "before" and "after" states of the "entity"
29
+ * being updated, but if the update is via a "queue for upgrade"
30
+ * then we no longer have access to the "before" state, because the "before"
31
+ * state was replaced with a blue link to be upgraded
32
+ */
41
33
  var updated = [];
42
34
  var queuedForUpgrade = isTransactionQueuedForUpgrade(tr);
43
35
  var isResolveReplace = isTransactionResolveReplace(tr);
@@ -64,26 +56,30 @@ var findChangedLinks = function findChangedLinks(tr, state) {
64
56
  if (step instanceof _transform.AddMarkStep) {
65
57
  var addMarkStep = step;
66
58
  if ((0, _utils.isLinkMark)(addMarkStep.mark, schema)) {
67
- /**
68
- * For url text pasted on plain text
69
- */
70
- insertedInStep.push({
71
- type: 'mark',
72
- pos: addMarkStep.from,
73
- mark: addMarkStep.mark,
74
- nodeContext: (0, _utils2.getLinkNodeContext)(after, addMarkStep.from)
75
- });
59
+ var node = after.nodeAt(addMarkStep.from);
60
+ if (node) {
61
+ /**
62
+ * For url text pasted on plain text
63
+ */
64
+ insertedInStep.push({
65
+ pos: addMarkStep.from,
66
+ node: node,
67
+ nodeContext: (0, _utils2.getNodeContext)(after, addMarkStep.from)
68
+ });
69
+ }
76
70
  }
77
71
  }
78
72
  if (step instanceof _transform.RemoveMarkStep) {
79
73
  var removeMarkStep = step;
80
74
  if ((0, _utils.isLinkMark)(removeMarkStep.mark, schema)) {
81
- removedInStep.push({
82
- type: 'mark',
83
- pos: removeMarkStep.from,
84
- mark: removeMarkStep.mark,
85
- nodeContext: (0, _utils2.getLinkNodeContext)(before, removeMarkStep.from)
86
- });
75
+ var _node = before.nodeAt(removeMarkStep.from);
76
+ if (_node) {
77
+ removedInStep.push({
78
+ pos: removeMarkStep.from,
79
+ node: _node,
80
+ nodeContext: (0, _utils2.getNodeContext)(before, removeMarkStep.from)
81
+ });
82
+ }
87
83
  }
88
84
  }
89
85
  stepMap.forEach(function (oldStart, oldEnd, newStart, newEnd) {
@@ -94,13 +90,17 @@ var findChangedLinks = function findChangedLinks(tr, state) {
94
90
  var insertedInRange = [];
95
91
 
96
92
  // Removed
97
- removedInRange.push.apply(removedInRange, (0, _toConsumableArray2.default)(findLinksInNodeRange(before, schema, oldStart, oldEnd)));
93
+ removedInRange.push.apply(removedInRange, (0, _toConsumableArray2.default)((0, _utils2.findInNodeRange)(before, oldStart, oldEnd, function (node) {
94
+ return !!(0, _utils2.getNodeSubject)(node);
95
+ })));
98
96
  // Inserted
99
- insertedInRange.push.apply(insertedInRange, (0, _toConsumableArray2.default)(findLinksInNodeRange(after, schema, newStart, newEnd)));
97
+ insertedInRange.push.apply(insertedInRange, (0, _toConsumableArray2.default)((0, _utils2.findInNodeRange)(after, newStart, newEnd, function (node) {
98
+ return !!(0, _utils2.getNodeSubject)(node);
99
+ })));
100
100
  removedInStep.push.apply(removedInStep, removedInRange);
101
101
  insertedInStep.push.apply(insertedInStep, insertedInRange);
102
102
  });
103
- var omitQueuedLinks = function omitQueuedLinks(links) {
103
+ var omitRequestsForUpgrade = function omitRequestsForUpgrade(links) {
104
104
  if (!queuedForUpgrade) {
105
105
  return links;
106
106
  }
@@ -122,7 +122,7 @@ var findChangedLinks = function findChangedLinks(tr, state) {
122
122
  if (!isResolveReplace) {
123
123
  removed.push.apply(removed, removedInStep);
124
124
  }
125
- inserted.push.apply(inserted, (0, _toConsumableArray2.default)(omitQueuedLinks(insertedInStep)));
125
+ inserted.push.apply(inserted, (0, _toConsumableArray2.default)(omitRequestsForUpgrade(insertedInStep)));
126
126
  };
127
127
  for (var i = 0; i < tr.steps.length; i++) {
128
128
  _loop(i);
@@ -135,7 +135,7 @@ var findChangedLinks = function findChangedLinks(tr, state) {
135
135
  */
136
136
  if (inserted.length === 0 && isResolveReplace) {
137
137
  var positions = getResolvePositions(tr, state);
138
- inserted.push.apply(inserted, (0, _toConsumableArray2.default)((0, _utils2.findLinksAtPositions)(tr, positions)));
138
+ inserted.push.apply(inserted, (0, _toConsumableArray2.default)((0, _utils2.findAtPositions)(tr, positions)));
139
139
  }
140
140
  if (!isUpdate) {
141
141
  var _getLinkMetadataFromT = (0, _card.getLinkMetadataFromTransaction)(tr),
@@ -144,7 +144,7 @@ var findChangedLinks = function findChangedLinks(tr, state) {
144
144
  * If there is no identifiable input method, and the links inserted and removed appear to be the same,
145
145
  * then this transaction likely is not intended to be consided to be the insertion and removal of links
146
146
  */
147
- if (!inputMethod && (0, _utils2.areSameLinks)(removed, inserted)) {
147
+ if (!inputMethod && (0, _utils2.areSameNodes)(removed, inserted)) {
148
148
  return {
149
149
  removed: [],
150
150
  inserted: [],
@@ -189,7 +189,7 @@ var findChangedLinks = function findChangedLinks(tr, state) {
189
189
  /**
190
190
  * List of actions to be considered link "updates"
191
191
  */
192
- exports.findChangedLinks = findChangedLinks;
192
+ exports.findChanged = findChanged;
193
193
  var UPDATE_ACTIONS = [_analytics.ACTION.CHANGED_TYPE, _analytics.ACTION.UPDATED];
194
194
 
195
195
  /**
@@ -300,17 +300,10 @@ function eventsFromTransaction(tr, state) {
300
300
  action = _getLinkMetadataFromT2.action,
301
301
  inputMethod = _getLinkMetadataFromT2.inputMethod,
302
302
  sourceEvent = _getLinkMetadataFromT2.sourceEvent;
303
- var contextualData = {
304
- action: action,
305
- inputMethod: inputMethod,
306
- sourceEvent: sourceEvent,
307
- isUndo: isUndo,
308
- isRedo: isRedo
309
- };
310
- var _findChangedLinks = findChangedLinks(tr, state),
311
- removed = _findChangedLinks.removed,
312
- inserted = _findChangedLinks.inserted,
313
- updated = _findChangedLinks.updated;
303
+ var _findChanged = findChanged(tr, state),
304
+ removed = _findChanged.removed,
305
+ inserted = _findChanged.inserted,
306
+ updated = _findChanged.updated;
314
307
  var MAX_LINK_EVENTS = 50;
315
308
  if ([removed, inserted, updated].some(function (arr) {
316
309
  return arr.length > MAX_LINK_EVENTS;
@@ -320,41 +313,57 @@ function eventsFromTransaction(tr, state) {
320
313
  for (var i = 0; i < updated.length; i++) {
321
314
  var _update$previous$disp;
322
315
  var update = updated[i];
323
- var link = update.inserted;
324
- var url = (0, _utils2.getLinkUrl)(link);
325
- var display = (0, _utils2.appearanceForLink)(link);
326
- var previousDisplay = 'removed' in update ? (0, _utils2.appearanceForLink)(update.removed) : (_update$previous$disp = update.previous.display) !== null && _update$previous$disp !== void 0 ? _update$previous$disp : 'unknown';
327
- if (url) {
316
+ var _inserted = update.inserted;
317
+ var node = _inserted.node,
318
+ nodeContext = _inserted.nodeContext;
319
+ var subject = (0, _utils2.getNodeSubject)(node);
320
+
321
+ /**
322
+ * Not great, wish we had the previous node but we never stored it
323
+ */
324
+ var previousDisplay = 'removed' in update ? (0, _utils2.appearanceForLink)(update.removed.node) : (_update$previous$disp = update.previous.display) !== null && _update$previous$disp !== void 0 ? _update$previous$disp : 'unknown';
325
+ if (subject) {
328
326
  events.push({
329
- type: 'updated',
330
- data: _objectSpread(_objectSpread({}, contextualData), {}, {
331
- url: url,
332
- display: display,
333
- previousDisplay: previousDisplay,
334
- nodeContext: link.nodeContext
335
- })
327
+ event: _types.EVENT.UPDATED,
328
+ subject: subject,
329
+ data: {
330
+ node: node,
331
+ nodeContext: nodeContext,
332
+ action: action,
333
+ inputMethod: inputMethod,
334
+ sourceEvent: sourceEvent,
335
+ isUndo: isUndo,
336
+ isRedo: isRedo,
337
+ previousDisplay: previousDisplay
338
+ }
336
339
  });
337
340
  }
338
341
  }
339
- var pushEvents = function pushEvents(links, type) {
340
- for (var _i2 = 0; _i2 < links.length; _i2++) {
341
- var _link = links[_i2];
342
- var _url = (0, _utils2.getLinkUrl)(_link);
343
- var _display = (0, _utils2.appearanceForLink)(_link);
344
- if (_url) {
342
+ var pushEvents = function pushEvents(entities, event) {
343
+ for (var _i2 = 0; _i2 < entities.length; _i2++) {
344
+ var _entities$_i = entities[_i2],
345
+ _node2 = _entities$_i.node,
346
+ _nodeContext = _entities$_i.nodeContext;
347
+ var _subject = (0, _utils2.getNodeSubject)(_node2);
348
+ if (_subject) {
345
349
  events.push({
346
- type: type,
347
- data: _objectSpread(_objectSpread({}, contextualData), {}, {
348
- url: _url,
349
- display: _display,
350
- nodeContext: _link.nodeContext
351
- })
350
+ event: event,
351
+ subject: _subject,
352
+ data: {
353
+ node: _node2,
354
+ nodeContext: _nodeContext,
355
+ action: action,
356
+ inputMethod: inputMethod,
357
+ sourceEvent: sourceEvent,
358
+ isUndo: isUndo,
359
+ isRedo: isRedo
360
+ }
352
361
  });
353
362
  }
354
363
  }
355
364
  };
356
- pushEvents(removed, 'deleted');
357
- pushEvents(inserted, 'created');
365
+ pushEvents(removed, _types.EVENT.DELETED);
366
+ pushEvents(inserted, _types.EVENT.CREATED);
358
367
  return events;
359
368
  } catch (err) {
360
369
  return events;
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "createAnalyticsQueue", {
6
+ Object.defineProperty(exports, "createEventsQueue", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _createAnalyticsQueue.createAnalyticsQueue;
9
+ return _createEventsQueue.createEventsQueue;
10
10
  }
11
11
  });
12
12
  Object.defineProperty(exports, "eventsFromTransaction", {
@@ -15,5 +15,5 @@ Object.defineProperty(exports, "eventsFromTransaction", {
15
15
  return _eventsFromTr.eventsFromTransaction;
16
16
  }
17
17
  });
18
- var _createAnalyticsQueue = require("./create-analytics-queue");
18
+ var _createEventsQueue = require("./create-events-queue");
19
19
  var _eventsFromTr = require("./events-from-tr");
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EVENT_SUBJECT = exports.EVENT = void 0;
7
+ var EVENT = /*#__PURE__*/function (EVENT) {
8
+ EVENT["CREATED"] = "created";
9
+ EVENT["UPDATED"] = "updated";
10
+ EVENT["DELETED"] = "deleted";
11
+ return EVENT;
12
+ }({});
13
+ exports.EVENT = EVENT;
14
+ var EVENT_SUBJECT = /*#__PURE__*/function (EVENT_SUBJECT) {
15
+ EVENT_SUBJECT["LINK"] = "link";
16
+ EVENT_SUBJECT["DATASOURCE"] = "datasource";
17
+ return EVENT_SUBJECT;
18
+ }({});
19
+ /**
20
+ * These are not GASv3 events
21
+ * But they share a similar in shape so that GASv3
22
+ * events can be derived from them / think of them in the same way
23
+ */
24
+ exports.EVENT_SUBJECT = EVENT_SUBJECT;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.appearanceForLink = appearanceForLink;
7
+ exports.getNodeContext = exports.findInNodeRange = exports.findAtPositions = exports.areSameNodes = void 0;
8
+ exports.getNodeSubject = getNodeSubject;
9
+ exports.getUrl = getUrl;
10
+ exports.isDatasourceNode = isDatasourceNode;
11
+ exports.isLinkNode = void 0;
12
+ var _utils = require("../utils");
13
+ var _types = require("./types");
14
+ function isDatasourceNode(node) {
15
+ return 'datasource' in node.attrs && !!node.attrs.datasource;
16
+ }
17
+
18
+ /**
19
+ * Determine if a node is considered to be a link
20
+ */
21
+ var isLinkNode = function isLinkNode(node) {
22
+ if (isDatasourceNode(node)) {
23
+ return false;
24
+ }
25
+ if (!!(0, _utils.appearanceForNodeType)(node.type)) {
26
+ return true;
27
+ }
28
+ return hasLinkMark(node);
29
+ };
30
+ exports.isLinkNode = isLinkNode;
31
+ function getNodeSubject(node) {
32
+ if (isDatasourceNode(node)) {
33
+ return _types.EVENT_SUBJECT.DATASOURCE;
34
+ }
35
+ if (isLinkNode(node)) {
36
+ return _types.EVENT_SUBJECT.LINK;
37
+ }
38
+ return null;
39
+ }
40
+
41
+ /**
42
+ * Analytics appearance for link object
43
+ */
44
+ function appearanceForLink(node) {
45
+ var appearance = (0, _utils.appearanceForNodeType)(node.type);
46
+ if (appearance) {
47
+ return appearance;
48
+ }
49
+ return 'url';
50
+ }
51
+ var getLinkMark = function getLinkMark(node) {
52
+ if (node.marks) {
53
+ for (var i = 0; i < node.marks.length; i++) {
54
+ var mark = node.marks[i];
55
+ if (mark.type.name === 'link') {
56
+ return mark;
57
+ }
58
+ }
59
+ }
60
+ };
61
+ var hasLinkMark = function hasLinkMark(node) {
62
+ return !!getLinkMark(node);
63
+ };
64
+ function getUrl(node) {
65
+ var _node$attrs$url, _node$attrs, _getLinkMark, _getLinkMark$attrs;
66
+ return (_node$attrs$url = (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.url) !== null && _node$attrs$url !== void 0 ? _node$attrs$url : (_getLinkMark = getLinkMark(node)) === null || _getLinkMark === void 0 ? void 0 : (_getLinkMark$attrs = _getLinkMark.attrs) === null || _getLinkMark$attrs === void 0 ? void 0 : _getLinkMark$attrs.href;
67
+ }
68
+ var getNodeContext = function getNodeContext(doc, pos) {
69
+ var $pos = doc.resolve(pos);
70
+ var maxDepth = 3;
71
+ for (var i = 0; i <= maxDepth; i++) {
72
+ var _node = $pos.node($pos.depth - i);
73
+ if (_node && _node.type.name !== 'paragraph') {
74
+ return _node.type.name;
75
+ }
76
+ }
77
+ return 'unknown';
78
+ };
79
+ exports.getNodeContext = getNodeContext;
80
+ var findAtPositions = function findAtPositions(tr, positions) {
81
+ var entities = [];
82
+ for (var i = 0; i < positions.length; i++) {
83
+ var pos = positions[i];
84
+ var _node2 = tr.doc.nodeAt(pos);
85
+ if (!_node2) {
86
+ continue;
87
+ }
88
+ var nodeContext = getNodeContext(tr.doc, pos);
89
+ entities.push({
90
+ pos: pos,
91
+ node: _node2,
92
+ nodeContext: nodeContext
93
+ });
94
+ }
95
+ return entities;
96
+ };
97
+ exports.findAtPositions = findAtPositions;
98
+ var findInNodeRange = function findInNodeRange(doc, from, to, predicate) {
99
+ var entities = [];
100
+ doc.nodesBetween(from, to, function (node, pos) {
101
+ if (predicate(node)) {
102
+ var entirelyInRange = pos >= from && pos + node.nodeSize <= to;
103
+ if (entirelyInRange) {
104
+ var nodeContext = getNodeContext(doc, pos);
105
+ entities.push({
106
+ pos: pos,
107
+ node: node,
108
+ nodeContext: nodeContext
109
+ });
110
+ }
111
+ }
112
+ });
113
+ return entities;
114
+ };
115
+
116
+ /**
117
+ * Returns whether or not two sets of links appear to likely be the same set of links
118
+ * That they are in the same order and that both their hrefs and appearances match
119
+ */
120
+ exports.findInNodeRange = findInNodeRange;
121
+ var areSameNodes = function areSameNodes(setA, setB) {
122
+ if (setA.length !== setB.length) {
123
+ return false;
124
+ }
125
+ for (var i = 0; i < setA.length; i++) {
126
+ var a = setA[i];
127
+ var b = setB[i];
128
+ if (getUrl(a.node) !== getUrl(b.node) || appearanceForLink(a.node) !== appearanceForLink(b.node)) {
129
+ return false;
130
+ }
131
+ }
132
+ return true;
133
+ };
134
+ exports.areSameNodes = areSameNodes;
@@ -11,6 +11,7 @@ var _adfSchema = require("@atlaskit/adf-schema");
11
11
  var _quickInsert = require("@atlaskit/editor-common/quick-insert");
12
12
  var _utils = require("@atlaskit/editor-common/utils");
13
13
  var _linkDatasource = require("@atlaskit/link-datasource");
14
+ var _createEventsQueue = require("./analytics/create-events-queue");
14
15
  var _messages = require("./messages");
15
16
  var _actions = require("./pm-plugins/actions");
16
17
  var _doc = require("./pm-plugins/doc");
@@ -20,14 +21,15 @@ var _mountHyperlink = require("./pm-plugins/mountHyperlink");
20
21
  var _pluginKey = require("./pm-plugins/plugin-key");
21
22
  var _toolbar = require("./toolbar");
22
23
  var _ModalWithState = _interopRequireDefault(require("./ui/DatasourceModal/ModalWithState"));
24
+ var _EditorLinkingPlatformAnalytics = require("./ui/EditorLinkingPlatformAnalytics");
23
25
  var _EditorSmartCardEvents = require("./ui/EditorSmartCardEvents");
24
- var _EditorSmartCardEventsNext = require("./ui/EditorSmartCardEventsNext");
25
26
  var _LayoutButton = _interopRequireDefault(require("./ui/LayoutButton"));
26
27
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
28
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
28
29
  var cardPlugin = function cardPlugin(options, api) {
29
30
  var _api$dependencies, _api$dependencies$fea;
30
31
  var featureFlags = (api === null || api === void 0 ? void 0 : (_api$dependencies = api.dependencies) === null || _api$dependencies === void 0 ? void 0 : (_api$dependencies$fea = _api$dependencies.featureFlags) === null || _api$dependencies$fea === void 0 ? void 0 : _api$dependencies$fea.sharedState.currentState()) || {};
32
+ var cardPluginEvents = featureFlags !== null && featureFlags !== void 0 && featureFlags.lpAnalyticsEventsNext ? (0, _createEventsQueue.createEventsQueue)() : undefined;
31
33
  return {
32
34
  name: 'card',
33
35
  getSharedState: function getSharedState(editorState) {
@@ -68,7 +70,8 @@ var cardPlugin = function cardPlugin(options, api) {
68
70
  useAlternativePreloader: useAlternativePreloader,
69
71
  allowWrapping: allowWrapping,
70
72
  allowAlignment: allowAlignment,
71
- allowDatasource: allowDatasource
73
+ allowDatasource: allowDatasource,
74
+ cardPluginEvents: cardPluginEvents
72
75
  }), api)
73
76
  }, {
74
77
  name: 'cardHyperlink',
@@ -90,10 +93,10 @@ var cardPlugin = function cardPlugin(options, api) {
90
93
  popupsMountPoint = _ref2.popupsMountPoint,
91
94
  popupsScrollableElement = _ref2.popupsScrollableElement,
92
95
  popupsBoundariesElement = _ref2.popupsBoundariesElement;
93
- var lpAnalyticsEventsNext = featureFlags.lpAnalyticsEventsNext;
94
96
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_EditorSmartCardEvents.EditorSmartCardEvents, {
95
97
  editorView: editorView
96
- }), lpAnalyticsEventsNext && /*#__PURE__*/_react.default.createElement(_EditorSmartCardEventsNext.EditorSmartCardEventsNext, {
98
+ }), cardPluginEvents && /*#__PURE__*/_react.default.createElement(_EditorLinkingPlatformAnalytics.EditorLinkingPlatformAnalytics, {
99
+ cardPluginEvents: cardPluginEvents,
97
100
  editorView: editorView
98
101
  }), /*#__PURE__*/_react.default.createElement(_LayoutButton.default, {
99
102
  api: api,
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.showLinkToolbar = exports.showDatasourceModal = exports.setProvider = exports.setDatasourceTableRef = exports.setCardLayoutAndDatasourceTableRef = exports.setCardLayout = exports.resolveCard = exports.registerSmartCardEventsNext = exports.registerSmartCardEvents = exports.registerCard = exports.queueCards = exports.hideLinkToolbar = exports.hideDatasourceModal = exports.cardAction = void 0;
6
+ exports.showLinkToolbar = exports.showDatasourceModal = exports.setProvider = exports.setDatasourceTableRef = exports.setCardLayoutAndDatasourceTableRef = exports.setCardLayout = exports.resolveCard = exports.registerSmartCardEvents = exports.registerCard = exports.queueCards = exports.hideLinkToolbar = exports.hideDatasourceModal = exports.cardAction = void 0;
7
7
  var _pluginKey = require("./plugin-key");
8
8
  var cardAction = function cardAction(tr, action) {
9
9
  return tr.setMeta(_pluginKey.pluginKey, action);
@@ -45,15 +45,6 @@ var registerSmartCardEvents = function registerSmartCardEvents(smartLinkEvents)
45
45
  };
46
46
  };
47
47
  exports.registerSmartCardEvents = registerSmartCardEvents;
48
- var registerSmartCardEventsNext = function registerSmartCardEventsNext(smartLinkEvents) {
49
- return function (tr) {
50
- return cardAction(tr, {
51
- type: 'REGISTER_EVENTS_NEXT',
52
- smartLinkEvents: smartLinkEvents
53
- });
54
- };
55
- };
56
- exports.registerSmartCardEventsNext = registerSmartCardEventsNext;
57
48
  var setProvider = function setProvider(cardProvider) {
58
49
  return function (tr) {
59
50
  return cardAction(tr, {
@@ -453,6 +453,9 @@ var updateExistingDatasource = function updateExistingDatasource(state, node, ne
453
453
  var isUrlChange = ((_newAdf$attrs = newAdf.attrs) === null || _newAdf$attrs === void 0 ? void 0 : _newAdf$attrs.url) !== ((_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.url);
454
454
  if (isColumnChange || isUrlChange) {
455
455
  tr.setNodeMarkup(from, schemaNodes.blockCard, _objectSpread(_objectSpread({}, node.attrs), newAdf.attrs));
456
+ (0, _card.addLinkMetadata)(state.selection, tr, {
457
+ action: _analytics.ACTION.UPDATED
458
+ });
456
459
  }
457
460
  } else if (newAdf.type === 'inlineCard') {
458
461
  // datasource to inline
@@ -19,26 +19,25 @@ var _styles = require("@atlaskit/editor-common/styles");
19
19
  var _utils = require("@atlaskit/editor-common/utils");
20
20
  var _state = require("@atlaskit/editor-prosemirror/state");
21
21
  var _utils2 = require("@atlaskit/editor-prosemirror/utils");
22
+ var _eventsFromTr = require("../analytics/events-from-tr");
22
23
  var _blockCard = require("../nodeviews/blockCard");
23
24
  var _datasource = require("../nodeviews/datasource");
24
25
  var _embedCard = require("../nodeviews/embedCard");
25
26
  var _inlineCard = require("../nodeviews/inlineCard");
26
27
  var _actions = require("./actions");
27
- var _analytics = require("./analytics");
28
28
  var _pluginKey = require("./plugin-key");
29
29
  var _reducers = _interopRequireDefault(require("./reducers"));
30
30
  var _resolve = require("./util/resolve");
31
31
  var _state2 = require("./util/state");
32
32
  var createPlugin = function createPlugin(options, pluginInjectionApi) {
33
33
  return function (pmPluginFactoryParams) {
34
- var lpAnalyticsEventsNext = pmPluginFactoryParams.featureFlags.lpAnalyticsEventsNext;
35
- var analyticsQueue = (0, _analytics.createAnalyticsQueue)(!!lpAnalyticsEventsNext);
36
34
  var editorAppearance = options.editorAppearance,
37
35
  platform = options.platform,
38
36
  allowResizing = options.allowResizing,
39
37
  useAlternativePreloader = options.useAlternativePreloader,
40
38
  fullWidthMode = options.fullWidthMode,
41
- showServerActions = options.showServerActions;
39
+ showServerActions = options.showServerActions,
40
+ cardPluginEvents = options.cardPluginEvents;
42
41
  var inlineCardViewProducer = (0, _reactNodeView.getInlineNodeViewProducer)({
43
42
  pmPluginFactoryParams: pmPluginFactoryParams,
44
43
  Component: _inlineCard.InlineCardNodeView,
@@ -56,7 +55,6 @@ var createPlugin = function createPlugin(options, pluginInjectionApi) {
56
55
  cards: [],
57
56
  showLinkingToolbar: false,
58
57
  smartLinkEvents: undefined,
59
- smartLinkEventsNext: undefined,
60
58
  editorAppearance: editorAppearance,
61
59
  showDatasourceModal: false,
62
60
  datasourceModalType: undefined,
@@ -71,14 +69,12 @@ var createPlugin = function createPlugin(options, pluginInjectionApi) {
71
69
 
72
70
  // apply any actions
73
71
  var meta = tr.getMeta(_pluginKey.pluginKey);
74
- var events = (0, _analytics.eventsFromTransaction)(tr, prevEditorState);
75
- analyticsQueue.push.apply(analyticsQueue, (0, _toConsumableArray2.default)(events));
72
+ if (cardPluginEvents) {
73
+ var events = (0, _eventsFromTr.eventsFromTransaction)(tr, prevEditorState);
74
+ cardPluginEvents.push.apply(cardPluginEvents, (0, _toConsumableArray2.default)(events));
75
+ }
76
76
  if (meta) {
77
- var nextState = (0, _reducers.default)(pluginStateWithUpdatedPos, meta);
78
- if (!pluginState.smartLinkEventsNext && nextState.smartLinkEventsNext) {
79
- analyticsQueue.setCallbacks(nextState.smartLinkEventsNext);
80
- }
81
- return nextState;
77
+ return (0, _reducers.default)(pluginStateWithUpdatedPos, meta);
82
78
  }
83
79
  return pluginStateWithUpdatedPos;
84
80
  }
@@ -146,7 +142,13 @@ var createPlugin = function createPlugin(options, pluginInjectionApi) {
146
142
  invoke();
147
143
  });
148
144
  }
149
- analyticsQueue.flush();
145
+
146
+ /**
147
+ * If there have been any events queued, flush them
148
+ * so subscribers can now be notified and dispatch
149
+ * analytics events
150
+ */
151
+ cardPluginEvents === null || cardPluginEvents === void 0 ? void 0 : cardPluginEvents.flush();
150
152
  },
151
153
  destroy: function destroy() {
152
154
  // Cancel any outstanding raf callbacks.