@atlaskit/editor-synced-block-provider 3.11.0 → 3.12.1

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 (34) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/clients/block-service/blockService.js +2 -2
  3. package/dist/cjs/providers/block-service/blockServiceAPI.js +1 -1
  4. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +92 -136
  5. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +95 -124
  6. package/dist/cjs/utils/errorHandling.js +79 -19
  7. package/dist/cjs/utils/experienceTracking.js +119 -0
  8. package/dist/es2019/clients/block-service/blockService.js +2 -2
  9. package/dist/es2019/providers/block-service/blockServiceAPI.js +1 -1
  10. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +85 -126
  11. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +80 -89
  12. package/dist/es2019/utils/errorHandling.js +61 -10
  13. package/dist/es2019/utils/experienceTracking.js +113 -0
  14. package/dist/esm/clients/block-service/blockService.js +2 -2
  15. package/dist/esm/providers/block-service/blockServiceAPI.js +1 -1
  16. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +93 -137
  17. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +96 -125
  18. package/dist/esm/utils/errorHandling.js +77 -18
  19. package/dist/esm/utils/experienceTracking.js +113 -0
  20. package/dist/types/clients/block-service/blockService.d.ts +5 -5
  21. package/dist/types/providers/block-service/blockServiceAPI.d.ts +1 -1
  22. package/dist/types/providers/types.d.ts +5 -5
  23. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +0 -1
  24. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +1 -5
  25. package/dist/types/utils/errorHandling.d.ts +14 -9
  26. package/dist/types/utils/experienceTracking.d.ts +51 -0
  27. package/dist/types-ts4.5/clients/block-service/blockService.d.ts +5 -5
  28. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +1 -1
  29. package/dist/types-ts4.5/providers/types.d.ts +5 -5
  30. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +0 -1
  31. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +1 -5
  32. package/dist/types-ts4.5/utils/errorHandling.d.ts +14 -9
  33. package/dist/types-ts4.5/utils/experienceTracking.d.ts +51 -0
  34. package/package.json +2 -2
@@ -8,7 +8,8 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
8
8
  import { logException } from '@atlaskit/editor-common/monitoring';
9
9
  import { fg } from '@atlaskit/platform-feature-flags';
10
10
  import { SyncBlockError } from '../common/types';
11
- import { updateErrorPayload, createErrorPayload, deleteErrorPayload, updateCacheErrorPayload, getSourceInfoErrorPayload } from '../utils/errorHandling';
11
+ import { updateErrorPayload, createErrorPayload, deleteErrorPayload, updateCacheErrorPayload, getSourceInfoErrorPayload, updateSuccessPayload, createSuccessPayload, deleteSuccessPayload } from '../utils/errorHandling';
12
+ import { getCreateSourceExperience, getDeleteSourceExperience, getSaveSourceExperience } from '../utils/experienceTracking';
12
13
  import { convertSyncBlockPMNodeToSyncBlockData } from '../utils/utils';
13
14
  // A store manager responsible for the lifecycle and state management of source sync blocks in an editor instance.
14
15
  // Designed to manage local in-memory state and synchronize with an external data provider.
@@ -32,21 +33,9 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
32
33
  key: "setFireAnalyticsEvent",
33
34
  value: function setFireAnalyticsEvent(fireAnalyticsEvent) {
34
35
  this.fireAnalyticsEvent = fireAnalyticsEvent;
35
- }
36
- }, {
37
- key: "setCreateExperience",
38
- value: function setCreateExperience(createExperience) {
39
- this.createExperience = createExperience;
40
- }
41
- }, {
42
- key: "setSaveExperience",
43
- value: function setSaveExperience(saveExperience) {
44
- this.saveExperience = saveExperience;
45
- }
46
- }, {
47
- key: "setDeleteExperience",
48
- value: function setDeleteExperience(deleteExperience) {
49
- this.deleteExperience = deleteExperience;
36
+ this.createExperience = getCreateSourceExperience(fireAnalyticsEvent);
37
+ this.saveExperience = getSaveSourceExperience(fireAnalyticsEvent);
38
+ this.deleteExperience = getDeleteSourceExperience(fireAnalyticsEvent);
50
39
  }
51
40
  }, {
52
41
  key: "isSourceBlock",
@@ -96,7 +85,7 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
96
85
  value: (function () {
97
86
  var _flush = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
98
87
  var _this2 = this;
99
- var bodiedSyncBlockNodes, bodiedSyncBlockData, _this$saveExperience, writeResults, successfulSaved, failedSave, _this$saveExperience2, _this$saveExperience3, _this$saveExperience4, _this$fireAnalyticsEv2;
88
+ var bodiedSyncBlockNodes, bodiedSyncBlockData, _this$saveExperience, writeResults, _this$saveExperience2, _this$saveExperience3, _this$fireAnalyticsEv2;
100
89
  return _regeneratorRuntime.wrap(function _callee$(_context) {
101
90
  while (1) switch (_context.prev = _context.next) {
102
91
  case 0:
@@ -130,17 +119,16 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
130
119
  }
131
120
  return _context.abrupt("return", Promise.resolve(true));
132
121
  case 6:
133
- // only start the save experience if we have sync blocks to save
134
- if (fg('platform_synced_block_dogfooding')) {
135
- (_this$saveExperience = this.saveExperience) === null || _this$saveExperience === void 0 || _this$saveExperience.start({});
136
- }
137
- ;
138
122
  if (this.dataProvider) {
139
- _context.next = 10;
123
+ _context.next = 8;
140
124
  break;
141
125
  }
142
126
  throw new Error('Data provider not set');
143
- case 10:
127
+ case 8:
128
+ if (fg('platform_synced_block_dogfooding')) {
129
+ (_this$saveExperience = this.saveExperience) === null || _this$saveExperience === void 0 || _this$saveExperience.start({});
130
+ }
131
+ ;
144
132
  _context.next = 12;
145
133
  return this.dataProvider.writeNodesData(bodiedSyncBlockNodes, bodiedSyncBlockData);
146
134
  case 12:
@@ -154,75 +142,50 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
154
142
  }
155
143
  }
156
144
  });
157
- successfulSaved = writeResults.filter(function (result) {
158
- return result.resourceId && !result.error;
159
- }).map(function (result) {
160
- return {
161
- resourceId: result.resourceId
162
- };
163
- });
164
- failedSave = writeResults.filter(function (result) {
165
- return !result.resourceId || result.error;
166
- }).map(function (result) {
167
- return {
168
- resourceId: result.resourceId || 'unknown',
169
- failReason: result.error || 'Failed to save sync blocks'
170
- };
171
- });
172
145
  if (!writeResults.every(function (result) {
173
146
  return result.resourceId && !result.error;
174
147
  })) {
175
- _context.next = 22;
148
+ _context.next = 20;
176
149
  break;
177
150
  }
178
151
  if (fg('platform_synced_block_dogfooding')) {
179
- (_this$saveExperience2 = this.saveExperience) === null || _this$saveExperience2 === void 0 || _this$saveExperience2.success({
180
- metadata: {
181
- successfulSaved: successfulSaved
152
+ (_this$saveExperience2 = this.saveExperience) === null || _this$saveExperience2 === void 0 || _this$saveExperience2.success();
153
+ writeResults.forEach(function (result) {
154
+ if (result.resourceId && !result.error) {
155
+ var _this2$fireAnalyticsE;
156
+ (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, updateSuccessPayload(result.resourceId, false));
182
157
  }
183
158
  });
184
159
  }
185
160
  ;
186
161
  return _context.abrupt("return", true);
187
- case 22:
162
+ case 20:
188
163
  if (fg('platform_synced_block_dogfooding')) {
189
- (_this$saveExperience3 = this.saveExperience) === null || _this$saveExperience3 === void 0 || _this$saveExperience3.failure({
190
- metadata: {
191
- successfulSaved: successfulSaved,
192
- failedSave: failedSave
193
- }
194
- });
195
- } else {
196
- writeResults.filter(function (result) {
197
- return !result.resourceId || result.error;
198
- }).forEach(function (result) {
199
- var _this2$fireAnalyticsE;
200
- (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, updateErrorPayload(result.error || 'Failed to write data'));
201
- });
164
+ (_this$saveExperience3 = this.saveExperience) === null || _this$saveExperience3 === void 0 || _this$saveExperience3.failure();
202
165
  }
166
+ writeResults.filter(function (result) {
167
+ return !result.resourceId || result.error;
168
+ }).forEach(function (result) {
169
+ var _this2$fireAnalyticsE2;
170
+ (_this2$fireAnalyticsE2 = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE2 === void 0 || _this2$fireAnalyticsE2.call(_this2, updateErrorPayload(result.error || 'Failed to write data', result.resourceId));
171
+ });
203
172
  return _context.abrupt("return", false);
204
- case 24:
205
- _context.next = 31;
173
+ case 23:
174
+ _context.next = 30;
206
175
  break;
207
- case 26:
208
- _context.prev = 26;
176
+ case 25:
177
+ _context.prev = 25;
209
178
  _context.t0 = _context["catch"](0);
210
179
  logException(_context.t0, {
211
180
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
212
181
  });
213
- if (fg('platform_synced_block_dogfooding')) {
214
- (_this$saveExperience4 = this.saveExperience) === null || _this$saveExperience4 === void 0 || _this$saveExperience4.failure({
215
- reason: _context.t0.message
216
- });
217
- } else {
218
- (_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 || _this$fireAnalyticsEv2.call(this, updateErrorPayload(_context.t0.message));
219
- }
182
+ (_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 || _this$fireAnalyticsEv2.call(this, updateErrorPayload(_context.t0.message));
220
183
  return _context.abrupt("return", false);
221
- case 31:
184
+ case 30:
222
185
  case "end":
223
186
  return _context.stop();
224
187
  }
225
- }, _callee, this, [[0, 26]]);
188
+ }, _callee, this, [[0, 25]]);
226
189
  }));
227
190
  function flush() {
228
191
  return _flush.apply(this, arguments);
@@ -253,6 +216,13 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
253
216
  value: function commitPendingCreation(success) {
254
217
  if (success && this.creationCallback) {
255
218
  this.creationCallback();
219
+ if (fg('platform_synced_block_dogfooding')) {
220
+ var _this$fireAnalyticsEv3;
221
+ (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, createSuccessPayload(this.pendingResourceId || ''));
222
+ }
223
+ } else if (success && !this.creationCallback && fg('platform_synced_block_dogfooding')) {
224
+ var _this$fireAnalyticsEv4;
225
+ (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, createErrorPayload('creation callback missing', this.pendingResourceId));
256
226
  }
257
227
  this.pendingResourceId = undefined;
258
228
  this.creationCallback = undefined;
@@ -309,11 +279,13 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
309
279
  value: function createBodiedSyncBlockNode(attrs) {
310
280
  var _this4 = this;
311
281
  try {
282
+ var _this$createExperienc;
312
283
  if (!this.dataProvider) {
313
284
  throw new Error('Data provider not set');
314
285
  }
315
286
  var resourceId = attrs.resourceId,
316
287
  blockInstanceId = attrs.localId;
288
+ (_this$createExperienc = this.createExperience) === null || _this$createExperienc === void 0 || _this$createExperienc.start({});
317
289
  this.dataProvider.createNodeData({
318
290
  content: [],
319
291
  blockInstanceId: blockInstanceId,
@@ -322,50 +294,45 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
322
294
  var resourceId = result.resourceId;
323
295
  if (resourceId) {
324
296
  _this4.commitPendingCreation(true);
297
+ if (fg('platform_synced_block_dogfooding')) {
298
+ var _this4$createExperien;
299
+ (_this4$createExperien = _this4.createExperience) === null || _this4$createExperien === void 0 || _this4$createExperien.success();
300
+ }
325
301
  } else {
302
+ var _this4$fireAnalyticsE;
326
303
  _this4.commitPendingCreation(false);
327
304
  if (fg('platform_synced_block_dogfooding')) {
328
- var _this4$createExperien;
329
- (_this4$createExperien = _this4.createExperience) === null || _this4$createExperien === void 0 || _this4$createExperien.failure({
305
+ var _this4$createExperien2;
306
+ (_this4$createExperien2 = _this4.createExperience) === null || _this4$createExperien2 === void 0 || _this4$createExperien2.failure({
330
307
  reason: result.error || 'Failed to create bodied sync block'
331
308
  });
332
- } else {
333
- var _this4$fireAnalyticsE;
334
- (_this4$fireAnalyticsE = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE === void 0 || _this4$fireAnalyticsE.call(_this4, createErrorPayload(result.error || 'Failed to create bodied sync block'));
335
309
  }
310
+ (_this4$fireAnalyticsE = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE === void 0 || _this4$fireAnalyticsE.call(_this4, createErrorPayload(result.error || 'Failed to create bodied sync block', resourceId));
336
311
  }
337
312
  }).catch(function (error) {
313
+ var _this4$fireAnalyticsE2;
338
314
  _this4.commitPendingCreation(false);
339
315
  logException(error, {
340
316
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
341
317
  });
342
318
  if (fg('platform_synced_block_dogfooding')) {
343
- var _this4$createExperien2;
344
- (_this4$createExperien2 = _this4.createExperience) === null || _this4$createExperien2 === void 0 || _this4$createExperien2.failure({
319
+ var _this4$createExperien3;
320
+ (_this4$createExperien3 = _this4.createExperience) === null || _this4$createExperien3 === void 0 || _this4$createExperien3.failure({
345
321
  reason: error.message
346
322
  });
347
- } else {
348
- var _this4$fireAnalyticsE2;
349
- (_this4$fireAnalyticsE2 = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE2 === void 0 || _this4$fireAnalyticsE2.call(_this4, createErrorPayload(error.message));
350
323
  }
324
+ (_this4$fireAnalyticsE2 = _this4.fireAnalyticsEvent) === null || _this4$fireAnalyticsE2 === void 0 || _this4$fireAnalyticsE2.call(_this4, createErrorPayload(error.message, resourceId));
351
325
  });
352
326
  this.registerPendingCreation(resourceId);
353
327
  } catch (error) {
328
+ var _this$fireAnalyticsEv5;
354
329
  if (this.hasPendingCreation()) {
355
330
  this.commitPendingCreation(false);
356
331
  }
357
332
  logException(error, {
358
333
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
359
334
  });
360
- if (fg('platform_synced_block_dogfooding')) {
361
- var _this$createExperienc;
362
- (_this$createExperienc = this.createExperience) === null || _this$createExperienc === void 0 || _this$createExperienc.failure({
363
- reason: error.message
364
- });
365
- } else {
366
- var _this$fireAnalyticsEv3;
367
- (_this$fireAnalyticsEv3 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv3 === void 0 || _this$fireAnalyticsEv3.call(this, createErrorPayload(error.message));
368
- }
335
+ (_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, createErrorPayload(error.message));
369
336
  }
370
337
  }
371
338
  }, {
@@ -373,7 +340,7 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
373
340
  value: function () {
374
341
  var _delete2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(syncBlockIds, onDelete, onDeleteCompleted) {
375
342
  var _this5 = this;
376
- var results, callback, isDeleteSuccessful, _this$deleteExperienc, successfulDeleted, failedDelete, _this$deleteExperienc2, _this$fireAnalyticsEv4;
343
+ var _this$deleteExperienc, results, callback, isDeleteSuccessful, _this$deleteExperienc2, _this$deleteExperienc3;
377
344
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
378
345
  while (1) switch (_context2.prev = _context2.next) {
379
346
  case 0:
@@ -387,11 +354,14 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
387
354
  syncBlockIds.forEach(function (Ids) {
388
355
  _this5.setPendingDeletion(Ids, true);
389
356
  });
390
- _context2.next = 6;
357
+ if (fg('platform_synced_block_dogfooding')) {
358
+ (_this$deleteExperienc = this.deleteExperience) === null || _this$deleteExperienc === void 0 || _this$deleteExperienc.start({});
359
+ }
360
+ _context2.next = 7;
391
361
  return this.dataProvider.deleteNodesData(syncBlockIds.map(function (attrs) {
392
362
  return attrs.resourceId;
393
363
  }));
394
- case 6:
364
+ case 7:
395
365
  results = _context2.sent;
396
366
  isDeleteSuccessful = results.every(function (result) {
397
367
  return result.success;
@@ -403,66 +373,57 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
403
373
  return _this5.syncBlockCache.delete(Ids.resourceId);
404
374
  };
405
375
  this.clearPendingDeletion();
376
+ if (fg('platform_synced_block_dogfooding')) {
377
+ (_this$deleteExperienc2 = this.deleteExperience) === null || _this$deleteExperienc2 === void 0 || _this$deleteExperienc2.success();
378
+ results.forEach(function (result) {
379
+ var _this5$fireAnalyticsE;
380
+ (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, deleteSuccessPayload(result.resourceId));
381
+ });
382
+ }
406
383
  } else {
407
384
  callback = function callback(Ids) {
408
385
  _this5.setPendingDeletion(Ids, false);
409
386
  };
410
387
  if (fg('platform_synced_block_dogfooding')) {
411
- successfulDeleted = results.filter(function (result) {
412
- return result.success;
413
- }).map(function (result) {
414
- return {
415
- resourceId: result.resourceId
416
- };
417
- });
418
- failedDelete = results.filter(function (result) {
419
- return !result.success;
420
- }).map(function (result) {
421
- return {
422
- resourceId: result.resourceId || 'unknown',
423
- failReason: result.error || 'Failed to delete sync block'
424
- };
425
- });
426
- (_this$deleteExperienc = this.deleteExperience) === null || _this$deleteExperienc === void 0 || _this$deleteExperienc.failure({
427
- metadata: {
428
- successfulDeleted: successfulDeleted,
429
- failedDelete: failedDelete
388
+ (_this$deleteExperienc3 = this.deleteExperience) === null || _this$deleteExperienc3 === void 0 || _this$deleteExperienc3.failure();
389
+ results.forEach(function (result) {
390
+ if (result.success) {
391
+ var _this5$fireAnalyticsE2;
392
+ (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, deleteSuccessPayload(result.resourceId));
393
+ } else {
394
+ var _this5$fireAnalyticsE3;
395
+ (_this5$fireAnalyticsE3 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE3 === void 0 || _this5$fireAnalyticsE3.call(_this5, deleteErrorPayload(result.error || 'Failed to delete synced block', result.resourceId));
430
396
  }
431
397
  });
432
398
  } else {
433
399
  results.filter(function (result) {
434
400
  return result.resourceId === undefined;
435
401
  }).forEach(function (result) {
436
- var _this5$fireAnalyticsE;
437
- (_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, deleteErrorPayload(result.error || 'Failed to delete synced block'));
402
+ var _this5$fireAnalyticsE4;
403
+ (_this5$fireAnalyticsE4 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE4 === void 0 || _this5$fireAnalyticsE4.call(_this5, deleteErrorPayload(result.error || 'Failed to delete synced block'));
438
404
  });
439
405
  }
440
406
  }
441
407
  syncBlockIds.forEach(callback);
442
408
  return _context2.abrupt("return", isDeleteSuccessful);
443
- case 14:
444
- _context2.prev = 14;
409
+ case 15:
410
+ _context2.prev = 15;
445
411
  _context2.t0 = _context2["catch"](0);
446
412
  syncBlockIds.forEach(function (Ids) {
413
+ var _this5$fireAnalyticsE5;
447
414
  _this5.setPendingDeletion(Ids, false);
415
+ (_this5$fireAnalyticsE5 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE5 === void 0 || _this5$fireAnalyticsE5.call(_this5, deleteErrorPayload(_context2.t0.message, Ids.resourceId));
448
416
  });
449
417
  logException(_context2.t0, {
450
418
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
451
419
  });
452
- if (fg('platform_synced_block_dogfooding')) {
453
- (_this$deleteExperienc2 = this.deleteExperience) === null || _this$deleteExperienc2 === void 0 || _this$deleteExperienc2.failure({
454
- reason: _context2.t0.message
455
- });
456
- } else {
457
- (_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, deleteErrorPayload(_context2.t0.message));
458
- }
459
420
  onDeleteCompleted(false);
460
421
  return _context2.abrupt("return", false);
461
422
  case 21:
462
423
  case "end":
463
424
  return _context2.stop();
464
425
  }
465
- }, _callee2, this, [[0, 14]]);
426
+ }, _callee2, this, [[0, 15]]);
466
427
  }));
467
428
  function _delete(_x, _x2, _x3) {
468
429
  return _delete2.apply(this, arguments);
@@ -580,22 +541,32 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
580
541
  }
581
542
  return this.dataProvider.fetchSyncBlockSourceInfo(localId, undefined, undefined, this.fireAnalyticsEvent);
582
543
  } catch (error) {
583
- var _this$fireAnalyticsEv5;
544
+ var _this$fireAnalyticsEv6;
584
545
  logException(error, {
585
546
  location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
586
547
  });
587
- (_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, getSourceInfoErrorPayload(error.message));
548
+ (_this$fireAnalyticsEv6 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv6 === void 0 || _this$fireAnalyticsEv6.call(this, getSourceInfoErrorPayload(error.message));
588
549
  return Promise.resolve(undefined);
589
550
  }
590
551
  }
591
552
  }, {
592
553
  key: "destroy",
593
554
  value: function destroy() {
555
+ var _this$saveExperience4, _this$createExperienc2, _this$deleteExperienc4;
594
556
  this.syncBlockCache.clear();
595
557
  this.confirmationCallback = undefined;
596
558
  this.pendingResourceId = undefined;
597
559
  this.creationCallback = undefined;
598
560
  this.dataProvider = undefined;
561
+ (_this$saveExperience4 = this.saveExperience) === null || _this$saveExperience4 === void 0 || _this$saveExperience4.abort({
562
+ reason: 'editor-destroyed'
563
+ });
564
+ (_this$createExperienc2 = this.createExperience) === null || _this$createExperienc2 === void 0 || _this$createExperienc2.abort({
565
+ reason: 'editor-destroyed'
566
+ });
567
+ (_this$deleteExperienc4 = this.deleteExperience) === null || _this$deleteExperienc4 === void 0 || _this$deleteExperienc4.abort({
568
+ reason: 'editor-destroyed'
569
+ });
599
570
  this.clearPendingDeletion();
600
571
  }
601
572
  }]);
@@ -1,4 +1,8 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ 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; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1
4
  import { ACTION, ACTION_SUBJECT, EVENT_TYPE, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
2
6
  export var stringifyError = function stringifyError(error) {
3
7
  try {
4
8
  return JSON.stringify(error);
@@ -6,38 +10,93 @@ export var stringifyError = function stringifyError(error) {
6
10
  return undefined;
7
11
  }
8
12
  };
9
- export var getErrorPayload = function getErrorPayload(actionSubjectId, error) {
13
+ export var getErrorPayload = function getErrorPayload(actionSubjectId, error, resourceId) {
10
14
  return {
11
15
  action: ACTION.ERROR,
12
16
  actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
13
17
  actionSubjectId: actionSubjectId,
14
18
  eventType: EVENT_TYPE.OPERATIONAL,
15
- attributes: {
19
+ attributes: fg('platform_synced_block_dogfooding') ? _objectSpread({
20
+ error: error
21
+ }, resourceId && {
22
+ resourceId: resourceId
23
+ }) : {
16
24
  error: error
17
25
  }
18
26
  };
19
27
  };
20
- export var fetchErrorPayload = function fetchErrorPayload(error) {
21
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH, error);
28
+ export var fetchErrorPayload = function fetchErrorPayload(error, resourceId) {
29
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH, error, resourceId);
30
+ };
31
+ export var getSourceInfoErrorPayload = function getSourceInfoErrorPayload(error, resourceId) {
32
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO, error, resourceId);
33
+ };
34
+ export var updateErrorPayload = function updateErrorPayload(error, resourceId) {
35
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE, error, resourceId);
22
36
  };
23
- export var getSourceInfoErrorPayload = function getSourceInfoErrorPayload(error) {
24
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO, error);
37
+ export var updateReferenceErrorPayload = function updateReferenceErrorPayload(error, resourceId) {
38
+ return getErrorPayload(ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE, error, resourceId);
25
39
  };
26
- export var updateErrorPayload = function updateErrorPayload(error) {
27
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE, error);
40
+ export var createErrorPayload = function createErrorPayload(error, resourceId) {
41
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE, error, resourceId);
28
42
  };
29
- export var updateReferenceErrorPayload = function updateReferenceErrorPayload(error) {
30
- return getErrorPayload(ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE, error);
43
+ export var deleteErrorPayload = function deleteErrorPayload(error, resourceId) {
44
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE, error, resourceId);
31
45
  };
32
- export var createErrorPayload = function createErrorPayload(error) {
33
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE, error);
46
+ export var updateCacheErrorPayload = function updateCacheErrorPayload(error, resourceId) {
47
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE_CACHE, error, resourceId);
34
48
  };
35
- export var deleteErrorPayload = function deleteErrorPayload(error) {
36
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE, error);
49
+ export var fetchReferencesErrorPayload = function fetchReferencesErrorPayload(error, resourceId) {
50
+ return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH_REFERENCES, error, resourceId);
51
+ };
52
+
53
+ // Success payloads
54
+ export var fetchSuccessPayload = function fetchSuccessPayload(resourceId, blockInstanceId, sourceProduct) {
55
+ return {
56
+ action: ACTION.FETCHED,
57
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
58
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH,
59
+ eventType: EVENT_TYPE.OPERATIONAL,
60
+ attributes: _objectSpread({
61
+ resourceId: resourceId,
62
+ blockInstanceId: blockInstanceId
63
+ }, sourceProduct && {
64
+ sourceProduct: sourceProduct
65
+ })
66
+ };
67
+ };
68
+ export var createSuccessPayload = function createSuccessPayload(resourceId) {
69
+ return {
70
+ action: ACTION.INSERTED,
71
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
72
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
73
+ eventType: EVENT_TYPE.OPERATIONAL,
74
+ attributes: {
75
+ resourceId: resourceId
76
+ }
77
+ };
37
78
  };
38
- export var updateCacheErrorPayload = function updateCacheErrorPayload(error) {
39
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE_CACHE, error);
79
+ export var updateSuccessPayload = function updateSuccessPayload(resourceId, hasReference) {
80
+ return {
81
+ action: ACTION.UPDATED,
82
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
83
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE,
84
+ eventType: EVENT_TYPE.OPERATIONAL,
85
+ attributes: _objectSpread({
86
+ resourceId: resourceId
87
+ }, hasReference !== undefined && {
88
+ hasReference: hasReference
89
+ })
90
+ };
40
91
  };
41
- export var fetchReferencesErrorPayload = function fetchReferencesErrorPayload(error) {
42
- return getErrorPayload(ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH_REFERENCES, error);
92
+ export var deleteSuccessPayload = function deleteSuccessPayload(resourceId) {
93
+ return {
94
+ action: ACTION.DELETED,
95
+ actionSubject: ACTION_SUBJECT.SYNCED_BLOCK,
96
+ actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE,
97
+ eventType: EVENT_TYPE.OPERATIONAL,
98
+ attributes: {
99
+ resourceId: resourceId
100
+ }
101
+ };
43
102
  };
@@ -0,0 +1,113 @@
1
+ import { ACTION } from '@atlaskit/editor-common/analytics';
2
+ import { Experience, EXPERIENCE_ID, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
3
+ var TIMEOUT_DURATION = 30000;
4
+ export var createExperienceDispatcher = function createExperienceDispatcher(fireAnalyticsEvent) {
5
+ return function (payload) {
6
+ // Runtime type guard - only forward experience events
7
+ if (payload.action === ACTION.EXPERIENCE_MEASURED || payload.action === ACTION.EXPERIENCE_SAMPLED) {
8
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent(payload);
9
+ }
10
+ };
11
+ };
12
+
13
+ /**
14
+ * This experience tracks when a source sync block is saved to the BE.
15
+ *
16
+ * Start: When the flush source sync block function is called.
17
+ * Success: When the sync block save is successful within the timeout duration of start.
18
+ * Failure: When the timeout duration passes without the sync block being successfully saved
19
+ */
20
+ export var getSaveSourceExperience = function getSaveSourceExperience(fireAnalyticsEvent) {
21
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
22
+ action: ACTION.SYNCED_BLOCK_UPDATE,
23
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
24
+ checks: [new ExperienceCheckTimeout({
25
+ durationMs: TIMEOUT_DURATION
26
+ })]
27
+ });
28
+ };
29
+
30
+ /**
31
+ * This experience tracks when a reference sync block is saved to the BE.
32
+ *
33
+ * Start: When the flush sync block function is called.
34
+ * Success: When the sync block save is successful within the timeout duration of start.
35
+ * Failure: When the timeout duration passes without the sync block being successfully saved
36
+ */
37
+ export var getSaveReferenceExperience = function getSaveReferenceExperience(fireAnalyticsEvent) {
38
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
39
+ action: ACTION.REFERENCE_SYNCED_BLOCK_UPDATE,
40
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
41
+ checks: [new ExperienceCheckTimeout({
42
+ durationMs: TIMEOUT_DURATION
43
+ })]
44
+ });
45
+ };
46
+
47
+ /**
48
+ * This experience tracks when a reference sync block data is fetched from the BE.
49
+ *
50
+ * Start: When the fetchNodesData function is called.
51
+ * Success: When the fetching the data is successful within the timeout duration of start.
52
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
53
+ */
54
+ export var getFetchExperience = function getFetchExperience(fireAnalyticsEvent) {
55
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
56
+ action: ACTION.SYNCED_BLOCK_FETCH,
57
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
58
+ checks: [new ExperienceCheckTimeout({
59
+ durationMs: TIMEOUT_DURATION
60
+ })]
61
+ });
62
+ };
63
+
64
+ /**
65
+ * This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
66
+ *
67
+ * Start: When the fetchSourceInfo function is called.
68
+ * Success: When the fetching the data is successful within the timeout duration of start.
69
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
70
+ */
71
+ export var getFetchSourceInfoExperience = function getFetchSourceInfoExperience(fireAnalyticsEvent) {
72
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
73
+ action: ACTION.SYNCED_BLOCK_GET_SOURCE_INFO,
74
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
75
+ checks: [new ExperienceCheckTimeout({
76
+ durationMs: TIMEOUT_DURATION
77
+ })]
78
+ });
79
+ };
80
+
81
+ /**
82
+ * This experience tracks when a source sync block is deleted from the BE.
83
+ *
84
+ * Start: When the fetchSourceInfo function is called.
85
+ * Success: When the fetching the data is successful within the timeout duration of start.
86
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
87
+ */
88
+ export var getDeleteSourceExperience = function getDeleteSourceExperience(fireAnalyticsEvent) {
89
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
90
+ action: ACTION.SYNCED_BLOCK_DELETE,
91
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
92
+ checks: [new ExperienceCheckTimeout({
93
+ durationMs: TIMEOUT_DURATION
94
+ })]
95
+ });
96
+ };
97
+
98
+ /**
99
+ * This experience tracks when a source sync block is created and registered to the BE.
100
+ *
101
+ * Start: When the fetchSourceInfo function is called.
102
+ * Success: When the fetching the data is successful within the timeout duration of start.
103
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
104
+ */
105
+ export var getCreateSourceExperience = function getCreateSourceExperience(fireAnalyticsEvent) {
106
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
107
+ action: ACTION.SYNCED_BLOCK_CREATE,
108
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
109
+ checks: [new ExperienceCheckTimeout({
110
+ durationMs: TIMEOUT_DURATION
111
+ })]
112
+ });
113
+ };