@atlaskit/editor-synced-block-provider 3.13.2 → 3.14.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 3.14.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`838e5da4cc27d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/838e5da4cc27d) -
8
+ Refactor SyncBlockLabel and BlockServiceAPI provider
9
+
10
+ ## 3.14.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [`55d9a4080dfa8`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/55d9a4080dfa8) -
15
+ parentAri field for fetch/write providers are mandatory
16
+
3
17
  ## 3.13.2
4
18
 
5
19
  ### Patch Changes
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.subscribeToBlockUpdates = void 0;
7
7
  var _graphqlWs = require("graphql-ws");
8
+ var _utils = require("../../utils/utils");
8
9
  var GRAPHQL_WS_ENDPOINT = '/gateway/api/graphql/subscriptions';
9
10
  var blockServiceClient = null;
10
11
  var getBlockServiceClient = function getBlockServiceClient() {
@@ -60,6 +61,7 @@ var parseSubscriptionPayload = function parseSubscriptionPayload(payload) {
60
61
  blockAri: payload.blockAri,
61
62
  blockInstanceId: payload.blockInstanceId,
62
63
  content: JSON.parse(payload.content),
64
+ contentUpdatedAt: (0, _utils.convertContentUpdatedAt)(payload.contentUpdatedAt),
63
65
  createdAt: createdAt,
64
66
  createdBy: payload.createdBy,
65
67
  product: payload.product,
@@ -12,13 +12,13 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
12
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
13
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
14
  var _react = require("react");
15
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
15
  var _ari = require("../../clients/block-service/ari");
17
16
  var _blockService = require("../../clients/block-service/blockService");
18
17
  var _blockSubscription = require("../../clients/block-service/blockSubscription");
19
18
  var _types = require("../../common/types");
20
19
  var _errorHandling = require("../../utils/errorHandling");
21
20
  var _resourceId2 = require("../../utils/resourceId");
21
+ var _utils = require("../../utils/utils");
22
22
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
23
23
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
24
24
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -104,24 +104,16 @@ var convertToSyncBlockData = exports.convertToSyncBlockData = function convertTo
104
104
  // BE returns microseconds, convert to milliseconds
105
105
  // BE should fix this in the future
106
106
  createdAt = new Date(data.createdAt / 1000).toISOString();
107
- } catch (e) {
107
+ } catch (_unused) {
108
108
  // fallback to undefined
109
109
  // as we don't want to block the whole process due to invalid date
110
110
  createdAt = undefined;
111
111
  }
112
112
  }
113
- var contentUpdatedAt;
114
- if (typeof data.contentUpdatedAt === 'number' && (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
115
- try {
116
- contentUpdatedAt = new Date(data.contentUpdatedAt).toISOString();
117
- } catch (e) {
118
- contentUpdatedAt = undefined;
119
- }
120
- }
121
113
  return {
122
114
  blockInstanceId: data.blockInstanceId,
123
115
  content: JSON.parse(data.content),
124
- contentUpdatedAt: contentUpdatedAt,
116
+ contentUpdatedAt: (0, _utils.convertContentUpdatedAt)(data.contentUpdatedAt),
125
117
  createdAt: createdAt,
126
118
  createdBy: data.createdBy,
127
119
  product: data.product,
@@ -169,7 +161,7 @@ var fetchReferences = exports.fetchReferences = /*#__PURE__*/function () {
169
161
  data: convertToSyncBlockData(blockContentResponse, resourceId),
170
162
  resourceId: resourceId
171
163
  };
172
- } catch (_unused) {
164
+ } catch (_unused2) {
173
165
  // JSON parsing error, return InvalidContent error
174
166
  return {
175
167
  error: _types.SyncBlockError.InvalidContent,
@@ -212,7 +204,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
212
204
  key: "fetchData",
213
205
  value: function () {
214
206
  var _fetchData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(resourceId) {
215
- var blockAri, blockContentResponse, value, syncedBlockData, contentUpdatedAt;
207
+ var blockAri, blockContentResponse, value, syncedBlockData;
216
208
  return _regenerator.default.wrap(function _callee2$(_context2) {
217
209
  while (1) switch (_context2.prev = _context2.next) {
218
210
  case 0:
@@ -240,47 +232,40 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
240
232
  case 8:
241
233
  // Parse the synced block content from the response's content
242
234
  syncedBlockData = JSON.parse(value);
243
- if (typeof blockContentResponse.contentUpdatedAt === 'number' && (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
244
- try {
245
- contentUpdatedAt = new Date(blockContentResponse.contentUpdatedAt).toISOString();
246
- } catch (e) {
247
- contentUpdatedAt = undefined;
248
- }
249
- }
250
235
  return _context2.abrupt("return", {
251
236
  data: {
252
237
  content: syncedBlockData,
253
238
  resourceId: blockAri,
254
239
  blockInstanceId: blockContentResponse.blockInstanceId,
255
240
  // this was the node's localId, but has become the resourceId.
256
- contentUpdatedAt: contentUpdatedAt,
241
+ contentUpdatedAt: (0, _utils.convertContentUpdatedAt)(blockContentResponse.contentUpdatedAt),
257
242
  sourceAri: blockContentResponse.sourceAri,
258
243
  product: blockContentResponse.product,
259
244
  status: blockContentResponse.status
260
245
  },
261
246
  resourceId: resourceId
262
247
  });
263
- case 13:
264
- _context2.prev = 13;
248
+ case 12:
249
+ _context2.prev = 12;
265
250
  _context2.t0 = _context2["catch"](1);
266
251
  if (!(_context2.t0 instanceof _blockService.BlockError)) {
267
- _context2.next = 17;
252
+ _context2.next = 16;
268
253
  break;
269
254
  }
270
255
  return _context2.abrupt("return", {
271
256
  error: mapBlockError(_context2.t0),
272
257
  resourceId: resourceId
273
258
  });
274
- case 17:
259
+ case 16:
275
260
  return _context2.abrupt("return", {
276
261
  error: _types.SyncBlockError.Errored,
277
262
  resourceId: resourceId
278
263
  });
279
- case 18:
264
+ case 17:
280
265
  case "end":
281
266
  return _context2.stop();
282
267
  }
283
- }, _callee2, this, [[1, 13]]);
268
+ }, _callee2, this, [[1, 12]]);
284
269
  }));
285
270
  function fetchData(_x2) {
286
271
  return _fetchData.apply(this, arguments);
@@ -373,7 +358,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
373
358
  value: (function () {
374
359
  var _batchFetchData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(blockNodeIdentifiers) {
375
360
  var _this2 = this;
376
- var blockIdentifiers, validResourceIds, processedResourceIds, response, results, _iterator, _step, blockContentResponse, resourceId, value, syncedBlockData, contentUpdatedAt, _iterator2, _step2, errorResponse, _resourceId, _iterator3, _step3, blockNodeIdentifier;
361
+ var blockIdentifiers, validResourceIds, processedResourceIds, response, results, _iterator, _step, blockContentResponse, resourceId, value, syncedBlockData, _iterator2, _step2, errorResponse, _resourceId, _iterator3, _step3, blockNodeIdentifier;
377
362
  return _regenerator.default.wrap(function _callee4$(_context4) {
378
363
  while (1) switch (_context4.prev = _context4.next) {
379
364
  case 0:
@@ -445,19 +430,11 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
445
430
  case 24:
446
431
  try {
447
432
  syncedBlockData = JSON.parse(value);
448
- contentUpdatedAt = void 0;
449
- if (typeof blockContentResponse.contentUpdatedAt === 'number' && (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
450
- try {
451
- contentUpdatedAt = new Date(blockContentResponse.contentUpdatedAt).toISOString();
452
- } catch (e) {
453
- contentUpdatedAt = undefined;
454
- }
455
- }
456
433
  results.push({
457
434
  data: {
458
435
  content: syncedBlockData,
459
436
  resourceId: blockContentResponse.blockAri,
460
- contentUpdatedAt: contentUpdatedAt,
437
+ contentUpdatedAt: (0, _utils.convertContentUpdatedAt)(blockContentResponse.contentUpdatedAt),
461
438
  blockInstanceId: blockContentResponse.blockInstanceId,
462
439
  sourceAri: blockContentResponse.sourceAri,
463
440
  product: blockContentResponse.product,
@@ -465,7 +442,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
465
442
  },
466
443
  resourceId: resourceId
467
444
  });
468
- } catch (_unused2) {
445
+ } catch (_unused3) {
469
446
  results.push({
470
447
  error: _types.SyncBlockError.Errored,
471
448
  resourceId: resourceId
@@ -590,6 +567,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
590
567
  sourceAri: parsedData.sourceAri,
591
568
  product: parsedData.product,
592
569
  createdAt: parsedData.createdAt,
570
+ contentUpdatedAt: parsedData.contentUpdatedAt,
593
571
  createdBy: parsedData.createdBy,
594
572
  status: parsedData.status
595
573
  },
@@ -903,7 +881,7 @@ var createBlockServiceAPIProviders = function createBlockServiceAPIProviders(_re
903
881
  return {
904
882
  fetchProvider: new BlockServiceADFFetchProvider({
905
883
  cloudId: cloudId,
906
- parentAri: (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding') ? parentAri : undefined
884
+ parentAri: parentAri
907
885
  }),
908
886
  writeProvider: new BlockServiceADFWriteProvider({
909
887
  cloudId: cloudId,
@@ -941,6 +919,10 @@ var createBlockServiceFetchOnlyAPIProvider = function createBlockServiceFetchOnl
941
919
  writeProvider: undefined
942
920
  };
943
921
  };
922
+
923
+ /**
924
+ * If the parentAri is not a valid ARI, pass in an empty string.
925
+ */
944
926
  var useMemoizedBlockServiceFetchOnlyAPIProvider = exports.useMemoizedBlockServiceFetchOnlyAPIProvider = function useMemoizedBlockServiceFetchOnlyAPIProvider(_ref8) {
945
927
  var cloudId = _ref8.cloudId,
946
928
  parentAri = _ref8.parentAri;
@@ -499,7 +499,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
499
499
  value: (function () {
500
500
  var _fetchSyncBlocksData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(syncBlockNodes) {
501
501
  var _this5 = this;
502
- var nodesToFetch, _this$fetchExperience, data, resolvedData, hasUnexpectedError, hasExpectedError, _this$fetchExperience2, _this$fetchExperience3, _this$fetchExperience4;
502
+ var nodesToFetch, _this$fetchExperience, data, hasUnexpectedError, hasExpectedError, _this$fetchExperience2, _this$fetchExperience3, _this$fetchExperience4;
503
503
  return _regenerator.default.wrap(function _callee2$(_context3) {
504
504
  while (1) switch (_context3.prev = _context3.next) {
505
505
  case 0:
@@ -547,7 +547,6 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
547
547
  });
548
548
  case 12:
549
549
  data = _context3.sent;
550
- resolvedData = [];
551
550
  hasUnexpectedError = false;
552
551
  hasExpectedError = false;
553
552
  data.forEach(function (syncBlockInstance) {
@@ -559,7 +558,6 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
559
558
  var existingSyncBlock = _this5.getFromCache(syncBlockInstance.resourceId);
560
559
  var resolvedSyncBlockInstance = existingSyncBlock ? (0, _resolveSyncBlockInstance.resolveSyncBlockInstance)(existingSyncBlock, syncBlockInstance) : syncBlockInstance;
561
560
  _this5.updateCache(resolvedSyncBlockInstance);
562
- resolvedData.push(resolvedSyncBlockInstance);
563
561
  if (syncBlockInstance.error) {
564
562
  var _this5$fireAnalyticsE2;
565
563
  (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, (0, _errorHandling.fetchErrorPayload)(syncBlockInstance.error, syncBlockInstance.resourceId));
@@ -588,7 +586,7 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
588
586
  (_this$fetchExperience4 = this.fetchExperience) === null || _this$fetchExperience4 === void 0 || _this$fetchExperience4.success();
589
587
  }
590
588
  }
591
- case 18:
589
+ case 17:
592
590
  case "end":
593
591
  return _context3.stop();
594
592
  }
@@ -3,7 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getContentIdAndProductFromResourceId = exports.createSyncBlockNode = exports.convertSyncBlockPMNodeToSyncBlockData = exports.convertSyncBlockJSONNodeToSyncBlockNode = exports.convertPMNodesToSyncBlockNodes = exports.convertPMNodeToSyncBlockNode = void 0;
6
+ exports.getContentIdAndProductFromResourceId = exports.createSyncBlockNode = exports.convertSyncBlockPMNodeToSyncBlockData = exports.convertSyncBlockJSONNodeToSyncBlockNode = exports.convertPMNodesToSyncBlockNodes = exports.convertPMNodeToSyncBlockNode = exports.convertContentUpdatedAt = void 0;
7
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
7
8
  /* eslint-disable require-unicode-regexp */
8
9
 
9
10
  var convertSyncBlockPMNodeToSyncBlockData = exports.convertSyncBlockPMNodeToSyncBlockData = function convertSyncBlockPMNodeToSyncBlockData(node) {
@@ -57,4 +58,14 @@ var getContentIdAndProductFromResourceId = exports.getContentIdAndProductFromRes
57
58
  };
58
59
  }
59
60
  throw new Error("Invalid resourceId: ".concat(resourceId));
61
+ };
62
+ var convertContentUpdatedAt = exports.convertContentUpdatedAt = function convertContentUpdatedAt(contentUpdatedAt) {
63
+ if (typeof contentUpdatedAt === 'number' && (0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
64
+ try {
65
+ return new Date(contentUpdatedAt).toISOString();
66
+ } catch (_unused) {
67
+ return undefined;
68
+ }
69
+ }
70
+ return undefined;
60
71
  };
@@ -1,4 +1,5 @@
1
1
  import { createClient } from 'graphql-ws';
2
+ import { convertContentUpdatedAt } from '../../utils/utils';
2
3
  const GRAPHQL_WS_ENDPOINT = '/gateway/api/graphql/subscriptions';
3
4
  let blockServiceClient = null;
4
5
  const getBlockServiceClient = () => {
@@ -69,6 +70,7 @@ const parseSubscriptionPayload = payload => {
69
70
  blockAri: payload.blockAri,
70
71
  blockInstanceId: payload.blockInstanceId,
71
72
  content: JSON.parse(payload.content),
73
+ contentUpdatedAt: convertContentUpdatedAt(payload.contentUpdatedAt),
72
74
  createdAt,
73
75
  createdBy: payload.createdBy,
74
76
  product: payload.product,
@@ -1,12 +1,12 @@
1
1
  /* eslint-disable require-unicode-regexp */
2
2
  import { useMemo } from 'react';
3
- import { fg } from '@atlaskit/platform-feature-flags';
4
3
  import { generateBlockAri, generateBlockAriFromReference } from '../../clients/block-service/ari';
5
4
  import { batchRetrieveSyncedBlocks, BlockError, createSyncedBlock, deleteSyncedBlock, getReferenceSyncedBlocks, getReferenceSyncedBlocksByBlockAri, getSyncedBlockContent, updateReferenceSyncedBlockOnDocument, updateSyncedBlock } from '../../clients/block-service/blockService';
6
5
  import { subscribeToBlockUpdates as subscribeToBlockUpdatesWS } from '../../clients/block-service/blockSubscription';
7
6
  import { SyncBlockError } from '../../common/types';
8
7
  import { stringifyError } from '../../utils/errorHandling';
9
8
  import { createResourceIdForReference } from '../../utils/resourceId';
9
+ import { convertContentUpdatedAt } from '../../utils/utils';
10
10
  const mapBlockError = error => {
11
11
  switch (error.status) {
12
12
  case 400:
@@ -87,24 +87,16 @@ export const convertToSyncBlockData = (data, resourceId) => {
87
87
  // BE returns microseconds, convert to milliseconds
88
88
  // BE should fix this in the future
89
89
  createdAt = new Date(data.createdAt / 1000).toISOString();
90
- } catch (e) {
90
+ } catch {
91
91
  // fallback to undefined
92
92
  // as we don't want to block the whole process due to invalid date
93
93
  createdAt = undefined;
94
94
  }
95
95
  }
96
- let contentUpdatedAt;
97
- if (typeof data.contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
98
- try {
99
- contentUpdatedAt = new Date(data.contentUpdatedAt).toISOString();
100
- } catch (e) {
101
- contentUpdatedAt = undefined;
102
- }
103
- }
104
96
  return {
105
97
  blockInstanceId: data.blockInstanceId,
106
98
  content: JSON.parse(data.content),
107
- contentUpdatedAt,
99
+ contentUpdatedAt: convertContentUpdatedAt(data.contentUpdatedAt),
108
100
  createdAt,
109
101
  createdBy: data.createdBy,
110
102
  product: data.product,
@@ -189,21 +181,13 @@ class BlockServiceADFFetchProvider {
189
181
 
190
182
  // Parse the synced block content from the response's content
191
183
  const syncedBlockData = JSON.parse(value);
192
- let contentUpdatedAt;
193
- if (typeof blockContentResponse.contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
194
- try {
195
- contentUpdatedAt = new Date(blockContentResponse.contentUpdatedAt).toISOString();
196
- } catch (e) {
197
- contentUpdatedAt = undefined;
198
- }
199
- }
200
184
  return {
201
185
  data: {
202
186
  content: syncedBlockData,
203
187
  resourceId: blockAri,
204
188
  blockInstanceId: blockContentResponse.blockInstanceId,
205
189
  // this was the node's localId, but has become the resourceId.
206
- contentUpdatedAt,
190
+ contentUpdatedAt: convertContentUpdatedAt(blockContentResponse.contentUpdatedAt),
207
191
  sourceAri: blockContentResponse.sourceAri,
208
192
  product: blockContentResponse.product,
209
193
  status: blockContentResponse.status
@@ -325,19 +309,11 @@ class BlockServiceADFFetchProvider {
325
309
  }
326
310
  try {
327
311
  const syncedBlockData = JSON.parse(value);
328
- let contentUpdatedAt;
329
- if (typeof blockContentResponse.contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
330
- try {
331
- contentUpdatedAt = new Date(blockContentResponse.contentUpdatedAt).toISOString();
332
- } catch (e) {
333
- contentUpdatedAt = undefined;
334
- }
335
- }
336
312
  results.push({
337
313
  data: {
338
314
  content: syncedBlockData,
339
315
  resourceId: blockContentResponse.blockAri,
340
- contentUpdatedAt,
316
+ contentUpdatedAt: convertContentUpdatedAt(blockContentResponse.contentUpdatedAt),
341
317
  blockInstanceId: blockContentResponse.blockInstanceId,
342
318
  sourceAri: blockContentResponse.sourceAri,
343
319
  product: blockContentResponse.product,
@@ -411,6 +387,7 @@ class BlockServiceADFFetchProvider {
411
387
  sourceAri: parsedData.sourceAri,
412
388
  product: parsedData.product,
413
389
  createdAt: parsedData.createdAt,
390
+ contentUpdatedAt: parsedData.contentUpdatedAt,
414
391
  createdBy: parsedData.createdBy,
415
392
  status: parsedData.status
416
393
  },
@@ -621,7 +598,7 @@ const createBlockServiceAPIProviders = ({
621
598
  return {
622
599
  fetchProvider: new BlockServiceADFFetchProvider({
623
600
  cloudId,
624
- parentAri: fg('platform_synced_block_dogfooding') ? parentAri : undefined
601
+ parentAri
625
602
  }),
626
603
  writeProvider: new BlockServiceADFWriteProvider({
627
604
  cloudId,
@@ -661,6 +638,10 @@ const createBlockServiceFetchOnlyAPIProvider = ({
661
638
  writeProvider: undefined
662
639
  };
663
640
  };
641
+
642
+ /**
643
+ * If the parentAri is not a valid ARI, pass in an empty string.
644
+ */
664
645
  export const useMemoizedBlockServiceFetchOnlyAPIProvider = ({
665
646
  cloudId,
666
647
  parentAri
@@ -399,7 +399,6 @@ export class ReferenceSyncBlockStoreManager {
399
399
  this.syncBlockFetchDataRequests.delete(node.attrs.resourceId);
400
400
  });
401
401
  });
402
- const resolvedData = [];
403
402
  let hasUnexpectedError = false;
404
403
  let hasExpectedError = false;
405
404
  data.forEach(syncBlockInstance => {
@@ -411,7 +410,6 @@ export class ReferenceSyncBlockStoreManager {
411
410
  const existingSyncBlock = this.getFromCache(syncBlockInstance.resourceId);
412
411
  const resolvedSyncBlockInstance = existingSyncBlock ? resolveSyncBlockInstance(existingSyncBlock, syncBlockInstance) : syncBlockInstance;
413
412
  this.updateCache(resolvedSyncBlockInstance);
414
- resolvedData.push(resolvedSyncBlockInstance);
415
413
  if (syncBlockInstance.error) {
416
414
  var _this$fireAnalyticsEv0;
417
415
  (_this$fireAnalyticsEv0 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv0 === void 0 ? void 0 : _this$fireAnalyticsEv0.call(this, fetchErrorPayload(syncBlockInstance.error, syncBlockInstance.resourceId));
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable require-unicode-regexp */
2
2
 
3
+ import { fg } from '@atlaskit/platform-feature-flags';
3
4
  export const convertSyncBlockPMNodeToSyncBlockData = node => {
4
5
  return {
5
6
  blockInstanceId: node.attrs.localId,
@@ -47,4 +48,14 @@ export const getContentIdAndProductFromResourceId = resourceId => {
47
48
  };
48
49
  }
49
50
  throw new Error(`Invalid resourceId: ${resourceId}`);
51
+ };
52
+ export const convertContentUpdatedAt = contentUpdatedAt => {
53
+ if (typeof contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
54
+ try {
55
+ return new Date(contentUpdatedAt).toISOString();
56
+ } catch {
57
+ return undefined;
58
+ }
59
+ }
60
+ return undefined;
50
61
  };
@@ -1,4 +1,5 @@
1
1
  import { createClient } from 'graphql-ws';
2
+ import { convertContentUpdatedAt } from '../../utils/utils';
2
3
  var GRAPHQL_WS_ENDPOINT = '/gateway/api/graphql/subscriptions';
3
4
  var blockServiceClient = null;
4
5
  var getBlockServiceClient = function getBlockServiceClient() {
@@ -54,6 +55,7 @@ var parseSubscriptionPayload = function parseSubscriptionPayload(payload) {
54
55
  blockAri: payload.blockAri,
55
56
  blockInstanceId: payload.blockInstanceId,
56
57
  content: JSON.parse(payload.content),
58
+ contentUpdatedAt: convertContentUpdatedAt(payload.contentUpdatedAt),
57
59
  createdAt: createdAt,
58
60
  createdBy: payload.createdBy,
59
61
  product: payload.product,
@@ -11,13 +11,13 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
11
11
  import _regeneratorRuntime from "@babel/runtime/regenerator";
12
12
  /* eslint-disable require-unicode-regexp */
13
13
  import { useMemo } from 'react';
14
- import { fg } from '@atlaskit/platform-feature-flags';
15
14
  import { generateBlockAri, generateBlockAriFromReference } from '../../clients/block-service/ari';
16
15
  import { batchRetrieveSyncedBlocks, BlockError, createSyncedBlock, deleteSyncedBlock, getReferenceSyncedBlocks, getReferenceSyncedBlocksByBlockAri, getSyncedBlockContent, updateReferenceSyncedBlockOnDocument, updateSyncedBlock } from '../../clients/block-service/blockService';
17
16
  import { subscribeToBlockUpdates as subscribeToBlockUpdatesWS } from '../../clients/block-service/blockSubscription';
18
17
  import { SyncBlockError } from '../../common/types';
19
18
  import { stringifyError } from '../../utils/errorHandling';
20
19
  import { createResourceIdForReference } from '../../utils/resourceId';
20
+ import { convertContentUpdatedAt } from '../../utils/utils';
21
21
  var mapBlockError = function mapBlockError(error) {
22
22
  switch (error.status) {
23
23
  case 400:
@@ -98,24 +98,16 @@ export var convertToSyncBlockData = function convertToSyncBlockData(data, resour
98
98
  // BE returns microseconds, convert to milliseconds
99
99
  // BE should fix this in the future
100
100
  createdAt = new Date(data.createdAt / 1000).toISOString();
101
- } catch (e) {
101
+ } catch (_unused) {
102
102
  // fallback to undefined
103
103
  // as we don't want to block the whole process due to invalid date
104
104
  createdAt = undefined;
105
105
  }
106
106
  }
107
- var contentUpdatedAt;
108
- if (typeof data.contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
109
- try {
110
- contentUpdatedAt = new Date(data.contentUpdatedAt).toISOString();
111
- } catch (e) {
112
- contentUpdatedAt = undefined;
113
- }
114
- }
115
107
  return {
116
108
  blockInstanceId: data.blockInstanceId,
117
109
  content: JSON.parse(data.content),
118
- contentUpdatedAt: contentUpdatedAt,
110
+ contentUpdatedAt: convertContentUpdatedAt(data.contentUpdatedAt),
119
111
  createdAt: createdAt,
120
112
  createdBy: data.createdBy,
121
113
  product: data.product,
@@ -163,7 +155,7 @@ export var fetchReferences = /*#__PURE__*/function () {
163
155
  data: convertToSyncBlockData(blockContentResponse, resourceId),
164
156
  resourceId: resourceId
165
157
  };
166
- } catch (_unused) {
158
+ } catch (_unused2) {
167
159
  // JSON parsing error, return InvalidContent error
168
160
  return {
169
161
  error: SyncBlockError.InvalidContent,
@@ -206,7 +198,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
206
198
  key: "fetchData",
207
199
  value: function () {
208
200
  var _fetchData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(resourceId) {
209
- var blockAri, blockContentResponse, value, syncedBlockData, contentUpdatedAt;
201
+ var blockAri, blockContentResponse, value, syncedBlockData;
210
202
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
211
203
  while (1) switch (_context2.prev = _context2.next) {
212
204
  case 0:
@@ -234,47 +226,40 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
234
226
  case 8:
235
227
  // Parse the synced block content from the response's content
236
228
  syncedBlockData = JSON.parse(value);
237
- if (typeof blockContentResponse.contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
238
- try {
239
- contentUpdatedAt = new Date(blockContentResponse.contentUpdatedAt).toISOString();
240
- } catch (e) {
241
- contentUpdatedAt = undefined;
242
- }
243
- }
244
229
  return _context2.abrupt("return", {
245
230
  data: {
246
231
  content: syncedBlockData,
247
232
  resourceId: blockAri,
248
233
  blockInstanceId: blockContentResponse.blockInstanceId,
249
234
  // this was the node's localId, but has become the resourceId.
250
- contentUpdatedAt: contentUpdatedAt,
235
+ contentUpdatedAt: convertContentUpdatedAt(blockContentResponse.contentUpdatedAt),
251
236
  sourceAri: blockContentResponse.sourceAri,
252
237
  product: blockContentResponse.product,
253
238
  status: blockContentResponse.status
254
239
  },
255
240
  resourceId: resourceId
256
241
  });
257
- case 13:
258
- _context2.prev = 13;
242
+ case 12:
243
+ _context2.prev = 12;
259
244
  _context2.t0 = _context2["catch"](1);
260
245
  if (!(_context2.t0 instanceof BlockError)) {
261
- _context2.next = 17;
246
+ _context2.next = 16;
262
247
  break;
263
248
  }
264
249
  return _context2.abrupt("return", {
265
250
  error: mapBlockError(_context2.t0),
266
251
  resourceId: resourceId
267
252
  });
268
- case 17:
253
+ case 16:
269
254
  return _context2.abrupt("return", {
270
255
  error: SyncBlockError.Errored,
271
256
  resourceId: resourceId
272
257
  });
273
- case 18:
258
+ case 17:
274
259
  case "end":
275
260
  return _context2.stop();
276
261
  }
277
- }, _callee2, this, [[1, 13]]);
262
+ }, _callee2, this, [[1, 12]]);
278
263
  }));
279
264
  function fetchData(_x2) {
280
265
  return _fetchData.apply(this, arguments);
@@ -367,7 +352,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
367
352
  value: (function () {
368
353
  var _batchFetchData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(blockNodeIdentifiers) {
369
354
  var _this2 = this;
370
- var blockIdentifiers, validResourceIds, processedResourceIds, response, results, _iterator, _step, blockContentResponse, resourceId, value, syncedBlockData, contentUpdatedAt, _iterator2, _step2, errorResponse, _resourceId, _iterator3, _step3, blockNodeIdentifier;
355
+ var blockIdentifiers, validResourceIds, processedResourceIds, response, results, _iterator, _step, blockContentResponse, resourceId, value, syncedBlockData, _iterator2, _step2, errorResponse, _resourceId, _iterator3, _step3, blockNodeIdentifier;
371
356
  return _regeneratorRuntime.wrap(function _callee4$(_context4) {
372
357
  while (1) switch (_context4.prev = _context4.next) {
373
358
  case 0:
@@ -439,19 +424,11 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
439
424
  case 24:
440
425
  try {
441
426
  syncedBlockData = JSON.parse(value);
442
- contentUpdatedAt = void 0;
443
- if (typeof blockContentResponse.contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
444
- try {
445
- contentUpdatedAt = new Date(blockContentResponse.contentUpdatedAt).toISOString();
446
- } catch (e) {
447
- contentUpdatedAt = undefined;
448
- }
449
- }
450
427
  results.push({
451
428
  data: {
452
429
  content: syncedBlockData,
453
430
  resourceId: blockContentResponse.blockAri,
454
- contentUpdatedAt: contentUpdatedAt,
431
+ contentUpdatedAt: convertContentUpdatedAt(blockContentResponse.contentUpdatedAt),
455
432
  blockInstanceId: blockContentResponse.blockInstanceId,
456
433
  sourceAri: blockContentResponse.sourceAri,
457
434
  product: blockContentResponse.product,
@@ -459,7 +436,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
459
436
  },
460
437
  resourceId: resourceId
461
438
  });
462
- } catch (_unused2) {
439
+ } catch (_unused3) {
463
440
  results.push({
464
441
  error: SyncBlockError.Errored,
465
442
  resourceId: resourceId
@@ -584,6 +561,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
584
561
  sourceAri: parsedData.sourceAri,
585
562
  product: parsedData.product,
586
563
  createdAt: parsedData.createdAt,
564
+ contentUpdatedAt: parsedData.contentUpdatedAt,
587
565
  createdBy: parsedData.createdBy,
588
566
  status: parsedData.status
589
567
  },
@@ -897,7 +875,7 @@ var createBlockServiceAPIProviders = function createBlockServiceAPIProviders(_re
897
875
  return {
898
876
  fetchProvider: new BlockServiceADFFetchProvider({
899
877
  cloudId: cloudId,
900
- parentAri: fg('platform_synced_block_dogfooding') ? parentAri : undefined
878
+ parentAri: parentAri
901
879
  }),
902
880
  writeProvider: new BlockServiceADFWriteProvider({
903
881
  cloudId: cloudId,
@@ -935,6 +913,10 @@ var createBlockServiceFetchOnlyAPIProvider = function createBlockServiceFetchOnl
935
913
  writeProvider: undefined
936
914
  };
937
915
  };
916
+
917
+ /**
918
+ * If the parentAri is not a valid ARI, pass in an empty string.
919
+ */
938
920
  export var useMemoizedBlockServiceFetchOnlyAPIProvider = function useMemoizedBlockServiceFetchOnlyAPIProvider(_ref8) {
939
921
  var cloudId = _ref8.cloudId,
940
922
  parentAri = _ref8.parentAri;
@@ -493,7 +493,7 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
493
493
  value: (function () {
494
494
  var _fetchSyncBlocksData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(syncBlockNodes) {
495
495
  var _this5 = this;
496
- var nodesToFetch, _this$fetchExperience, data, resolvedData, hasUnexpectedError, hasExpectedError, _this$fetchExperience2, _this$fetchExperience3, _this$fetchExperience4;
496
+ var nodesToFetch, _this$fetchExperience, data, hasUnexpectedError, hasExpectedError, _this$fetchExperience2, _this$fetchExperience3, _this$fetchExperience4;
497
497
  return _regeneratorRuntime.wrap(function _callee2$(_context3) {
498
498
  while (1) switch (_context3.prev = _context3.next) {
499
499
  case 0:
@@ -541,7 +541,6 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
541
541
  });
542
542
  case 12:
543
543
  data = _context3.sent;
544
- resolvedData = [];
545
544
  hasUnexpectedError = false;
546
545
  hasExpectedError = false;
547
546
  data.forEach(function (syncBlockInstance) {
@@ -553,7 +552,6 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
553
552
  var existingSyncBlock = _this5.getFromCache(syncBlockInstance.resourceId);
554
553
  var resolvedSyncBlockInstance = existingSyncBlock ? resolveSyncBlockInstance(existingSyncBlock, syncBlockInstance) : syncBlockInstance;
555
554
  _this5.updateCache(resolvedSyncBlockInstance);
556
- resolvedData.push(resolvedSyncBlockInstance);
557
555
  if (syncBlockInstance.error) {
558
556
  var _this5$fireAnalyticsE2;
559
557
  (_this5$fireAnalyticsE2 = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE2 === void 0 || _this5$fireAnalyticsE2.call(_this5, fetchErrorPayload(syncBlockInstance.error, syncBlockInstance.resourceId));
@@ -582,7 +580,7 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
582
580
  (_this$fetchExperience4 = this.fetchExperience) === null || _this$fetchExperience4 === void 0 || _this$fetchExperience4.success();
583
581
  }
584
582
  }
585
- case 18:
583
+ case 17:
586
584
  case "end":
587
585
  return _context3.stop();
588
586
  }
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable require-unicode-regexp */
2
2
 
3
+ import { fg } from '@atlaskit/platform-feature-flags';
3
4
  export var convertSyncBlockPMNodeToSyncBlockData = function convertSyncBlockPMNodeToSyncBlockData(node) {
4
5
  return {
5
6
  blockInstanceId: node.attrs.localId,
@@ -51,4 +52,14 @@ export var getContentIdAndProductFromResourceId = function getContentIdAndProduc
51
52
  };
52
53
  }
53
54
  throw new Error("Invalid resourceId: ".concat(resourceId));
55
+ };
56
+ export var convertContentUpdatedAt = function convertContentUpdatedAt(contentUpdatedAt) {
57
+ if (typeof contentUpdatedAt === 'number' && fg('platform_synced_block_dogfooding')) {
58
+ try {
59
+ return new Date(contentUpdatedAt).toISOString();
60
+ } catch (_unused) {
61
+ return undefined;
62
+ }
63
+ }
64
+ return undefined;
54
65
  };
@@ -16,6 +16,7 @@ export type ParsedBlockSubscriptionData = {
16
16
  blockAri: string;
17
17
  blockInstanceId: string;
18
18
  content: ADFEntity[];
19
+ contentUpdatedAt?: string;
19
20
  createdAt?: string;
20
21
  createdBy: string;
21
22
  product: SyncBlockProduct;
@@ -22,14 +22,14 @@ export declare const convertToSyncBlockData: (data: BlockContentResponse, resour
22
22
  export declare const fetchReferences: (documentAri: string) => Promise<SyncBlockInstance[] | SyncBlockError>;
23
23
  interface BlockServiceADFFetchProviderProps {
24
24
  cloudId: string;
25
- parentAri?: string;
25
+ parentAri: string | undefined;
26
26
  }
27
27
  /**
28
28
  * ADFFetchProvider implementation that fetches synced block data from Block Service API
29
29
  */
30
30
  declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
31
31
  private cloudId;
32
- private parentAri?;
32
+ private parentAri;
33
33
  constructor({ cloudId, parentAri }: BlockServiceADFFetchProviderProps);
34
34
  fetchData(resourceId: string): Promise<SyncBlockInstance>;
35
35
  fetchReferences(referenceResourceId: string): Promise<ReferenceSyncBlockData>;
@@ -56,7 +56,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
56
56
  interface BlockServiceADFWriteProviderProps {
57
57
  cloudId: string;
58
58
  getVersion?: () => number | undefined;
59
- parentAri?: string;
59
+ parentAri: string | undefined;
60
60
  parentId?: string;
61
61
  product: SyncBlockProduct;
62
62
  }
@@ -68,7 +68,7 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
68
68
  private parentId?;
69
69
  private getVersion?;
70
70
  product: SyncBlockProduct;
71
- parentAri?: string;
71
+ parentAri: string | undefined;
72
72
  constructor({ cloudId, parentAri, parentId, product, getVersion, }: BlockServiceADFWriteProviderProps);
73
73
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
74
74
  createData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
@@ -80,7 +80,7 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
80
80
  interface BlockServiceAPIProvidersProps {
81
81
  cloudId: string;
82
82
  getVersion?: () => number | undefined;
83
- parentAri?: string;
83
+ parentAri: string | undefined;
84
84
  parentId?: string;
85
85
  product: SyncBlockProduct;
86
86
  }
@@ -90,8 +90,11 @@ export declare const useMemoizedBlockServiceAPIProviders: ({ cloudId, parentAri,
90
90
  };
91
91
  interface BlockServiceFetchOnlyAPIProviderProps {
92
92
  cloudId: string;
93
- parentAri?: string;
93
+ parentAri: string | undefined;
94
94
  }
95
+ /**
96
+ * If the parentAri is not a valid ARI, pass in an empty string.
97
+ */
95
98
  export declare const useMemoizedBlockServiceFetchOnlyAPIProvider: ({ cloudId, parentAri, }: BlockServiceFetchOnlyAPIProviderProps) => {
96
99
  fetchProvider: BlockServiceADFFetchProvider;
97
100
  writeProvider: undefined;
@@ -10,3 +10,4 @@ export declare const getContentIdAndProductFromResourceId: (resourceId: string)
10
10
  sourceProduct: SyncBlockProduct;
11
11
  sourceContentId: string;
12
12
  };
13
+ export declare const convertContentUpdatedAt: (contentUpdatedAt: number | undefined) => string | undefined;
@@ -16,6 +16,7 @@ export type ParsedBlockSubscriptionData = {
16
16
  blockAri: string;
17
17
  blockInstanceId: string;
18
18
  content: ADFEntity[];
19
+ contentUpdatedAt?: string;
19
20
  createdAt?: string;
20
21
  createdBy: string;
21
22
  product: SyncBlockProduct;
@@ -22,14 +22,14 @@ export declare const convertToSyncBlockData: (data: BlockContentResponse, resour
22
22
  export declare const fetchReferences: (documentAri: string) => Promise<SyncBlockInstance[] | SyncBlockError>;
23
23
  interface BlockServiceADFFetchProviderProps {
24
24
  cloudId: string;
25
- parentAri?: string;
25
+ parentAri: string | undefined;
26
26
  }
27
27
  /**
28
28
  * ADFFetchProvider implementation that fetches synced block data from Block Service API
29
29
  */
30
30
  declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
31
31
  private cloudId;
32
- private parentAri?;
32
+ private parentAri;
33
33
  constructor({ cloudId, parentAri }: BlockServiceADFFetchProviderProps);
34
34
  fetchData(resourceId: string): Promise<SyncBlockInstance>;
35
35
  fetchReferences(referenceResourceId: string): Promise<ReferenceSyncBlockData>;
@@ -56,7 +56,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
56
56
  interface BlockServiceADFWriteProviderProps {
57
57
  cloudId: string;
58
58
  getVersion?: () => number | undefined;
59
- parentAri?: string;
59
+ parentAri: string | undefined;
60
60
  parentId?: string;
61
61
  product: SyncBlockProduct;
62
62
  }
@@ -68,7 +68,7 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
68
68
  private parentId?;
69
69
  private getVersion?;
70
70
  product: SyncBlockProduct;
71
- parentAri?: string;
71
+ parentAri: string | undefined;
72
72
  constructor({ cloudId, parentAri, parentId, product, getVersion, }: BlockServiceADFWriteProviderProps);
73
73
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
74
74
  createData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
@@ -80,7 +80,7 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
80
80
  interface BlockServiceAPIProvidersProps {
81
81
  cloudId: string;
82
82
  getVersion?: () => number | undefined;
83
- parentAri?: string;
83
+ parentAri: string | undefined;
84
84
  parentId?: string;
85
85
  product: SyncBlockProduct;
86
86
  }
@@ -90,8 +90,11 @@ export declare const useMemoizedBlockServiceAPIProviders: ({ cloudId, parentAri,
90
90
  };
91
91
  interface BlockServiceFetchOnlyAPIProviderProps {
92
92
  cloudId: string;
93
- parentAri?: string;
93
+ parentAri: string | undefined;
94
94
  }
95
+ /**
96
+ * If the parentAri is not a valid ARI, pass in an empty string.
97
+ */
95
98
  export declare const useMemoizedBlockServiceFetchOnlyAPIProvider: ({ cloudId, parentAri, }: BlockServiceFetchOnlyAPIProviderProps) => {
96
99
  fetchProvider: BlockServiceADFFetchProvider;
97
100
  writeProvider: undefined;
@@ -10,3 +10,4 @@ export declare const getContentIdAndProductFromResourceId: (resourceId: string)
10
10
  sourceProduct: SyncBlockProduct;
11
11
  sourceContentId: string;
12
12
  };
13
+ export declare const convertContentUpdatedAt: (contentUpdatedAt: number | undefined) => string | undefined;
package/package.json CHANGED
@@ -78,7 +78,7 @@
78
78
  }
79
79
  },
80
80
  "name": "@atlaskit/editor-synced-block-provider",
81
- "version": "3.13.2",
81
+ "version": "3.14.1",
82
82
  "description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
83
83
  "author": "Atlassian Pty Ltd",
84
84
  "license": "Apache-2.0",