@atlaskit/editor-synced-block-provider 2.10.5 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/clients/block-service/blockService.js +5 -4
  3. package/dist/cjs/clients/confluence/sourceInfo.js +20 -17
  4. package/dist/cjs/hooks/useFetchSyncBlockData.js +20 -11
  5. package/dist/cjs/hooks/useHandleContentChanges.js +1 -5
  6. package/dist/cjs/index.js +2 -2
  7. package/dist/cjs/providers/block-service/blockServiceAPI.js +17 -26
  8. package/dist/cjs/providers/confluence/confluenceContentAPI.js +0 -15
  9. package/dist/cjs/providers/syncBlockProvider.js +31 -41
  10. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +138 -63
  11. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +93 -43
  12. package/dist/cjs/store-manager/syncBlockStoreManager.js +3 -3
  13. package/dist/cjs/utils/errorHandling.js +31 -1
  14. package/dist/es2019/clients/block-service/blockService.js +5 -4
  15. package/dist/es2019/clients/confluence/sourceInfo.js +13 -8
  16. package/dist/es2019/hooks/useFetchSyncBlockData.js +15 -7
  17. package/dist/es2019/hooks/useHandleContentChanges.js +1 -5
  18. package/dist/es2019/index.js +1 -1
  19. package/dist/es2019/providers/block-service/blockServiceAPI.js +13 -20
  20. package/dist/es2019/providers/confluence/confluenceContentAPI.js +1 -14
  21. package/dist/es2019/providers/syncBlockProvider.js +31 -45
  22. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +124 -49
  23. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +65 -24
  24. package/dist/es2019/store-manager/syncBlockStoreManager.js +3 -3
  25. package/dist/es2019/utils/errorHandling.js +17 -1
  26. package/dist/esm/clients/block-service/blockService.js +5 -4
  27. package/dist/esm/clients/confluence/sourceInfo.js +19 -16
  28. package/dist/esm/hooks/useFetchSyncBlockData.js +20 -11
  29. package/dist/esm/hooks/useHandleContentChanges.js +1 -5
  30. package/dist/esm/index.js +1 -1
  31. package/dist/esm/providers/block-service/blockServiceAPI.js +17 -26
  32. package/dist/esm/providers/confluence/confluenceContentAPI.js +1 -16
  33. package/dist/esm/providers/syncBlockProvider.js +32 -42
  34. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +138 -63
  35. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +93 -43
  36. package/dist/esm/store-manager/syncBlockStoreManager.js +3 -3
  37. package/dist/esm/utils/errorHandling.js +30 -0
  38. package/dist/types/clients/block-service/blockService.d.ts +0 -2
  39. package/dist/types/clients/confluence/sourceInfo.d.ts +2 -1
  40. package/dist/types/hooks/useFetchSyncBlockData.d.ts +2 -1
  41. package/dist/types/index.d.ts +2 -2
  42. package/dist/types/providers/block-service/blockServiceAPI.d.ts +7 -5
  43. package/dist/types/providers/confluence/confluenceContentAPI.d.ts +2 -3
  44. package/dist/types/providers/syncBlockProvider.d.ts +12 -9
  45. package/dist/types/providers/types.d.ts +9 -9
  46. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +6 -2
  47. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +3 -1
  48. package/dist/types/store-manager/syncBlockStoreManager.d.ts +2 -1
  49. package/dist/types/utils/errorHandling.d.ts +10 -0
  50. package/dist/types-ts4.5/clients/block-service/blockService.d.ts +0 -2
  51. package/dist/types-ts4.5/clients/confluence/sourceInfo.d.ts +2 -1
  52. package/dist/types-ts4.5/hooks/useFetchSyncBlockData.d.ts +2 -1
  53. package/dist/types-ts4.5/index.d.ts +2 -2
  54. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +7 -5
  55. package/dist/types-ts4.5/providers/confluence/confluenceContentAPI.d.ts +2 -3
  56. package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +12 -9
  57. package/dist/types-ts4.5/providers/types.d.ts +9 -9
  58. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +6 -2
  59. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +3 -1
  60. package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +2 -1
  61. package/dist/types-ts4.5/utils/errorHandling.d.ts +10 -0
  62. package/package.json +2 -8
@@ -2,9 +2,11 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  import { useCallback, useEffect, useState } from 'react';
5
+ import { logException } from '@atlaskit/editor-common/monitoring';
5
6
  import { SyncBlockError } from '../common/types';
7
+ import { fetchErrorPayload } from '../utils/errorHandling';
6
8
  import { createSyncBlockNode } from '../utils/utils';
7
- export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, resourceId, localId) {
9
+ export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, resourceId, localId, fireAnalyticsEvent) {
8
10
  var _useState = useState(null),
9
11
  _useState2 = _slicedToArray(_useState, 2),
10
12
  syncBlockInstance = _useState2[0],
@@ -24,36 +26,43 @@ export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, resou
24
26
  }
25
27
  return _context.abrupt("return");
26
28
  case 2:
29
+ _context.prev = 2;
27
30
  syncBlockNode = resourceId && localId ? createSyncBlockNode(localId, resourceId) : null;
28
31
  if (syncBlockNode) {
29
- _context.next = 5;
32
+ _context.next = 6;
30
33
  break;
31
34
  }
32
- return _context.abrupt("return");
33
- case 5:
35
+ throw new Error('Failed to create sync block node from resourceid and localid');
36
+ case 6:
34
37
  setIsLoading(true);
35
- _context.prev = 6;
38
+
39
+ // Fetch sync block data, the `subscribeToSyncBlock` will update the state once data is fetched
36
40
  _context.next = 9;
37
41
  return manager.referenceManager.fetchSyncBlocksData([syncBlockNode]);
38
42
  case 9:
39
- _context.next = 14;
43
+ _context.next = 16;
40
44
  break;
41
45
  case 11:
42
46
  _context.prev = 11;
43
- _context.t0 = _context["catch"](6);
47
+ _context.t0 = _context["catch"](2);
48
+ logException(_context.t0, {
49
+ location: 'editor-synced-block-provider/useFetchSyncBlockData'
50
+ });
51
+ fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 || fireAnalyticsEvent(fetchErrorPayload(_context.t0.message));
52
+
44
53
  // Set error state if fetching fails
45
54
  setSyncBlockInstance({
46
55
  resourceId: resourceId || '',
47
56
  error: SyncBlockError.Errored
48
57
  });
49
- case 14:
58
+ case 16:
50
59
  setIsLoading(false);
51
- case 15:
60
+ case 17:
52
61
  case "end":
53
62
  return _context.stop();
54
63
  }
55
- }, _callee, null, [[6, 11]]);
56
- })), [isLoading, localId, manager.referenceManager, resourceId]);
64
+ }, _callee, null, [[2, 11]]);
65
+ })), [isLoading, localId, manager.referenceManager, resourceId, fireAnalyticsEvent]);
57
66
  useEffect(function () {
58
67
  var unsubscribe = manager.referenceManager.subscribeToSyncBlock(resourceId || '', localId || '', function (data) {
59
68
  setSyncBlockInstance(data);
@@ -1,10 +1,6 @@
1
1
  import { useEffect } from 'react';
2
2
  export var useHandleContentChanges = function useHandleContentChanges(manager, syncBlockNode) {
3
3
  useEffect(function () {
4
- try {
5
- manager.sourceManager.updateSyncBlockData(syncBlockNode);
6
- } catch (_unused) {
7
- //TODO: EDITOR-1921 - add error analytics
8
- }
4
+ manager.sourceManager.updateSyncBlockData(syncBlockNode);
9
5
  }, [manager, syncBlockNode]);
10
6
  };
package/dist/esm/index.js CHANGED
@@ -15,7 +15,7 @@ export { getConfluencePageAri, getLocalIdFromConfluencePageAri, getPageARIFromCo
15
15
  // providers
16
16
  export { useMemoizedBlockServiceAPIProviders } from './providers/block-service/blockServiceAPI';
17
17
  export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders } from './providers/confluence/confluenceContentAPI';
18
- export { fetchConfluenceSourceInfo } from './clients/confluence/sourceInfo';
18
+ export { fetchConfluencePageInfo } from './clients/confluence/sourceInfo';
19
19
  export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvider } from './providers/syncBlockProvider';
20
20
  // store managers
21
21
  export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
@@ -89,33 +89,22 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
89
89
  }
90
90
  return fetchData;
91
91
  }()
92
- }, {
93
- key: "retrieveSourceInfoFetchData",
94
- value: function retrieveSourceInfoFetchData(resourceId, pageARI) {
95
- var sourceLocalId;
96
- try {
97
- sourceLocalId = getLocalIdFromBlockResourceId(resourceId);
98
- } catch (error) {
99
- // EDITOR-1921: log analytic here, safe to continue
100
- }
101
- return {
102
- pageARI: pageARI,
103
- sourceLocalId: sourceLocalId
104
- };
105
- }
106
92
  }]);
107
93
  }();
108
94
  /**
109
95
  * ADFWriteProvider implementation that writes synced block data to Block Service API
110
96
  */
111
97
  var BlockServiceADFWriteProvider = /*#__PURE__*/function () {
112
- function BlockServiceADFWriteProvider() {
98
+ function BlockServiceADFWriteProvider(sourceAri, product) {
113
99
  _classCallCheck(this, BlockServiceADFWriteProvider);
100
+ this.sourceAri = sourceAri;
101
+ this.product = product;
114
102
  }
103
+
104
+ // it will first try to update and if it can't (404) then it will try to create
115
105
  return _createClass(BlockServiceADFWriteProvider, [{
116
106
  key: "writeData",
117
- value: // it will first try to update and if it can't (404) then it will try to create
118
- function () {
107
+ value: function () {
119
108
  var _writeData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(data) {
120
109
  var resourceId;
121
110
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
@@ -147,8 +136,8 @@ var BlockServiceADFWriteProvider = /*#__PURE__*/function () {
147
136
  return createSyncedBlock({
148
137
  blockAri: resourceId,
149
138
  blockInstanceId: data.blockInstanceId,
150
- sourceAri: resourceId,
151
- product: 'confluence-page',
139
+ sourceAri: this.sourceAri,
140
+ product: this.product,
152
141
  content: JSON.stringify(data.content)
153
142
  });
154
143
  case 13:
@@ -168,7 +157,7 @@ var BlockServiceADFWriteProvider = /*#__PURE__*/function () {
168
157
  case "end":
169
158
  return _context2.stop();
170
159
  }
171
- }, _callee2, null, [[1, 7]]);
160
+ }, _callee2, this, [[1, 7]]);
172
161
  }));
173
162
  function writeData(_x2) {
174
163
  return _writeData.apply(this, arguments);
@@ -224,22 +213,24 @@ var BlockServiceADFWriteProvider = /*#__PURE__*/function () {
224
213
  }()
225
214
  }, {
226
215
  key: "generateResourceId",
227
- value: function generateResourceId(sourceId, localId) {
228
- return blockResourceIdFromSourceAndLocalId(sourceId, localId);
216
+ value: function generateResourceId(sourceAri, localId) {
217
+ return blockResourceIdFromSourceAndLocalId(sourceAri, localId);
229
218
  }
230
219
  }]);
231
220
  }();
232
221
  /**
233
222
  * Factory function to create both providers with shared configuration
234
223
  */
235
- var createBlockServiceAPIProviders = function createBlockServiceAPIProviders() {
224
+ var createBlockServiceAPIProviders = function createBlockServiceAPIProviders(sourceAri, product) {
236
225
  var fetchProvider = new BlockServiceADFFetchProvider();
237
- var writeProvider = new BlockServiceADFWriteProvider();
226
+ var writeProvider = new BlockServiceADFWriteProvider(sourceAri, product);
238
227
  return {
239
228
  fetchProvider: fetchProvider,
240
229
  writeProvider: writeProvider
241
230
  };
242
231
  };
243
- export var useMemoizedBlockServiceAPIProviders = function useMemoizedBlockServiceAPIProviders() {
244
- return useMemo(createBlockServiceAPIProviders, []);
232
+ export var useMemoizedBlockServiceAPIProviders = function useMemoizedBlockServiceAPIProviders(sourceAri, product) {
233
+ return useMemo(function () {
234
+ return createBlockServiceAPIProviders(sourceAri, product);
235
+ }, [sourceAri, product]);
245
236
  };
@@ -7,7 +7,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
7
7
  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; }
8
8
  import _regeneratorRuntime from "@babel/runtime/regenerator";
9
9
  import { useMemo } from 'react';
10
- import { getConfluencePageAri, getPageARIFromContentPropertyResourceId, getLocalIdFromConfluencePageAri, getPageIdAndTypeFromConfluencePageAri, resourceIdFromConfluencePageSourceIdAndLocalId } from '../../clients/confluence/ari';
10
+ import { getConfluencePageAri, getLocalIdFromConfluencePageAri, getPageIdAndTypeFromConfluencePageAri, resourceIdFromConfluencePageSourceIdAndLocalId } from '../../clients/confluence/ari';
11
11
  import { getContentProperty, createContentProperty, updateContentProperty, deleteContentProperty } from '../../clients/confluence/contentProperty';
12
12
  import { isBlogPageType } from '../../clients/confluence/utils';
13
13
  import { SyncBlockError } from '../../common/types';
@@ -140,21 +140,6 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
140
140
  }
141
141
  return fetchData;
142
142
  }()
143
- }, {
144
- key: "retrieveSourceInfoFetchData",
145
- value: function retrieveSourceInfoFetchData(resourceId) {
146
- var pageARI = getPageARIFromContentPropertyResourceId(resourceId);
147
- var sourceLocalId;
148
- try {
149
- sourceLocalId = getLocalIdFromConfluencePageAri(resourceId);
150
- } catch (error) {
151
- // EDITOR-1921: log analytic here, safe to continue
152
- }
153
- return {
154
- pageARI: pageARI,
155
- sourceLocalId: sourceLocalId
156
- };
157
- }
158
143
  }]);
159
144
  }();
160
145
  /**
@@ -11,7 +11,7 @@ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstruct
11
11
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
12
12
  import { useMemo } from 'react';
13
13
  import { getPageIdAndTypeFromConfluencePageAri } from '../clients/confluence/ari';
14
- import { fetchConfluenceSourceInfo } from '../clients/confluence/sourceInfo';
14
+ import { fetchConfluencePageInfo } from '../clients/confluence/sourceInfo';
15
15
  import { SyncBlockError } from '../common/types';
16
16
  import { SyncBlockDataProvider } from '../providers/types';
17
17
  export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
@@ -84,7 +84,7 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
84
84
  return data;
85
85
  }, function () {
86
86
  return {
87
- status: SyncBlockError.Errored,
87
+ error: SyncBlockError.Errored,
88
88
  resourceId: resourceId
89
89
  };
90
90
  });
@@ -202,34 +202,28 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
202
202
  }
203
203
 
204
204
  /**
205
- * Retrieve the source info from the source id
205
+ * Fetch the source info from the source id
206
206
  *
207
- * @param node
207
+ * @param params
208
+ * @param params.sourceAri - The source ARI
209
+ * @param params.sourceProduct - The source product. e.g. 'confluence-page', 'jira-work-item'
208
210
  *
209
211
  * @returns The source info
210
212
  */
211
213
  }, {
212
- key: "retrieveSyncBlockSourceInfo",
213
- value: function retrieveSyncBlockSourceInfo(node) {
214
- // with content API, this is the concatenation of the page ARI and the block's localId.
215
- // with block service, this is the ARI of the block.
216
- // this can be cleaned up from the specific providers and placed here after platform_synced_blocks_block_service_provider
217
- var resourceId = node.attrs.resourceId;
218
- var pageARI;
219
- var sourceLocalId;
220
- if (resourceId && typeof resourceId === 'string') {
221
- try {
222
- var fetchData = this.fetchProvider.retrieveSourceInfoFetchData(resourceId, this.sourceId);
223
- pageARI = fetchData.pageARI;
224
- sourceLocalId = fetchData.sourceLocalId;
225
- } catch (error) {
226
- return Promise.reject(error);
227
- }
214
+ key: "fetchSyncBlockSourceInfo",
215
+ value: function fetchSyncBlockSourceInfo(localId, sourceAri, sourceProduct, fireAnalyticsEvent) {
216
+ if (!sourceAri || !sourceProduct) {
217
+ return Promise.reject(new Error('Source ari or source product is undefined'));
218
+ }
219
+ switch (sourceProduct) {
220
+ case 'confluence-page':
221
+ return fetchConfluencePageInfo(sourceAri, localId, fireAnalyticsEvent);
222
+ case 'jira-work-item':
223
+ return Promise.reject(new Error('Jira work item source product not supported'));
224
+ default:
225
+ return Promise.reject(new Error("".concat(sourceProduct, " source product not supported")));
228
226
  }
229
-
230
- // TODO: EDITOR-3312 - based on the source sync block product,
231
- // execute fetchConfluenceSourceInfo or fetchJiraItemSourceInfo or similar...
232
- return pageARI ? fetchConfluenceSourceInfo(pageARI, sourceLocalId) : Promise.resolve(undefined);
233
227
  }
234
228
  }, {
235
229
  key: "generateResourceId",
@@ -251,32 +245,28 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
251
245
  /**
252
246
  * Retrieve the parent info for the sync block
253
247
  *
254
- * @param resourceId
255
- * @param syncBlockInstance
248
+ * @param sourceAri - The source ARI
249
+ * @param sourceProduct - The source product. e.g. 'confluence-page', 'jira-work-item'
256
250
  *
257
251
  * @returns The parent info for the sync block
258
252
  */
259
253
  }, {
260
254
  key: "retrieveSyncBlockParentInfo",
261
- value: function retrieveSyncBlockParentInfo(syncBlockInstance) {
262
- if (!syncBlockInstance || !syncBlockInstance.data) {
255
+ value: function retrieveSyncBlockParentInfo(sourceAri, sourceProduct) {
256
+ if (!sourceAri || !sourceProduct) {
263
257
  return undefined;
264
258
  }
265
- var _syncBlockInstance$da = syncBlockInstance.data,
266
- sourceAri = _syncBlockInstance$da.sourceAri,
267
- product = _syncBlockInstance$da.product;
268
- if (!sourceAri || !product) {
269
- return undefined;
259
+ switch (sourceProduct) {
260
+ case 'confluence-page':
261
+ return {
262
+ contentId: getPageIdAndTypeFromConfluencePageAri(sourceAri).id,
263
+ contentProduct: sourceProduct
264
+ };
265
+ case 'jira-work-item':
266
+ throw new Error('Jira work item source product not supported');
267
+ default:
268
+ throw new Error("".concat(sourceProduct, " source product not supported"));
270
269
  }
271
-
272
- // TODO: EDITOR-3312 - based on the source sync block product,
273
- // execute getPageIdAndTypeFromConfluencePageAri or getJiraItemIdAndTypeFromJiraItemAri or similar...
274
- var _getPageIdAndTypeFrom = getPageIdAndTypeFromConfluencePageAri(sourceAri),
275
- contentId = _getPageIdAndTypeFrom.id;
276
- return {
277
- contentId: contentId,
278
- contentProduct: product
279
- };
280
270
  }
281
271
  }]);
282
272
  }(SyncBlockDataProvider);