@atlaskit/editor-synced-block-provider 2.2.1 → 2.2.3

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 (43) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/common/types.js +6 -6
  3. package/dist/cjs/hooks/useFetchSyncBlockData.js +19 -12
  4. package/dist/cjs/hooks/useHandleContentChanges.js +5 -2
  5. package/dist/cjs/index.js +2 -2
  6. package/dist/cjs/providers/confluence/confluenceContentAPI.js +15 -12
  7. package/dist/cjs/providers/in-memory/inMemory.js +4 -1
  8. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +16 -8
  9. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +8 -11
  10. package/dist/cjs/store-manager/syncBlockStoreManager.js +4 -1
  11. package/dist/es2019/common/types.js +5 -5
  12. package/dist/es2019/hooks/useFetchSyncBlockData.js +19 -12
  13. package/dist/es2019/hooks/useHandleContentChanges.js +5 -2
  14. package/dist/es2019/index.js +1 -1
  15. package/dist/es2019/providers/confluence/confluenceContentAPI.js +16 -13
  16. package/dist/es2019/providers/in-memory/inMemory.js +4 -1
  17. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +9 -4
  18. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +9 -12
  19. package/dist/es2019/store-manager/syncBlockStoreManager.js +4 -1
  20. package/dist/esm/common/types.js +5 -5
  21. package/dist/esm/hooks/useFetchSyncBlockData.js +19 -12
  22. package/dist/esm/hooks/useHandleContentChanges.js +5 -2
  23. package/dist/esm/index.js +1 -1
  24. package/dist/esm/providers/confluence/confluenceContentAPI.js +16 -13
  25. package/dist/esm/providers/in-memory/inMemory.js +4 -1
  26. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +16 -8
  27. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +8 -11
  28. package/dist/esm/store-manager/syncBlockStoreManager.js +4 -1
  29. package/dist/types/common/schema.d.ts +1 -1
  30. package/dist/types/common/types.d.ts +2 -2
  31. package/dist/types/hooks/useFetchSyncBlockData.d.ts +1 -0
  32. package/dist/types/index.d.ts +1 -1
  33. package/dist/types/providers/types.d.ts +5 -4
  34. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +1 -1
  35. package/dist/types/store-manager/syncBlockStoreManager.d.ts +1 -1
  36. package/dist/types-ts4.5/common/schema.d.ts +1 -1
  37. package/dist/types-ts4.5/common/types.d.ts +2 -2
  38. package/dist/types-ts4.5/hooks/useFetchSyncBlockData.d.ts +1 -0
  39. package/dist/types-ts4.5/index.d.ts +1 -1
  40. package/dist/types-ts4.5/providers/types.d.ts +5 -4
  41. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +1 -1
  42. package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +1 -1
  43. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 2.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`b32a210dc472a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b32a210dc472a) -
8
+ Refactor async logic
9
+
10
+ ## 2.2.2
11
+
12
+ ### Patch Changes
13
+
14
+ - [`f282b1ca41f1c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f282b1ca41f1c) -
15
+ EDITOR-1648 refactor of sync block error types
16
+
3
17
  ## 2.2.1
4
18
 
5
19
  ### Patch Changes
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SyncBlockStatus = void 0;
7
- var SyncBlockStatus = exports.SyncBlockStatus = /*#__PURE__*/function (SyncBlockStatus) {
8
- SyncBlockStatus["Errored"] = "errored";
9
- SyncBlockStatus["NotFound"] = "not_found";
10
- SyncBlockStatus["Unauthorized"] = "unauthorized";
11
- return SyncBlockStatus;
6
+ exports.SyncBlockError = void 0;
7
+ var SyncBlockError = exports.SyncBlockError = /*#__PURE__*/function (SyncBlockError) {
8
+ SyncBlockError["Errored"] = "errored";
9
+ SyncBlockError["NotFound"] = "not_found";
10
+ SyncBlockError["Forbidden"] = "forbidden";
11
+ return SyncBlockError;
12
12
  }({});
@@ -4,10 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useFetchSyncBlockData = void 0;
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
10
  var _types = require("../common/types");
11
+ var SYNC_BLOCK_FETCH_INTERVAL = exports.SYNC_BLOCK_FETCH_INTERVAL = 3000;
11
12
  var useFetchSyncBlockData = exports.useFetchSyncBlockData = function useFetchSyncBlockData(manager, syncBlockNode) {
12
13
  var _useState = (0, _react.useState)(null),
13
14
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -15,26 +16,32 @@ var useFetchSyncBlockData = exports.useFetchSyncBlockData = function useFetchSyn
15
16
  setFetchSyncBlockDataResult = _useState2[1];
16
17
  var fetchSyncBlockNode = (0, _react.useCallback)(function () {
17
18
  manager.fetchSyncBlockData(syncBlockNode).then(function (data) {
18
- if (data && 'status' in data) {
19
+ if (data !== null && data !== void 0 && data.error) {
19
20
  // if there is an error, we don't want to replace real existing data with the error data
20
- if (!fetchSyncBlockDataResult || 'status' in fetchSyncBlockDataResult) {
21
- setFetchSyncBlockDataResult(data);
22
- }
21
+ setFetchSyncBlockDataResult(function (prev) {
22
+ if (!prev || prev.error) {
23
+ return data;
24
+ }
25
+ return prev;
26
+ });
23
27
  } else {
24
28
  setFetchSyncBlockDataResult(data !== null && data !== void 0 ? data : null);
25
29
  }
26
30
  }).catch(function () {
27
31
  //TODO: EDITOR-1921 - add error analytics
28
- if (!fetchSyncBlockDataResult || 'status' in fetchSyncBlockDataResult) {
29
- setFetchSyncBlockDataResult({
30
- status: _types.SyncBlockStatus.Errored
31
- });
32
- }
32
+ setFetchSyncBlockDataResult(function (prev) {
33
+ if (!prev || prev.error) {
34
+ return {
35
+ error: _types.SyncBlockError.Errored
36
+ };
37
+ }
38
+ return prev;
39
+ });
33
40
  });
34
- }, [manager, syncBlockNode, fetchSyncBlockDataResult]);
41
+ }, [manager, syncBlockNode]);
35
42
  (0, _react.useEffect)(function () {
36
43
  fetchSyncBlockNode();
37
- var interval = window.setInterval(fetchSyncBlockNode, 3000);
44
+ var interval = window.setInterval(fetchSyncBlockNode, SYNC_BLOCK_FETCH_INTERVAL);
38
45
  return function () {
39
46
  window.clearInterval(interval);
40
47
  };
@@ -7,7 +7,10 @@ exports.useHandleContentChanges = void 0;
7
7
  var _react = require("react");
8
8
  var useHandleContentChanges = exports.useHandleContentChanges = function useHandleContentChanges(manager, syncBlockNode) {
9
9
  (0, _react.useEffect)(function () {
10
- //TODO: EDITOR-1921 - add error analytics
11
- manager.updateSyncBlockData(syncBlockNode);
10
+ try {
11
+ manager.updateSyncBlockData(syncBlockNode);
12
+ } catch (_unused) {
13
+ //TODO: EDITOR-1921 - add error analytics
14
+ }
12
15
  }, [manager, syncBlockNode]);
13
16
  };
package/dist/cjs/index.js CHANGED
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "SyncBlockStatus", {
6
+ Object.defineProperty(exports, "SyncBlockError", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _types.SyncBlockStatus;
9
+ return _types.SyncBlockError;
10
10
  }
11
11
  });
12
12
  Object.defineProperty(exports, "SyncBlockStoreManager", {
@@ -38,16 +38,16 @@ var parseSyncedBlockContentPropertyValue = function parseSyncedBlockContentPrope
38
38
  throw new Error("Failed to parse synced block data: ".concat(error));
39
39
  }
40
40
  };
41
- var getResponseStatus = function getResponseStatus(contentProperty) {
41
+ var getResponseError = function getResponseError(contentProperty) {
42
42
  var _content$properties;
43
43
  var content = 'blogPost' in contentProperty.data.confluence ? contentProperty.data.confluence.blogPost : contentProperty.data.confluence.page;
44
44
  if (!content) {
45
- return _types.SyncBlockStatus.Unauthorized;
45
+ return _types.SyncBlockError.Forbidden;
46
46
  }
47
47
  if (!((_content$properties = content.properties) !== null && _content$properties !== void 0 && _content$properties[0])) {
48
- return _types.SyncBlockStatus.NotFound;
48
+ return _types.SyncBlockError.NotFound;
49
49
  }
50
- return _types.SyncBlockStatus.Errored;
50
+ return _types.SyncBlockError.Errored;
51
51
  };
52
52
 
53
53
  /**
@@ -62,7 +62,7 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
62
62
  key: "fetchData",
63
63
  value: function () {
64
64
  var _fetchData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(resourceId) {
65
- var _getPageIdAndTypeFrom, pageId, pageType, localId, key, options, status, value, _contentProperty$data, contentProperty, _contentProperty$data2, _contentProperty, syncedBlockData;
65
+ var _getPageIdAndTypeFrom, pageId, pageType, localId, key, options, error, value, _contentProperty$data, contentProperty, _contentProperty$data2, _contentProperty, syncedBlockData;
66
66
  return _regenerator.default.wrap(function _callee$(_context) {
67
67
  while (1) switch (_context.prev = _context.next) {
68
68
  case 0:
@@ -85,7 +85,7 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
85
85
  case 8:
86
86
  contentProperty = _context.sent;
87
87
  value = (_contentProperty$data = contentProperty.data.confluence.blogPost) === null || _contentProperty$data === void 0 || (_contentProperty$data = _contentProperty$data.properties) === null || _contentProperty$data === void 0 || (_contentProperty$data = _contentProperty$data[0]) === null || _contentProperty$data === void 0 ? void 0 : _contentProperty$data.value;
88
- status = getResponseStatus(contentProperty);
88
+ error = getResponseError(contentProperty);
89
89
  _context.next = 18;
90
90
  break;
91
91
  case 13:
@@ -94,29 +94,32 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
94
94
  case 15:
95
95
  _contentProperty = _context.sent;
96
96
  value = (_contentProperty$data2 = _contentProperty.data.confluence.page) === null || _contentProperty$data2 === void 0 || (_contentProperty$data2 = _contentProperty$data2.properties) === null || _contentProperty$data2 === void 0 || (_contentProperty$data2 = _contentProperty$data2[0]) === null || _contentProperty$data2 === void 0 ? void 0 : _contentProperty$data2.value;
97
- status = getResponseStatus(_contentProperty);
97
+ error = getResponseError(_contentProperty);
98
98
  case 18:
99
99
  if (value) {
100
100
  _context.next = 20;
101
101
  break;
102
102
  }
103
103
  return _context.abrupt("return", {
104
- status: status,
104
+ error: error,
105
105
  resourceId: resourceId
106
106
  });
107
107
  case 20:
108
108
  // Parse the synced block content from the property value
109
109
  syncedBlockData = parseSyncedBlockContentPropertyValue(value);
110
110
  return _context.abrupt("return", {
111
- content: syncedBlockData.content,
112
- resourceId: resourceId,
113
- blockInstanceId: localId
111
+ data: {
112
+ content: syncedBlockData.content,
113
+ resourceId: resourceId,
114
+ blockInstanceId: localId
115
+ },
116
+ resourceId: resourceId
114
117
  });
115
118
  case 24:
116
119
  _context.prev = 24;
117
120
  _context.t0 = _context["catch"](2);
118
121
  return _context.abrupt("return", {
119
- status: _types.SyncBlockStatus.Errored,
122
+ error: _types.SyncBlockError.Errored,
120
123
  resourceId: resourceId
121
124
  });
122
125
  case 27:
@@ -11,7 +11,10 @@ var inMemoryFetchProvider = exports.inMemoryFetchProvider = {
11
11
  if (!data) {
12
12
  throw new Error('Sync Block Provider (in-mem): Data not found');
13
13
  }
14
- return Promise.resolve(data);
14
+ return Promise.resolve({
15
+ data: data,
16
+ resourceId: resourceId
17
+ });
15
18
  }
16
19
  };
17
20
  var inMemoryWriteProvider = exports.inMemoryWriteProvider = {
@@ -81,27 +81,35 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
81
81
  resourceId: syncBlockNode.attrs.resourceId
82
82
  });
83
83
  }
84
- _context.next = 7;
84
+ _context.prev = 5;
85
+ _context.next = 8;
85
86
  return this.dataProvider.fetchNodesData([syncNode]);
86
- case 7:
87
+ case 8:
87
88
  data = _context.sent;
88
89
  if (data) {
89
- _context.next = 10;
90
+ _context.next = 11;
90
91
  break;
91
92
  }
92
93
  throw new Error('Failed to fetch sync block node data');
93
- case 10:
94
+ case 11:
95
+ _context.next = 16;
96
+ break;
97
+ case 13:
98
+ _context.prev = 13;
99
+ _context.t0 = _context["catch"](5);
100
+ throw new Error('Failed to fetch sync block node data');
101
+ case 16:
94
102
  fetchSyncBlockDataResult = data[0];
95
- if (!('status' in fetchSyncBlockDataResult)) {
103
+ if (!fetchSyncBlockDataResult.error && fetchSyncBlockDataResult.data) {
96
104
  // only adds it to the map if it did not error out
97
- this.syncBlockCache.set(syncBlockNode.attrs.localId, _objectSpread(_objectSpread({}, existingSyncBlock), fetchSyncBlockDataResult));
105
+ this.syncBlockCache.set(syncBlockNode.attrs.localId, _objectSpread(_objectSpread({}, existingSyncBlock), fetchSyncBlockDataResult.data));
98
106
  }
99
107
  return _context.abrupt("return", fetchSyncBlockDataResult);
100
- case 13:
108
+ case 19:
101
109
  case "end":
102
110
  return _context.stop();
103
111
  }
104
- }, _callee, this);
112
+ }, _callee, this, [[5, 13]]);
105
113
  }));
106
114
  function fetchSyncBlockData(_x) {
107
115
  return _fetchSyncBlockData.apply(this, arguments);
@@ -27,18 +27,15 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
27
27
  return (0, _createClass2.default)(SourceSyncBlockStoreManager, [{
28
28
  key: "updateSyncBlockData",
29
29
  value: function updateSyncBlockData(syncBlockNode) {
30
- try {
31
- var _syncBlockNode$attrs = syncBlockNode.attrs,
32
- localId = _syncBlockNode$attrs.localId,
33
- resourceId = _syncBlockNode$attrs.resourceId;
34
- if (!localId || !resourceId) {
35
- throw new Error('Local ID or resource ID is not set');
36
- }
37
- var syncBlockData = (0, _utils.convertSyncBlockPMNodeToSyncBlockData)(syncBlockNode);
38
- this.syncBlockCache.set(localId, syncBlockData);
39
- } catch (_unused) {
40
- //TODO: EDITOR-1921 - add error analytics
30
+ var _syncBlockNode$attrs = syncBlockNode.attrs,
31
+ localId = _syncBlockNode$attrs.localId,
32
+ resourceId = _syncBlockNode$attrs.resourceId;
33
+ if (!localId || !resourceId) {
34
+ throw new Error('Local ID or resource ID is not set');
41
35
  }
36
+ var syncBlockData = (0, _utils.convertSyncBlockPMNodeToSyncBlockData)(syncBlockNode);
37
+ this.syncBlockCache.set(localId, syncBlockData);
38
+ return true;
42
39
  }
43
40
 
44
41
  /**
@@ -23,6 +23,9 @@ var SyncBlockStoreManager = exports.SyncBlockStoreManager = /*#__PURE__*/functio
23
23
  return (0, _createClass2.default)(SyncBlockStoreManager, [{
24
24
  key: "fetchSyncBlockData",
25
25
  value: function fetchSyncBlockData(syncBlockNode) {
26
+ if (!['bodiedSyncBlock', 'syncBlock'].includes(syncBlockNode.type.name)) {
27
+ throw new Error('Node is not a sync block');
28
+ }
26
29
  if (this.isSourceBlock(syncBlockNode)) {
27
30
  return Promise.reject(new Error('Invalid sync block node type provided for fetchSyncBlockData'));
28
31
  }
@@ -37,7 +40,7 @@ var SyncBlockStoreManager = exports.SyncBlockStoreManager = /*#__PURE__*/functio
37
40
  key: "updateSyncBlockData",
38
41
  value: function updateSyncBlockData(syncBlockNode) {
39
42
  if (this.isSourceBlock(syncBlockNode)) {
40
- this.sourceSyncBlockStoreManager.updateSyncBlockData(syncBlockNode);
43
+ return this.sourceSyncBlockStoreManager.updateSyncBlockData(syncBlockNode);
41
44
  } else {
42
45
  throw new Error('Invalid sync block node type provided for updateSyncBlockData');
43
46
  }
@@ -1,6 +1,6 @@
1
- export let SyncBlockStatus = /*#__PURE__*/function (SyncBlockStatus) {
2
- SyncBlockStatus["Errored"] = "errored";
3
- SyncBlockStatus["NotFound"] = "not_found";
4
- SyncBlockStatus["Unauthorized"] = "unauthorized";
5
- return SyncBlockStatus;
1
+ export let SyncBlockError = /*#__PURE__*/function (SyncBlockError) {
2
+ SyncBlockError["Errored"] = "errored";
3
+ SyncBlockError["NotFound"] = "not_found";
4
+ SyncBlockError["Forbidden"] = "forbidden";
5
+ return SyncBlockError;
6
6
  }({});
@@ -1,29 +1,36 @@
1
1
  import { useCallback, useEffect, useState } from 'react';
2
- import { SyncBlockStatus } from '../common/types';
2
+ import { SyncBlockError } from '../common/types';
3
+ export const SYNC_BLOCK_FETCH_INTERVAL = 3000;
3
4
  export const useFetchSyncBlockData = (manager, syncBlockNode) => {
4
5
  const [fetchSyncBlockDataResult, setFetchSyncBlockDataResult] = useState(null);
5
6
  const fetchSyncBlockNode = useCallback(() => {
6
7
  manager.fetchSyncBlockData(syncBlockNode).then(data => {
7
- if (data && 'status' in data) {
8
+ if (data !== null && data !== void 0 && data.error) {
8
9
  // if there is an error, we don't want to replace real existing data with the error data
9
- if (!fetchSyncBlockDataResult || 'status' in fetchSyncBlockDataResult) {
10
- setFetchSyncBlockDataResult(data);
11
- }
10
+ setFetchSyncBlockDataResult(prev => {
11
+ if (!prev || prev.error) {
12
+ return data;
13
+ }
14
+ return prev;
15
+ });
12
16
  } else {
13
17
  setFetchSyncBlockDataResult(data !== null && data !== void 0 ? data : null);
14
18
  }
15
19
  }).catch(() => {
16
20
  //TODO: EDITOR-1921 - add error analytics
17
- if (!fetchSyncBlockDataResult || 'status' in fetchSyncBlockDataResult) {
18
- setFetchSyncBlockDataResult({
19
- status: SyncBlockStatus.Errored
20
- });
21
- }
21
+ setFetchSyncBlockDataResult(prev => {
22
+ if (!prev || prev.error) {
23
+ return {
24
+ error: SyncBlockError.Errored
25
+ };
26
+ }
27
+ return prev;
28
+ });
22
29
  });
23
- }, [manager, syncBlockNode, fetchSyncBlockDataResult]);
30
+ }, [manager, syncBlockNode]);
24
31
  useEffect(() => {
25
32
  fetchSyncBlockNode();
26
- const interval = window.setInterval(fetchSyncBlockNode, 3000);
33
+ const interval = window.setInterval(fetchSyncBlockNode, SYNC_BLOCK_FETCH_INTERVAL);
27
34
  return () => {
28
35
  window.clearInterval(interval);
29
36
  };
@@ -1,7 +1,10 @@
1
1
  import { useEffect } from 'react';
2
2
  export const useHandleContentChanges = (manager, syncBlockNode) => {
3
3
  useEffect(() => {
4
- //TODO: EDITOR-1921 - add error analytics
5
- manager.updateSyncBlockData(syncBlockNode);
4
+ try {
5
+ manager.updateSyncBlockData(syncBlockNode);
6
+ } catch {
7
+ //TODO: EDITOR-1921 - add error analytics
8
+ }
6
9
  }, [manager, syncBlockNode]);
7
10
  };
@@ -4,7 +4,7 @@ export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvide
4
4
  export { SyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
5
5
  export { useFetchSyncBlockData } from './hooks/useFetchSyncBlockData';
6
6
  export { useHandleContentChanges } from './hooks/useHandleContentChanges';
7
- export { SyncBlockStatus } from './common/types';
7
+ export { SyncBlockError } from './common/types';
8
8
  export { inMemoryFetchProvider, inMemoryWriteProvider } from './providers/in-memory/inMemory';
9
9
  export { getDefaultSyncBlockSchema } from './common/schema';
10
10
  export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders } from './providers/confluence/confluenceContentAPI';
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { useMemo } from 'react';
3
- import { SyncBlockStatus } from '../../common/types';
3
+ import { SyncBlockError } from '../../common/types';
4
4
  import { getLocalIdFromAri, getPageIdAndTypeFromAri } from '../../utils/ari';
5
5
  import { getContentProperty, createContentProperty, updateContentProperty } from '../../utils/contentProperty';
6
6
  import { isBlogPageType } from '../../utils/utils';
@@ -27,16 +27,16 @@ const parseSyncedBlockContentPropertyValue = value => {
27
27
  throw new Error(`Failed to parse synced block data: ${error}`);
28
28
  }
29
29
  };
30
- const getResponseStatus = contentProperty => {
30
+ const getResponseError = contentProperty => {
31
31
  var _content$properties;
32
32
  const content = 'blogPost' in contentProperty.data.confluence ? contentProperty.data.confluence.blogPost : contentProperty.data.confluence.page;
33
33
  if (!content) {
34
- return SyncBlockStatus.Unauthorized;
34
+ return SyncBlockError.Forbidden;
35
35
  }
36
36
  if (!((_content$properties = content.properties) !== null && _content$properties !== void 0 && _content$properties[0])) {
37
- return SyncBlockStatus.NotFound;
37
+ return SyncBlockError.NotFound;
38
38
  }
39
- return SyncBlockStatus.Errored;
39
+ return SyncBlockError.Errored;
40
40
  };
41
41
 
42
42
  /**
@@ -60,22 +60,22 @@ class ConfluenceADFFetchProvider {
60
60
  cloudId: this.config.cloudId,
61
61
  pageType
62
62
  };
63
- let status;
63
+ let error;
64
64
  let value;
65
65
  if (isBlogPageType(pageType)) {
66
66
  var _contentProperty$data, _contentProperty$data2, _contentProperty$data3;
67
67
  const contentProperty = await getContentProperty(options);
68
68
  value = (_contentProperty$data = contentProperty.data.confluence.blogPost) === null || _contentProperty$data === void 0 ? void 0 : (_contentProperty$data2 = _contentProperty$data.properties) === null || _contentProperty$data2 === void 0 ? void 0 : (_contentProperty$data3 = _contentProperty$data2[0]) === null || _contentProperty$data3 === void 0 ? void 0 : _contentProperty$data3.value;
69
- status = getResponseStatus(contentProperty);
69
+ error = getResponseError(contentProperty);
70
70
  } else {
71
71
  var _contentProperty$data4, _contentProperty$data5, _contentProperty$data6;
72
72
  const contentProperty = await getContentProperty(options);
73
73
  value = (_contentProperty$data4 = contentProperty.data.confluence.page) === null || _contentProperty$data4 === void 0 ? void 0 : (_contentProperty$data5 = _contentProperty$data4.properties) === null || _contentProperty$data5 === void 0 ? void 0 : (_contentProperty$data6 = _contentProperty$data5[0]) === null || _contentProperty$data6 === void 0 ? void 0 : _contentProperty$data6.value;
74
- status = getResponseStatus(contentProperty);
74
+ error = getResponseError(contentProperty);
75
75
  }
76
76
  if (!value) {
77
77
  return {
78
- status: status,
78
+ error,
79
79
  resourceId
80
80
  };
81
81
  }
@@ -83,13 +83,16 @@ class ConfluenceADFFetchProvider {
83
83
  // Parse the synced block content from the property value
84
84
  const syncedBlockData = parseSyncedBlockContentPropertyValue(value);
85
85
  return {
86
- content: syncedBlockData.content,
87
- resourceId,
88
- blockInstanceId: localId
86
+ data: {
87
+ content: syncedBlockData.content,
88
+ resourceId,
89
+ blockInstanceId: localId
90
+ },
91
+ resourceId
89
92
  };
90
93
  } catch {
91
94
  return {
92
- status: SyncBlockStatus.Errored,
95
+ error: SyncBlockError.Errored,
93
96
  resourceId
94
97
  };
95
98
  }
@@ -5,7 +5,10 @@ export const inMemoryFetchProvider = {
5
5
  if (!data) {
6
6
  throw new Error('Sync Block Provider (in-mem): Data not found');
7
7
  }
8
- return Promise.resolve(data);
8
+ return Promise.resolve({
9
+ data,
10
+ resourceId
11
+ });
9
12
  }
10
13
  };
11
14
  export const inMemoryWriteProvider = {
@@ -56,16 +56,21 @@ export class ReferenceSyncBlockStoreManager {
56
56
  resourceId: syncBlockNode.attrs.resourceId
57
57
  });
58
58
  }
59
- const data = await this.dataProvider.fetchNodesData([syncNode]);
60
- if (!data) {
59
+ let data;
60
+ try {
61
+ data = await this.dataProvider.fetchNodesData([syncNode]);
62
+ if (!data) {
63
+ throw new Error('Failed to fetch sync block node data');
64
+ }
65
+ } catch (error) {
61
66
  throw new Error('Failed to fetch sync block node data');
62
67
  }
63
68
  const fetchSyncBlockDataResult = data[0];
64
- if (!('status' in fetchSyncBlockDataResult)) {
69
+ if (!fetchSyncBlockDataResult.error && fetchSyncBlockDataResult.data) {
65
70
  // only adds it to the map if it did not error out
66
71
  this.syncBlockCache.set(syncBlockNode.attrs.localId, {
67
72
  ...existingSyncBlock,
68
- ...fetchSyncBlockDataResult
73
+ ...fetchSyncBlockDataResult.data
69
74
  });
70
75
  }
71
76
  return fetchSyncBlockDataResult;
@@ -13,19 +13,16 @@ export class SourceSyncBlockStoreManager {
13
13
  * @param syncBlockNode - The sync block node to update
14
14
  */
15
15
  updateSyncBlockData(syncBlockNode) {
16
- try {
17
- const {
18
- localId,
19
- resourceId
20
- } = syncBlockNode.attrs;
21
- if (!localId || !resourceId) {
22
- throw new Error('Local ID or resource ID is not set');
23
- }
24
- const syncBlockData = convertSyncBlockPMNodeToSyncBlockData(syncBlockNode);
25
- this.syncBlockCache.set(localId, syncBlockData);
26
- } catch {
27
- //TODO: EDITOR-1921 - add error analytics
16
+ const {
17
+ localId,
18
+ resourceId
19
+ } = syncBlockNode.attrs;
20
+ if (!localId || !resourceId) {
21
+ throw new Error('Local ID or resource ID is not set');
28
22
  }
23
+ const syncBlockData = convertSyncBlockPMNodeToSyncBlockData(syncBlockNode);
24
+ this.syncBlockCache.set(localId, syncBlockData);
25
+ return true;
29
26
  }
30
27
 
31
28
  /**
@@ -12,6 +12,9 @@ export class SyncBlockStoreManager {
12
12
  this.sourceSyncBlockStoreManager = new SourceSyncBlockStoreManager(dataProvider);
13
13
  }
14
14
  fetchSyncBlockData(syncBlockNode) {
15
+ if (!['bodiedSyncBlock', 'syncBlock'].includes(syncBlockNode.type.name)) {
16
+ throw new Error('Node is not a sync block');
17
+ }
15
18
  if (this.isSourceBlock(syncBlockNode)) {
16
19
  return Promise.reject(new Error('Invalid sync block node type provided for fetchSyncBlockData'));
17
20
  }
@@ -24,7 +27,7 @@ export class SyncBlockStoreManager {
24
27
  */
25
28
  updateSyncBlockData(syncBlockNode) {
26
29
  if (this.isSourceBlock(syncBlockNode)) {
27
- this.sourceSyncBlockStoreManager.updateSyncBlockData(syncBlockNode);
30
+ return this.sourceSyncBlockStoreManager.updateSyncBlockData(syncBlockNode);
28
31
  } else {
29
32
  throw new Error('Invalid sync block node type provided for updateSyncBlockData');
30
33
  }
@@ -1,6 +1,6 @@
1
- export var SyncBlockStatus = /*#__PURE__*/function (SyncBlockStatus) {
2
- SyncBlockStatus["Errored"] = "errored";
3
- SyncBlockStatus["NotFound"] = "not_found";
4
- SyncBlockStatus["Unauthorized"] = "unauthorized";
5
- return SyncBlockStatus;
1
+ export var SyncBlockError = /*#__PURE__*/function (SyncBlockError) {
2
+ SyncBlockError["Errored"] = "errored";
3
+ SyncBlockError["NotFound"] = "not_found";
4
+ SyncBlockError["Forbidden"] = "forbidden";
5
+ return SyncBlockError;
6
6
  }({});
@@ -1,6 +1,7 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { useCallback, useEffect, useState } from 'react';
3
- import { SyncBlockStatus } from '../common/types';
3
+ import { SyncBlockError } from '../common/types';
4
+ export var SYNC_BLOCK_FETCH_INTERVAL = 3000;
4
5
  export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, syncBlockNode) {
5
6
  var _useState = useState(null),
6
7
  _useState2 = _slicedToArray(_useState, 2),
@@ -8,26 +9,32 @@ export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, syncB
8
9
  setFetchSyncBlockDataResult = _useState2[1];
9
10
  var fetchSyncBlockNode = useCallback(function () {
10
11
  manager.fetchSyncBlockData(syncBlockNode).then(function (data) {
11
- if (data && 'status' in data) {
12
+ if (data !== null && data !== void 0 && data.error) {
12
13
  // if there is an error, we don't want to replace real existing data with the error data
13
- if (!fetchSyncBlockDataResult || 'status' in fetchSyncBlockDataResult) {
14
- setFetchSyncBlockDataResult(data);
15
- }
14
+ setFetchSyncBlockDataResult(function (prev) {
15
+ if (!prev || prev.error) {
16
+ return data;
17
+ }
18
+ return prev;
19
+ });
16
20
  } else {
17
21
  setFetchSyncBlockDataResult(data !== null && data !== void 0 ? data : null);
18
22
  }
19
23
  }).catch(function () {
20
24
  //TODO: EDITOR-1921 - add error analytics
21
- if (!fetchSyncBlockDataResult || 'status' in fetchSyncBlockDataResult) {
22
- setFetchSyncBlockDataResult({
23
- status: SyncBlockStatus.Errored
24
- });
25
- }
25
+ setFetchSyncBlockDataResult(function (prev) {
26
+ if (!prev || prev.error) {
27
+ return {
28
+ error: SyncBlockError.Errored
29
+ };
30
+ }
31
+ return prev;
32
+ });
26
33
  });
27
- }, [manager, syncBlockNode, fetchSyncBlockDataResult]);
34
+ }, [manager, syncBlockNode]);
28
35
  useEffect(function () {
29
36
  fetchSyncBlockNode();
30
- var interval = window.setInterval(fetchSyncBlockNode, 3000);
37
+ var interval = window.setInterval(fetchSyncBlockNode, SYNC_BLOCK_FETCH_INTERVAL);
31
38
  return function () {
32
39
  window.clearInterval(interval);
33
40
  };
@@ -1,7 +1,10 @@
1
1
  import { useEffect } from 'react';
2
2
  export var useHandleContentChanges = function useHandleContentChanges(manager, syncBlockNode) {
3
3
  useEffect(function () {
4
- //TODO: EDITOR-1921 - add error analytics
5
- manager.updateSyncBlockData(syncBlockNode);
4
+ try {
5
+ manager.updateSyncBlockData(syncBlockNode);
6
+ } catch (_unused) {
7
+ //TODO: EDITOR-1921 - add error analytics
8
+ }
6
9
  }, [manager, syncBlockNode]);
7
10
  };
package/dist/esm/index.js CHANGED
@@ -4,7 +4,7 @@ export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvide
4
4
  export { SyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
5
5
  export { useFetchSyncBlockData } from './hooks/useFetchSyncBlockData';
6
6
  export { useHandleContentChanges } from './hooks/useHandleContentChanges';
7
- export { SyncBlockStatus } from './common/types';
7
+ export { SyncBlockError } from './common/types';
8
8
  export { inMemoryFetchProvider, inMemoryWriteProvider } from './providers/in-memory/inMemory';
9
9
  export { getDefaultSyncBlockSchema } from './common/schema';
10
10
  export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders } from './providers/confluence/confluenceContentAPI';
@@ -5,7 +5,7 @@ import _createClass from "@babel/runtime/helpers/createClass";
5
5
  import _typeof from "@babel/runtime/helpers/typeof";
6
6
  import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  import { useMemo } from 'react';
8
- import { SyncBlockStatus } from '../../common/types';
8
+ import { SyncBlockError } from '../../common/types';
9
9
  import { getLocalIdFromAri, getPageIdAndTypeFromAri } from '../../utils/ari';
10
10
  import { getContentProperty, createContentProperty, updateContentProperty } from '../../utils/contentProperty';
11
11
  import { isBlogPageType } from '../../utils/utils';
@@ -32,16 +32,16 @@ var parseSyncedBlockContentPropertyValue = function parseSyncedBlockContentPrope
32
32
  throw new Error("Failed to parse synced block data: ".concat(error));
33
33
  }
34
34
  };
35
- var getResponseStatus = function getResponseStatus(contentProperty) {
35
+ var getResponseError = function getResponseError(contentProperty) {
36
36
  var _content$properties;
37
37
  var content = 'blogPost' in contentProperty.data.confluence ? contentProperty.data.confluence.blogPost : contentProperty.data.confluence.page;
38
38
  if (!content) {
39
- return SyncBlockStatus.Unauthorized;
39
+ return SyncBlockError.Forbidden;
40
40
  }
41
41
  if (!((_content$properties = content.properties) !== null && _content$properties !== void 0 && _content$properties[0])) {
42
- return SyncBlockStatus.NotFound;
42
+ return SyncBlockError.NotFound;
43
43
  }
44
- return SyncBlockStatus.Errored;
44
+ return SyncBlockError.Errored;
45
45
  };
46
46
 
47
47
  /**
@@ -56,7 +56,7 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
56
56
  key: "fetchData",
57
57
  value: function () {
58
58
  var _fetchData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(resourceId) {
59
- var _getPageIdAndTypeFrom, pageId, pageType, localId, key, options, status, value, _contentProperty$data, contentProperty, _contentProperty$data2, _contentProperty, syncedBlockData;
59
+ var _getPageIdAndTypeFrom, pageId, pageType, localId, key, options, error, value, _contentProperty$data, contentProperty, _contentProperty$data2, _contentProperty, syncedBlockData;
60
60
  return _regeneratorRuntime.wrap(function _callee$(_context) {
61
61
  while (1) switch (_context.prev = _context.next) {
62
62
  case 0:
@@ -79,7 +79,7 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
79
79
  case 8:
80
80
  contentProperty = _context.sent;
81
81
  value = (_contentProperty$data = contentProperty.data.confluence.blogPost) === null || _contentProperty$data === void 0 || (_contentProperty$data = _contentProperty$data.properties) === null || _contentProperty$data === void 0 || (_contentProperty$data = _contentProperty$data[0]) === null || _contentProperty$data === void 0 ? void 0 : _contentProperty$data.value;
82
- status = getResponseStatus(contentProperty);
82
+ error = getResponseError(contentProperty);
83
83
  _context.next = 18;
84
84
  break;
85
85
  case 13:
@@ -88,29 +88,32 @@ var ConfluenceADFFetchProvider = /*#__PURE__*/function () {
88
88
  case 15:
89
89
  _contentProperty = _context.sent;
90
90
  value = (_contentProperty$data2 = _contentProperty.data.confluence.page) === null || _contentProperty$data2 === void 0 || (_contentProperty$data2 = _contentProperty$data2.properties) === null || _contentProperty$data2 === void 0 || (_contentProperty$data2 = _contentProperty$data2[0]) === null || _contentProperty$data2 === void 0 ? void 0 : _contentProperty$data2.value;
91
- status = getResponseStatus(_contentProperty);
91
+ error = getResponseError(_contentProperty);
92
92
  case 18:
93
93
  if (value) {
94
94
  _context.next = 20;
95
95
  break;
96
96
  }
97
97
  return _context.abrupt("return", {
98
- status: status,
98
+ error: error,
99
99
  resourceId: resourceId
100
100
  });
101
101
  case 20:
102
102
  // Parse the synced block content from the property value
103
103
  syncedBlockData = parseSyncedBlockContentPropertyValue(value);
104
104
  return _context.abrupt("return", {
105
- content: syncedBlockData.content,
106
- resourceId: resourceId,
107
- blockInstanceId: localId
105
+ data: {
106
+ content: syncedBlockData.content,
107
+ resourceId: resourceId,
108
+ blockInstanceId: localId
109
+ },
110
+ resourceId: resourceId
108
111
  });
109
112
  case 24:
110
113
  _context.prev = 24;
111
114
  _context.t0 = _context["catch"](2);
112
115
  return _context.abrupt("return", {
113
- status: SyncBlockStatus.Errored,
116
+ error: SyncBlockError.Errored,
114
117
  resourceId: resourceId
115
118
  });
116
119
  case 27:
@@ -5,7 +5,10 @@ export var inMemoryFetchProvider = {
5
5
  if (!data) {
6
6
  throw new Error('Sync Block Provider (in-mem): Data not found');
7
7
  }
8
- return Promise.resolve(data);
8
+ return Promise.resolve({
9
+ data: data,
10
+ resourceId: resourceId
11
+ });
9
12
  }
10
13
  };
11
14
  export var inMemoryWriteProvider = {
@@ -74,27 +74,35 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
74
74
  resourceId: syncBlockNode.attrs.resourceId
75
75
  });
76
76
  }
77
- _context.next = 7;
77
+ _context.prev = 5;
78
+ _context.next = 8;
78
79
  return this.dataProvider.fetchNodesData([syncNode]);
79
- case 7:
80
+ case 8:
80
81
  data = _context.sent;
81
82
  if (data) {
82
- _context.next = 10;
83
+ _context.next = 11;
83
84
  break;
84
85
  }
85
86
  throw new Error('Failed to fetch sync block node data');
86
- case 10:
87
+ case 11:
88
+ _context.next = 16;
89
+ break;
90
+ case 13:
91
+ _context.prev = 13;
92
+ _context.t0 = _context["catch"](5);
93
+ throw new Error('Failed to fetch sync block node data');
94
+ case 16:
87
95
  fetchSyncBlockDataResult = data[0];
88
- if (!('status' in fetchSyncBlockDataResult)) {
96
+ if (!fetchSyncBlockDataResult.error && fetchSyncBlockDataResult.data) {
89
97
  // only adds it to the map if it did not error out
90
- this.syncBlockCache.set(syncBlockNode.attrs.localId, _objectSpread(_objectSpread({}, existingSyncBlock), fetchSyncBlockDataResult));
98
+ this.syncBlockCache.set(syncBlockNode.attrs.localId, _objectSpread(_objectSpread({}, existingSyncBlock), fetchSyncBlockDataResult.data));
91
99
  }
92
100
  return _context.abrupt("return", fetchSyncBlockDataResult);
93
- case 13:
101
+ case 19:
94
102
  case "end":
95
103
  return _context.stop();
96
104
  }
97
- }, _callee, this);
105
+ }, _callee, this, [[5, 13]]);
98
106
  }));
99
107
  function fetchSyncBlockData(_x) {
100
108
  return _fetchSyncBlockData.apply(this, arguments);
@@ -20,18 +20,15 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
20
20
  return _createClass(SourceSyncBlockStoreManager, [{
21
21
  key: "updateSyncBlockData",
22
22
  value: function updateSyncBlockData(syncBlockNode) {
23
- try {
24
- var _syncBlockNode$attrs = syncBlockNode.attrs,
25
- localId = _syncBlockNode$attrs.localId,
26
- resourceId = _syncBlockNode$attrs.resourceId;
27
- if (!localId || !resourceId) {
28
- throw new Error('Local ID or resource ID is not set');
29
- }
30
- var syncBlockData = convertSyncBlockPMNodeToSyncBlockData(syncBlockNode);
31
- this.syncBlockCache.set(localId, syncBlockData);
32
- } catch (_unused) {
33
- //TODO: EDITOR-1921 - add error analytics
23
+ var _syncBlockNode$attrs = syncBlockNode.attrs,
24
+ localId = _syncBlockNode$attrs.localId,
25
+ resourceId = _syncBlockNode$attrs.resourceId;
26
+ if (!localId || !resourceId) {
27
+ throw new Error('Local ID or resource ID is not set');
34
28
  }
29
+ var syncBlockData = convertSyncBlockPMNodeToSyncBlockData(syncBlockNode);
30
+ this.syncBlockCache.set(localId, syncBlockData);
31
+ return true;
35
32
  }
36
33
 
37
34
  /**
@@ -17,6 +17,9 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
17
17
  return _createClass(SyncBlockStoreManager, [{
18
18
  key: "fetchSyncBlockData",
19
19
  value: function fetchSyncBlockData(syncBlockNode) {
20
+ if (!['bodiedSyncBlock', 'syncBlock'].includes(syncBlockNode.type.name)) {
21
+ throw new Error('Node is not a sync block');
22
+ }
20
23
  if (this.isSourceBlock(syncBlockNode)) {
21
24
  return Promise.reject(new Error('Invalid sync block node type provided for fetchSyncBlockData'));
22
25
  }
@@ -31,7 +34,7 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
31
34
  key: "updateSyncBlockData",
32
35
  value: function updateSyncBlockData(syncBlockNode) {
33
36
  if (this.isSourceBlock(syncBlockNode)) {
34
- this.sourceSyncBlockStoreManager.updateSyncBlockData(syncBlockNode);
37
+ return this.sourceSyncBlockStoreManager.updateSyncBlockData(syncBlockNode);
35
38
  } else {
36
39
  throw new Error('Invalid sync block node type provided for updateSyncBlockData');
37
40
  }
@@ -3,4 +3,4 @@
3
3
  * Otherwise we could import defaultSchemaConfig from '@atlaskit/adf-schema/schema-default';
4
4
  * @returns
5
5
  */
6
- export declare const getDefaultSyncBlockSchema: () => import("prosemirror-model").Schema<"status" | "doc" | "paragraph" | "text" | "bulletList" | "orderedList" | "listItem" | "heading" | "blockquote" | "codeBlock" | "panel" | "rule" | "expand" | "nestedExpand" | "table" | "tableCell" | "tableHeader" | "tableRow" | "date" | "layoutSection" | "layoutColumn" | "unsupportedBlock" | "unsupportedInline", "link" | "em" | "strong" | "strike" | "subsup" | "underline" | "code" | "textColor" | "backgroundColor" | "alignment" | "indentation" | "border" | "unsupportedMark" | "unsupportedNodeAttribute" | "typeAheadQuery">;
6
+ export declare const getDefaultSyncBlockSchema: () => import("prosemirror-model").Schema<"doc" | "paragraph" | "text" | "bulletList" | "orderedList" | "listItem" | "heading" | "blockquote" | "codeBlock" | "panel" | "rule" | "expand" | "nestedExpand" | "table" | "tableCell" | "tableHeader" | "tableRow" | "date" | "status" | "layoutSection" | "layoutColumn" | "unsupportedBlock" | "unsupportedInline", "link" | "em" | "strong" | "strike" | "subsup" | "underline" | "code" | "textColor" | "backgroundColor" | "alignment" | "indentation" | "border" | "unsupportedMark" | "unsupportedNodeAttribute" | "typeAheadQuery">;
@@ -11,10 +11,10 @@ export interface SyncBlockNode extends JSONNode {
11
11
  content?: Array<JSONNode | undefined>;
12
12
  type: 'syncBlock' | 'bodiedSyncBlock';
13
13
  }
14
- export declare enum SyncBlockStatus {
14
+ export declare enum SyncBlockError {
15
15
  Errored = "errored",
16
16
  NotFound = "not_found",
17
- Unauthorized = "unauthorized"
17
+ Forbidden = "forbidden"
18
18
  }
19
19
  export interface SyncBlockData {
20
20
  blockInstanceId: BlockInstanceId;
@@ -1,4 +1,5 @@
1
1
  import { type Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
2
  import type { FetchSyncBlockDataResult } from '../providers/types';
3
3
  import type { SyncBlockStoreManager } from '../store-manager/syncBlockStoreManager';
4
+ export declare const SYNC_BLOCK_FETCH_INTERVAL = 3000;
4
5
  export declare const useFetchSyncBlockData: (manager: SyncBlockStoreManager, syncBlockNode: PMNode) => FetchSyncBlockDataResult | null;
@@ -4,7 +4,7 @@ export { useFetchSyncBlockData } from './hooks/useFetchSyncBlockData';
4
4
  export { useHandleContentChanges } from './hooks/useHandleContentChanges';
5
5
  export type { SyncBlockData, SyncBlockNode } from './common/types';
6
6
  export type { SyncBlockDataProvider, ADFFetchProvider, ADFWriteProvider, FetchSyncBlockDataResult, } from './providers/types';
7
- export { SyncBlockStatus } from './common/types';
7
+ export { SyncBlockError } from './common/types';
8
8
  export { inMemoryFetchProvider, inMemoryWriteProvider } from './providers/in-memory/inMemory';
9
9
  export { getDefaultSyncBlockSchema } from './common/schema';
10
10
  export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders, } from './providers/confluence/confluenceContentAPI';
@@ -1,8 +1,9 @@
1
1
  import { NodeDataProvider } from '@atlaskit/node-data-provider';
2
- import type { SyncBlockData, ResourceId, SyncBlockStatus, SyncBlockNode } from '../common/types';
3
- export type FetchSyncBlockDataResult = SyncBlockData | {
4
- resourceId?: ResourceId;
5
- status: SyncBlockStatus;
2
+ import type { SyncBlockData, ResourceId, SyncBlockError, SyncBlockNode } from '../common/types';
3
+ export type FetchSyncBlockDataResult = {
4
+ data?: SyncBlockData;
5
+ error?: SyncBlockError;
6
+ resourceId?: string;
6
7
  };
7
8
  export interface ADFFetchProvider {
8
9
  fetchData: (resourceId: ResourceId) => Promise<FetchSyncBlockDataResult>;
@@ -15,7 +15,7 @@ export declare class SourceSyncBlockStoreManager {
15
15
  * Add/update a sync block node to/from the local cache
16
16
  * @param syncBlockNode - The sync block node to update
17
17
  */
18
- updateSyncBlockData(syncBlockNode: PMNode): void;
18
+ updateSyncBlockData(syncBlockNode: PMNode): boolean;
19
19
  /**
20
20
  * Save content of bodiedSyncBlock nodes in local cache to backend
21
21
  *
@@ -13,7 +13,7 @@ export declare class SyncBlockStoreManager {
13
13
  * Add/update a sync block node to/from the local cache
14
14
  * @param syncBlockNode - The sync block node to update
15
15
  */
16
- updateSyncBlockData(syncBlockNode: PMNode): void;
16
+ updateSyncBlockData(syncBlockNode: PMNode): boolean;
17
17
  /**
18
18
  * Save content of bodiedSyncBlock nodes in local cache to backend
19
19
  *
@@ -3,4 +3,4 @@
3
3
  * Otherwise we could import defaultSchemaConfig from '@atlaskit/adf-schema/schema-default';
4
4
  * @returns
5
5
  */
6
- export declare const getDefaultSyncBlockSchema: () => import("prosemirror-model").Schema<"status" | "doc" | "paragraph" | "text" | "bulletList" | "orderedList" | "listItem" | "heading" | "blockquote" | "codeBlock" | "panel" | "rule" | "expand" | "nestedExpand" | "table" | "tableCell" | "tableHeader" | "tableRow" | "date" | "layoutSection" | "layoutColumn" | "unsupportedBlock" | "unsupportedInline", "link" | "em" | "strong" | "strike" | "subsup" | "underline" | "code" | "textColor" | "backgroundColor" | "alignment" | "indentation" | "border" | "unsupportedMark" | "unsupportedNodeAttribute" | "typeAheadQuery">;
6
+ export declare const getDefaultSyncBlockSchema: () => import("prosemirror-model").Schema<"doc" | "paragraph" | "text" | "bulletList" | "orderedList" | "listItem" | "heading" | "blockquote" | "codeBlock" | "panel" | "rule" | "expand" | "nestedExpand" | "table" | "tableCell" | "tableHeader" | "tableRow" | "date" | "status" | "layoutSection" | "layoutColumn" | "unsupportedBlock" | "unsupportedInline", "link" | "em" | "strong" | "strike" | "subsup" | "underline" | "code" | "textColor" | "backgroundColor" | "alignment" | "indentation" | "border" | "unsupportedMark" | "unsupportedNodeAttribute" | "typeAheadQuery">;
@@ -11,10 +11,10 @@ export interface SyncBlockNode extends JSONNode {
11
11
  content?: Array<JSONNode | undefined>;
12
12
  type: 'syncBlock' | 'bodiedSyncBlock';
13
13
  }
14
- export declare enum SyncBlockStatus {
14
+ export declare enum SyncBlockError {
15
15
  Errored = "errored",
16
16
  NotFound = "not_found",
17
- Unauthorized = "unauthorized"
17
+ Forbidden = "forbidden"
18
18
  }
19
19
  export interface SyncBlockData {
20
20
  blockInstanceId: BlockInstanceId;
@@ -1,4 +1,5 @@
1
1
  import { type Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
2
  import type { FetchSyncBlockDataResult } from '../providers/types';
3
3
  import type { SyncBlockStoreManager } from '../store-manager/syncBlockStoreManager';
4
+ export declare const SYNC_BLOCK_FETCH_INTERVAL = 3000;
4
5
  export declare const useFetchSyncBlockData: (manager: SyncBlockStoreManager, syncBlockNode: PMNode) => FetchSyncBlockDataResult | null;
@@ -4,7 +4,7 @@ export { useFetchSyncBlockData } from './hooks/useFetchSyncBlockData';
4
4
  export { useHandleContentChanges } from './hooks/useHandleContentChanges';
5
5
  export type { SyncBlockData, SyncBlockNode } from './common/types';
6
6
  export type { SyncBlockDataProvider, ADFFetchProvider, ADFWriteProvider, FetchSyncBlockDataResult, } from './providers/types';
7
- export { SyncBlockStatus } from './common/types';
7
+ export { SyncBlockError } from './common/types';
8
8
  export { inMemoryFetchProvider, inMemoryWriteProvider } from './providers/in-memory/inMemory';
9
9
  export { getDefaultSyncBlockSchema } from './common/schema';
10
10
  export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders, } from './providers/confluence/confluenceContentAPI';
@@ -1,8 +1,9 @@
1
1
  import { NodeDataProvider } from '@atlaskit/node-data-provider';
2
- import type { SyncBlockData, ResourceId, SyncBlockStatus, SyncBlockNode } from '../common/types';
3
- export type FetchSyncBlockDataResult = SyncBlockData | {
4
- resourceId?: ResourceId;
5
- status: SyncBlockStatus;
2
+ import type { SyncBlockData, ResourceId, SyncBlockError, SyncBlockNode } from '../common/types';
3
+ export type FetchSyncBlockDataResult = {
4
+ data?: SyncBlockData;
5
+ error?: SyncBlockError;
6
+ resourceId?: string;
6
7
  };
7
8
  export interface ADFFetchProvider {
8
9
  fetchData: (resourceId: ResourceId) => Promise<FetchSyncBlockDataResult>;
@@ -15,7 +15,7 @@ export declare class SourceSyncBlockStoreManager {
15
15
  * Add/update a sync block node to/from the local cache
16
16
  * @param syncBlockNode - The sync block node to update
17
17
  */
18
- updateSyncBlockData(syncBlockNode: PMNode): void;
18
+ updateSyncBlockData(syncBlockNode: PMNode): boolean;
19
19
  /**
20
20
  * Save content of bodiedSyncBlock nodes in local cache to backend
21
21
  *
@@ -13,7 +13,7 @@ export declare class SyncBlockStoreManager {
13
13
  * Add/update a sync block node to/from the local cache
14
14
  * @param syncBlockNode - The sync block node to update
15
15
  */
16
- updateSyncBlockData(syncBlockNode: PMNode): void;
16
+ updateSyncBlockData(syncBlockNode: PMNode): boolean;
17
17
  /**
18
18
  * Save content of bodiedSyncBlock nodes in local cache to backend
19
19
  *
package/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  }
83
83
  },
84
84
  "name": "@atlaskit/editor-synced-block-provider",
85
- "version": "2.2.1",
85
+ "version": "2.2.3",
86
86
  "description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
87
87
  "author": "Atlassian Pty Ltd",
88
88
  "license": "Apache-2.0",