@atlaskit/editor-synced-block-provider 2.2.3 → 2.3.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 (47) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/hooks/useFetchSyncBlockData.js +5 -30
  3. package/dist/cjs/providers/confluence/confluenceContentAPI.js +50 -0
  4. package/dist/cjs/providers/in-memory/inMemory.js +7 -0
  5. package/dist/cjs/providers/syncBlockProvider.js +75 -19
  6. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +319 -63
  7. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +35 -11
  8. package/dist/cjs/store-manager/syncBlockStoreManager.js +27 -4
  9. package/dist/cjs/utils/contentProperty.js +54 -1
  10. package/dist/cjs/utils/mergeFetchSyncBlockDataResult.js +38 -0
  11. package/dist/es2019/hooks/useFetchSyncBlockData.js +6 -31
  12. package/dist/es2019/providers/confluence/confluenceContentAPI.js +31 -1
  13. package/dist/es2019/providers/in-memory/inMemory.js +7 -0
  14. package/dist/es2019/providers/syncBlockProvider.js +31 -3
  15. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +172 -44
  16. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +16 -4
  17. package/dist/es2019/store-manager/syncBlockStoreManager.js +21 -4
  18. package/dist/es2019/utils/contentProperty.js +54 -0
  19. package/dist/es2019/utils/mergeFetchSyncBlockDataResult.js +30 -0
  20. package/dist/esm/hooks/useFetchSyncBlockData.js +6 -31
  21. package/dist/esm/providers/confluence/confluenceContentAPI.js +51 -1
  22. package/dist/esm/providers/in-memory/inMemory.js +7 -0
  23. package/dist/esm/providers/syncBlockProvider.js +73 -17
  24. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +320 -64
  25. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +35 -11
  26. package/dist/esm/store-manager/syncBlockStoreManager.js +27 -4
  27. package/dist/esm/utils/contentProperty.js +53 -0
  28. package/dist/esm/utils/mergeFetchSyncBlockDataResult.js +31 -0
  29. package/dist/types/common/schema.d.ts +1 -1
  30. package/dist/types/providers/confluence/confluenceContentAPI.d.ts +2 -1
  31. package/dist/types/providers/syncBlockProvider.d.ts +3 -2
  32. package/dist/types/providers/types.d.ts +8 -0
  33. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +24 -8
  34. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +1 -1
  35. package/dist/types/store-manager/syncBlockStoreManager.d.ts +12 -4
  36. package/dist/types/utils/contentProperty.d.ts +35 -0
  37. package/dist/types/utils/mergeFetchSyncBlockDataResult.d.ts +12 -0
  38. package/dist/types-ts4.5/common/schema.d.ts +1 -1
  39. package/dist/types-ts4.5/providers/confluence/confluenceContentAPI.d.ts +2 -1
  40. package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +3 -2
  41. package/dist/types-ts4.5/providers/types.d.ts +8 -0
  42. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +24 -8
  43. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +1 -1
  44. package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +12 -4
  45. package/dist/types-ts4.5/utils/contentProperty.d.ts +35 -0
  46. package/dist/types-ts4.5/utils/mergeFetchSyncBlockDataResult.d.ts +12 -0
  47. package/package.json +1 -1
@@ -1,43 +1,18 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- import { useCallback, useEffect, useState } from 'react';
3
- import { SyncBlockError } from '../common/types';
2
+ import { useEffect, useState } from 'react';
4
3
  export var SYNC_BLOCK_FETCH_INTERVAL = 3000;
5
4
  export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, syncBlockNode) {
6
5
  var _useState = useState(null),
7
6
  _useState2 = _slicedToArray(_useState, 2),
8
7
  fetchSyncBlockDataResult = _useState2[0],
9
8
  setFetchSyncBlockDataResult = _useState2[1];
10
- var fetchSyncBlockNode = useCallback(function () {
11
- manager.fetchSyncBlockData(syncBlockNode).then(function (data) {
12
- if (data !== null && data !== void 0 && data.error) {
13
- // if there is an error, we don't want to replace real existing data with the error data
14
- setFetchSyncBlockDataResult(function (prev) {
15
- if (!prev || prev.error) {
16
- return data;
17
- }
18
- return prev;
19
- });
20
- } else {
21
- setFetchSyncBlockDataResult(data !== null && data !== void 0 ? data : null);
22
- }
23
- }).catch(function () {
24
- //TODO: EDITOR-1921 - add error analytics
25
- setFetchSyncBlockDataResult(function (prev) {
26
- if (!prev || prev.error) {
27
- return {
28
- error: SyncBlockError.Errored
29
- };
30
- }
31
- return prev;
32
- });
33
- });
34
- }, [manager, syncBlockNode]);
35
9
  useEffect(function () {
36
- fetchSyncBlockNode();
37
- var interval = window.setInterval(fetchSyncBlockNode, SYNC_BLOCK_FETCH_INTERVAL);
10
+ var unsubscribe = manager.subscribeToSyncBlockData(syncBlockNode, function (data) {
11
+ setFetchSyncBlockDataResult(data);
12
+ });
38
13
  return function () {
39
- window.clearInterval(interval);
14
+ unsubscribe();
40
15
  };
41
- }, [fetchSyncBlockNode]);
16
+ }, [manager, setFetchSyncBlockDataResult, syncBlockNode]);
42
17
  return fetchSyncBlockDataResult;
43
18
  };
@@ -7,7 +7,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  import { useMemo } from 'react';
8
8
  import { SyncBlockError } from '../../common/types';
9
9
  import { getLocalIdFromAri, getPageIdAndTypeFromAri } from '../../utils/ari';
10
- import { getContentProperty, createContentProperty, updateContentProperty } from '../../utils/contentProperty';
10
+ import { getContentProperty, createContentProperty, updateContentProperty, deleteContentProperty } from '../../utils/contentProperty';
11
11
  import { isBlogPageType } from '../../utils/utils';
12
12
 
13
13
  /**
@@ -274,6 +274,56 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
274
274
  }
275
275
  return writeData;
276
276
  }()
277
+ }, {
278
+ key: "deleteData",
279
+ value: function () {
280
+ var _deleteData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(resourceId) {
281
+ var _getPageIdAndTypeFrom3, pageId, pageType, localId, key, options, deletePayload, deleteResult;
282
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
283
+ while (1) switch (_context4.prev = _context4.next) {
284
+ case 0:
285
+ _getPageIdAndTypeFrom3 = getPageIdAndTypeFromAri(resourceId), pageId = _getPageIdAndTypeFrom3.id, pageType = _getPageIdAndTypeFrom3.type;
286
+ localId = getLocalIdFromAri(resourceId);
287
+ key = getContentPropertyKey(this.config.contentPropertyKey, localId);
288
+ options = {
289
+ pageId: pageId,
290
+ key: key,
291
+ cloudId: this.config.cloudId,
292
+ pageType: pageType
293
+ };
294
+ _context4.prev = 4;
295
+ _context4.next = 7;
296
+ return deleteContentProperty(options);
297
+ case 7:
298
+ deletePayload = _context4.sent;
299
+ deleteResult = isBlogPageType(pageType) ? deletePayload.data.confluence.deleteBlogPostProperty : deletePayload.data.confluence.deletePageProperty;
300
+ _context4.next = 14;
301
+ break;
302
+ case 11:
303
+ _context4.prev = 11;
304
+ _context4.t0 = _context4["catch"](4);
305
+ return _context4.abrupt("return", {
306
+ resourceId: resourceId,
307
+ success: false,
308
+ error: "Fail to delete ".concat(pageType, " content property")
309
+ });
310
+ case 14:
311
+ return _context4.abrupt("return", {
312
+ resourceId: resourceId,
313
+ success: deleteResult.success,
314
+ error: deleteResult.errors.join()
315
+ });
316
+ case 15:
317
+ case "end":
318
+ return _context4.stop();
319
+ }
320
+ }, _callee4, this, [[4, 11]]);
321
+ }));
322
+ function deleteData(_x7) {
323
+ return _deleteData.apply(this, arguments);
324
+ }
325
+ return deleteData;
326
+ }()
277
327
  }]);
278
328
  }();
279
329
  /**
@@ -21,5 +21,12 @@ export var inMemoryWriteProvider = {
21
21
  inMemStore.set(uuid, data);
22
22
  return Promise.resolve(uuid);
23
23
  }
24
+ },
25
+ deleteData: function deleteData(resourceId) {
26
+ var success = inMemStore.delete(resourceId);
27
+ return Promise.resolve({
28
+ resourceId: resourceId,
29
+ success: success
30
+ });
24
31
  }
25
32
  };
@@ -1,4 +1,5 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
4
  import _createClass from "@babel/runtime/helpers/createClass";
4
5
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
@@ -9,6 +10,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
9
10
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
10
11
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
12
  import { useMemo } from 'react';
13
+ import { SyncBlockError } from '../common/types';
12
14
  import { SyncBlockDataProvider } from '../providers/types';
13
15
  import { getLocalIdFromAri, getPageARIFromResourceId } from '../utils/ari';
14
16
  export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
@@ -37,9 +39,26 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
37
39
  key: "fetchNodesData",
38
40
  value: function fetchNodesData(nodes) {
39
41
  var _this2 = this;
40
- return Promise.all(nodes.map(function (node) {
41
- return _this2.fetchProvider.fetchData(node.attrs.resourceId);
42
+ var resourceIdSet = new Set(nodes.map(function (node) {
43
+ return node.attrs.resourceId;
42
44
  }));
45
+ var resourceIds = _toConsumableArray(resourceIdSet);
46
+ return Promise.allSettled(resourceIds.map(function (resourceId) {
47
+ return _this2.fetchProvider.fetchData(resourceId).then(function (data) {
48
+ return data;
49
+ }, function () {
50
+ return {
51
+ status: SyncBlockError.Errored,
52
+ resourceId: resourceId
53
+ };
54
+ });
55
+ })).then(function (results) {
56
+ return results.filter(function (result) {
57
+ return result.status === 'fulfilled';
58
+ }).map(function (result) {
59
+ return result.value;
60
+ });
61
+ });
43
62
  }
44
63
 
45
64
  /**
@@ -64,6 +83,43 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
64
83
  });
65
84
  return Promise.all(resourceIds);
66
85
  }
86
+ }, {
87
+ key: "deleteNodesData",
88
+ value: function () {
89
+ var _deleteNodesData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(resourceIds) {
90
+ var _this4 = this;
91
+ var results;
92
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
93
+ while (1) switch (_context.prev = _context.next) {
94
+ case 0:
95
+ _context.next = 2;
96
+ return Promise.allSettled(resourceIds.map(function (resourceId) {
97
+ return _this4.writeProvider.deleteData(resourceId);
98
+ }));
99
+ case 2:
100
+ results = _context.sent;
101
+ return _context.abrupt("return", results.map(function (result, index) {
102
+ if (result.status === 'fulfilled') {
103
+ return result.value;
104
+ } else {
105
+ return {
106
+ resourceId: resourceIds[index],
107
+ success: false,
108
+ error: result.reason
109
+ };
110
+ }
111
+ }));
112
+ case 4:
113
+ case "end":
114
+ return _context.stop();
115
+ }
116
+ }, _callee);
117
+ }));
118
+ function deleteNodesData(_x) {
119
+ return _deleteNodesData.apply(this, arguments);
120
+ }
121
+ return deleteNodesData;
122
+ }()
67
123
  }, {
68
124
  key: "getSourceId",
69
125
  value: function getSourceId() {
@@ -97,12 +153,12 @@ export var useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvi
97
153
  }, [fetchProvider, writeProvider, sourceId]);
98
154
  };
99
155
  var fetchURLfromARI = /*#__PURE__*/function () {
100
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(ari, sourceLocalId) {
156
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(ari, sourceLocalId) {
101
157
  var response, _payload$data, payload, url;
102
- return _regeneratorRuntime.wrap(function _callee$(_context) {
103
- while (1) switch (_context.prev = _context.next) {
158
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
159
+ while (1) switch (_context2.prev = _context2.next) {
104
160
  case 0:
105
- _context.next = 2;
161
+ _context2.next = 2;
106
162
  return fetch('/gateway/api/object-resolver/resolve/ari', {
107
163
  method: 'POST',
108
164
  headers: {
@@ -114,36 +170,36 @@ var fetchURLfromARI = /*#__PURE__*/function () {
114
170
  })
115
171
  });
116
172
  case 2:
117
- response = _context.sent;
173
+ response = _context2.sent;
118
174
  if (!response.ok) {
119
- _context.next = 12;
175
+ _context2.next = 12;
120
176
  break;
121
177
  }
122
- _context.next = 6;
178
+ _context2.next = 6;
123
179
  return response.json();
124
180
  case 6:
125
- payload = _context.sent;
181
+ payload = _context2.sent;
126
182
  url = payload === null || payload === void 0 || (_payload$data = payload.data) === null || _payload$data === void 0 ? void 0 : _payload$data.url;
127
183
  if (!(typeof url === 'string')) {
128
- _context.next = 10;
184
+ _context2.next = 10;
129
185
  break;
130
186
  }
131
- return _context.abrupt("return", sourceLocalId ? url + "?block=".concat(sourceLocalId) : url);
187
+ return _context2.abrupt("return", sourceLocalId ? url + "?block=".concat(sourceLocalId) : url);
132
188
  case 10:
133
- _context.next = 13;
189
+ _context2.next = 13;
134
190
  break;
135
191
  case 12:
136
192
  //eslint-disable-next-line no-console
137
193
  console.error('Failed to fetch URL from ARI', response.statusText);
138
194
  case 13:
139
- return _context.abrupt("return", undefined);
195
+ return _context2.abrupt("return", undefined);
140
196
  case 14:
141
197
  case "end":
142
- return _context.stop();
198
+ return _context2.stop();
143
199
  }
144
- }, _callee);
200
+ }, _callee2);
145
201
  }));
146
- return function fetchURLfromARI(_x, _x2) {
202
+ return function fetchURLfromARI(_x2, _x3) {
147
203
  return _ref.apply(this, arguments);
148
204
  };
149
205
  }();