@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 2.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`eb9f8e2ab6fb5`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/eb9f8e2ab6fb5) -
8
+ [EDITOR-2543] Save bodiedSyncBlock deletion to BE instantly
9
+
10
+ ## 2.3.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [`6f9f13ab4687d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6f9f13ab4687d) -
15
+ EDITOR-2451 update sync-block refreshed logic based on experience principles
16
+
3
17
  ## 2.2.3
4
18
 
5
19
  ### Patch Changes
@@ -7,44 +7,19 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useFetchSyncBlockData = exports.SYNC_BLOCK_FETCH_INTERVAL = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _react = require("react");
10
- var _types = require("../common/types");
11
10
  var SYNC_BLOCK_FETCH_INTERVAL = exports.SYNC_BLOCK_FETCH_INTERVAL = 3000;
12
11
  var useFetchSyncBlockData = exports.useFetchSyncBlockData = function useFetchSyncBlockData(manager, syncBlockNode) {
13
12
  var _useState = (0, _react.useState)(null),
14
13
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
15
14
  fetchSyncBlockDataResult = _useState2[0],
16
15
  setFetchSyncBlockDataResult = _useState2[1];
17
- var fetchSyncBlockNode = (0, _react.useCallback)(function () {
18
- manager.fetchSyncBlockData(syncBlockNode).then(function (data) {
19
- if (data !== null && data !== void 0 && data.error) {
20
- // if there is an error, we don't want to replace real existing data with the error data
21
- setFetchSyncBlockDataResult(function (prev) {
22
- if (!prev || prev.error) {
23
- return data;
24
- }
25
- return prev;
26
- });
27
- } else {
28
- setFetchSyncBlockDataResult(data !== null && data !== void 0 ? data : null);
29
- }
30
- }).catch(function () {
31
- //TODO: EDITOR-1921 - add error analytics
32
- setFetchSyncBlockDataResult(function (prev) {
33
- if (!prev || prev.error) {
34
- return {
35
- error: _types.SyncBlockError.Errored
36
- };
37
- }
38
- return prev;
39
- });
40
- });
41
- }, [manager, syncBlockNode]);
42
16
  (0, _react.useEffect)(function () {
43
- fetchSyncBlockNode();
44
- var interval = window.setInterval(fetchSyncBlockNode, SYNC_BLOCK_FETCH_INTERVAL);
17
+ var unsubscribe = manager.subscribeToSyncBlockData(syncBlockNode, function (data) {
18
+ setFetchSyncBlockDataResult(data);
19
+ });
45
20
  return function () {
46
- window.clearInterval(interval);
21
+ unsubscribe();
47
22
  };
48
- }, [fetchSyncBlockNode]);
23
+ }, [manager, setFetchSyncBlockDataResult, syncBlockNode]);
49
24
  return fetchSyncBlockDataResult;
50
25
  };
@@ -280,6 +280,56 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
280
280
  }
281
281
  return writeData;
282
282
  }()
283
+ }, {
284
+ key: "deleteData",
285
+ value: function () {
286
+ var _deleteData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(resourceId) {
287
+ var _getPageIdAndTypeFrom3, pageId, pageType, localId, key, options, deletePayload, deleteResult;
288
+ return _regenerator.default.wrap(function _callee4$(_context4) {
289
+ while (1) switch (_context4.prev = _context4.next) {
290
+ case 0:
291
+ _getPageIdAndTypeFrom3 = (0, _ari.getPageIdAndTypeFromAri)(resourceId), pageId = _getPageIdAndTypeFrom3.id, pageType = _getPageIdAndTypeFrom3.type;
292
+ localId = (0, _ari.getLocalIdFromAri)(resourceId);
293
+ key = getContentPropertyKey(this.config.contentPropertyKey, localId);
294
+ options = {
295
+ pageId: pageId,
296
+ key: key,
297
+ cloudId: this.config.cloudId,
298
+ pageType: pageType
299
+ };
300
+ _context4.prev = 4;
301
+ _context4.next = 7;
302
+ return (0, _contentProperty4.deleteContentProperty)(options);
303
+ case 7:
304
+ deletePayload = _context4.sent;
305
+ deleteResult = (0, _utils.isBlogPageType)(pageType) ? deletePayload.data.confluence.deleteBlogPostProperty : deletePayload.data.confluence.deletePageProperty;
306
+ _context4.next = 14;
307
+ break;
308
+ case 11:
309
+ _context4.prev = 11;
310
+ _context4.t0 = _context4["catch"](4);
311
+ return _context4.abrupt("return", {
312
+ resourceId: resourceId,
313
+ success: false,
314
+ error: "Fail to delete ".concat(pageType, " content property")
315
+ });
316
+ case 14:
317
+ return _context4.abrupt("return", {
318
+ resourceId: resourceId,
319
+ success: deleteResult.success,
320
+ error: deleteResult.errors.join()
321
+ });
322
+ case 15:
323
+ case "end":
324
+ return _context4.stop();
325
+ }
326
+ }, _callee4, this, [[4, 11]]);
327
+ }));
328
+ function deleteData(_x7) {
329
+ return _deleteData.apply(this, arguments);
330
+ }
331
+ return deleteData;
332
+ }()
283
333
  }]);
284
334
  }();
285
335
  /**
@@ -27,5 +27,12 @@ var inMemoryWriteProvider = exports.inMemoryWriteProvider = {
27
27
  inMemStore.set(uuid, data);
28
28
  return Promise.resolve(uuid);
29
29
  }
30
+ },
31
+ deleteData: function deleteData(resourceId) {
32
+ var success = inMemStore.delete(resourceId);
33
+ return Promise.resolve({
34
+ resourceId: resourceId,
35
+ success: success
36
+ });
30
37
  }
31
38
  };
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useMemoizedSyncedBlockProvider = exports.SyncBlockProvider = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
@@ -14,7 +15,8 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
14
15
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
17
  var _react = require("react");
17
- var _types = require("../providers/types");
18
+ var _types = require("../common/types");
19
+ var _types2 = require("../providers/types");
18
20
  var _ari = require("../utils/ari");
19
21
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
20
22
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
@@ -44,9 +46,26 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
44
46
  key: "fetchNodesData",
45
47
  value: function fetchNodesData(nodes) {
46
48
  var _this2 = this;
47
- return Promise.all(nodes.map(function (node) {
48
- return _this2.fetchProvider.fetchData(node.attrs.resourceId);
49
+ var resourceIdSet = new Set(nodes.map(function (node) {
50
+ return node.attrs.resourceId;
49
51
  }));
52
+ var resourceIds = (0, _toConsumableArray2.default)(resourceIdSet);
53
+ return Promise.allSettled(resourceIds.map(function (resourceId) {
54
+ return _this2.fetchProvider.fetchData(resourceId).then(function (data) {
55
+ return data;
56
+ }, function () {
57
+ return {
58
+ status: _types.SyncBlockError.Errored,
59
+ resourceId: resourceId
60
+ };
61
+ });
62
+ })).then(function (results) {
63
+ return results.filter(function (result) {
64
+ return result.status === 'fulfilled';
65
+ }).map(function (result) {
66
+ return result.value;
67
+ });
68
+ });
50
69
  }
51
70
 
52
71
  /**
@@ -71,6 +90,43 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
71
90
  });
72
91
  return Promise.all(resourceIds);
73
92
  }
93
+ }, {
94
+ key: "deleteNodesData",
95
+ value: function () {
96
+ var _deleteNodesData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(resourceIds) {
97
+ var _this4 = this;
98
+ var results;
99
+ return _regenerator.default.wrap(function _callee$(_context) {
100
+ while (1) switch (_context.prev = _context.next) {
101
+ case 0:
102
+ _context.next = 2;
103
+ return Promise.allSettled(resourceIds.map(function (resourceId) {
104
+ return _this4.writeProvider.deleteData(resourceId);
105
+ }));
106
+ case 2:
107
+ results = _context.sent;
108
+ return _context.abrupt("return", results.map(function (result, index) {
109
+ if (result.status === 'fulfilled') {
110
+ return result.value;
111
+ } else {
112
+ return {
113
+ resourceId: resourceIds[index],
114
+ success: false,
115
+ error: result.reason
116
+ };
117
+ }
118
+ }));
119
+ case 4:
120
+ case "end":
121
+ return _context.stop();
122
+ }
123
+ }, _callee);
124
+ }));
125
+ function deleteNodesData(_x) {
126
+ return _deleteNodesData.apply(this, arguments);
127
+ }
128
+ return deleteNodesData;
129
+ }()
74
130
  }, {
75
131
  key: "getSourceId",
76
132
  value: function getSourceId() {
@@ -97,19 +153,19 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
97
153
  return pageARI ? fetchURLfromARI(pageARI, sourceLocalId) : Promise.resolve(undefined);
98
154
  }
99
155
  }]);
100
- }(_types.SyncBlockDataProvider);
156
+ }(_types2.SyncBlockDataProvider);
101
157
  var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId) {
102
158
  return (0, _react.useMemo)(function () {
103
159
  return new SyncBlockProvider(fetchProvider, writeProvider, sourceId);
104
160
  }, [fetchProvider, writeProvider, sourceId]);
105
161
  };
106
162
  var fetchURLfromARI = /*#__PURE__*/function () {
107
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ari, sourceLocalId) {
163
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(ari, sourceLocalId) {
108
164
  var response, _payload$data, payload, url;
109
- return _regenerator.default.wrap(function _callee$(_context) {
110
- while (1) switch (_context.prev = _context.next) {
165
+ return _regenerator.default.wrap(function _callee2$(_context2) {
166
+ while (1) switch (_context2.prev = _context2.next) {
111
167
  case 0:
112
- _context.next = 2;
168
+ _context2.next = 2;
113
169
  return fetch('/gateway/api/object-resolver/resolve/ari', {
114
170
  method: 'POST',
115
171
  headers: {
@@ -121,36 +177,36 @@ var fetchURLfromARI = /*#__PURE__*/function () {
121
177
  })
122
178
  });
123
179
  case 2:
124
- response = _context.sent;
180
+ response = _context2.sent;
125
181
  if (!response.ok) {
126
- _context.next = 12;
182
+ _context2.next = 12;
127
183
  break;
128
184
  }
129
- _context.next = 6;
185
+ _context2.next = 6;
130
186
  return response.json();
131
187
  case 6:
132
- payload = _context.sent;
188
+ payload = _context2.sent;
133
189
  url = payload === null || payload === void 0 || (_payload$data = payload.data) === null || _payload$data === void 0 ? void 0 : _payload$data.url;
134
190
  if (!(typeof url === 'string')) {
135
- _context.next = 10;
191
+ _context2.next = 10;
136
192
  break;
137
193
  }
138
- return _context.abrupt("return", sourceLocalId ? url + "?block=".concat(sourceLocalId) : url);
194
+ return _context2.abrupt("return", sourceLocalId ? url + "?block=".concat(sourceLocalId) : url);
139
195
  case 10:
140
- _context.next = 13;
196
+ _context2.next = 13;
141
197
  break;
142
198
  case 12:
143
199
  //eslint-disable-next-line no-console
144
200
  console.error('Failed to fetch URL from ARI', response.statusText);
145
201
  case 13:
146
- return _context.abrupt("return", undefined);
202
+ return _context2.abrupt("return", undefined);
147
203
  case 14:
148
204
  case "end":
149
- return _context.stop();
205
+ return _context2.stop();
150
206
  }
151
- }, _callee);
207
+ }, _callee2);
152
208
  }));
153
- return function fetchURLfromARI(_x, _x2) {
209
+ return function fetchURLfromARI(_x2, _x3) {
154
210
  return _ref.apply(this, arguments);
155
211
  };
156
212
  }();