@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.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/common/types.js +6 -6
- package/dist/cjs/hooks/useFetchSyncBlockData.js +19 -12
- package/dist/cjs/hooks/useHandleContentChanges.js +5 -2
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/providers/confluence/confluenceContentAPI.js +15 -12
- package/dist/cjs/providers/in-memory/inMemory.js +4 -1
- package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +16 -8
- package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +8 -11
- package/dist/cjs/store-manager/syncBlockStoreManager.js +4 -1
- package/dist/es2019/common/types.js +5 -5
- package/dist/es2019/hooks/useFetchSyncBlockData.js +19 -12
- package/dist/es2019/hooks/useHandleContentChanges.js +5 -2
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/providers/confluence/confluenceContentAPI.js +16 -13
- package/dist/es2019/providers/in-memory/inMemory.js +4 -1
- package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +9 -4
- package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +9 -12
- package/dist/es2019/store-manager/syncBlockStoreManager.js +4 -1
- package/dist/esm/common/types.js +5 -5
- package/dist/esm/hooks/useFetchSyncBlockData.js +19 -12
- package/dist/esm/hooks/useHandleContentChanges.js +5 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/providers/confluence/confluenceContentAPI.js +16 -13
- package/dist/esm/providers/in-memory/inMemory.js +4 -1
- package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +16 -8
- package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +8 -11
- package/dist/esm/store-manager/syncBlockStoreManager.js +4 -1
- package/dist/types/common/schema.d.ts +1 -1
- package/dist/types/common/types.d.ts +2 -2
- package/dist/types/hooks/useFetchSyncBlockData.d.ts +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/providers/types.d.ts +5 -4
- package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +1 -1
- package/dist/types/store-manager/syncBlockStoreManager.d.ts +1 -1
- package/dist/types-ts4.5/common/schema.d.ts +1 -1
- package/dist/types-ts4.5/common/types.d.ts +2 -2
- package/dist/types-ts4.5/hooks/useFetchSyncBlockData.d.ts +1 -0
- package/dist/types-ts4.5/index.d.ts +1 -1
- package/dist/types-ts4.5/providers/types.d.ts +5 -4
- package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +1 -1
- package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +1 -1
- 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
|
package/dist/cjs/common/types.js
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
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 &&
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
41
|
+
}, [manager, syncBlockNode]);
|
|
35
42
|
(0, _react.useEffect)(function () {
|
|
36
43
|
fetchSyncBlockNode();
|
|
37
|
-
var interval = window.setInterval(fetchSyncBlockNode,
|
|
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
|
-
|
|
11
|
-
|
|
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, "
|
|
6
|
+
Object.defineProperty(exports, "SyncBlockError", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function get() {
|
|
9
|
-
return _types.
|
|
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
|
|
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.
|
|
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.
|
|
48
|
+
return _types.SyncBlockError.NotFound;
|
|
49
49
|
}
|
|
50
|
-
return _types.
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
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(
|
|
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.
|
|
84
|
+
_context.prev = 5;
|
|
85
|
+
_context.next = 8;
|
|
85
86
|
return this.dataProvider.fetchNodesData([syncNode]);
|
|
86
|
-
case
|
|
87
|
+
case 8:
|
|
87
88
|
data = _context.sent;
|
|
88
89
|
if (data) {
|
|
89
|
-
_context.next =
|
|
90
|
+
_context.next = 11;
|
|
90
91
|
break;
|
|
91
92
|
}
|
|
92
93
|
throw new Error('Failed to fetch sync block node data');
|
|
93
|
-
case
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return
|
|
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 {
|
|
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 &&
|
|
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
|
-
|
|
10
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
30
|
+
}, [manager, syncBlockNode]);
|
|
24
31
|
useEffect(() => {
|
|
25
32
|
fetchSyncBlockNode();
|
|
26
|
-
const interval = window.setInterval(fetchSyncBlockNode,
|
|
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
|
-
|
|
5
|
-
|
|
4
|
+
try {
|
|
5
|
+
manager.updateSyncBlockData(syncBlockNode);
|
|
6
|
+
} catch {
|
|
7
|
+
//TODO: EDITOR-1921 - add error analytics
|
|
8
|
+
}
|
|
6
9
|
}, [manager, syncBlockNode]);
|
|
7
10
|
};
|
package/dist/es2019/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 {
|
|
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 {
|
|
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
|
|
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
|
|
34
|
+
return SyncBlockError.Forbidden;
|
|
35
35
|
}
|
|
36
36
|
if (!((_content$properties = content.properties) !== null && _content$properties !== void 0 && _content$properties[0])) {
|
|
37
|
-
return
|
|
37
|
+
return SyncBlockError.NotFound;
|
|
38
38
|
}
|
|
39
|
-
return
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
74
|
+
error = getResponseError(contentProperty);
|
|
75
75
|
}
|
|
76
76
|
if (!value) {
|
|
77
77
|
return {
|
|
78
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
data: {
|
|
87
|
+
content: syncedBlockData.content,
|
|
88
|
+
resourceId,
|
|
89
|
+
blockInstanceId: localId
|
|
90
|
+
},
|
|
91
|
+
resourceId
|
|
89
92
|
};
|
|
90
93
|
} catch {
|
|
91
94
|
return {
|
|
92
|
-
|
|
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(
|
|
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
|
-
|
|
60
|
-
|
|
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 (!
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
}
|
package/dist/esm/common/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return
|
|
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 {
|
|
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 &&
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
34
|
+
}, [manager, syncBlockNode]);
|
|
28
35
|
useEffect(function () {
|
|
29
36
|
fetchSyncBlockNode();
|
|
30
|
-
var interval = window.setInterval(fetchSyncBlockNode,
|
|
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
|
-
|
|
5
|
-
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
|
39
|
+
return SyncBlockError.Forbidden;
|
|
40
40
|
}
|
|
41
41
|
if (!((_content$properties = content.properties) !== null && _content$properties !== void 0 && _content$properties[0])) {
|
|
42
|
-
return
|
|
42
|
+
return SyncBlockError.NotFound;
|
|
43
43
|
}
|
|
44
|
-
return
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
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(
|
|
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.
|
|
77
|
+
_context.prev = 5;
|
|
78
|
+
_context.next = 8;
|
|
78
79
|
return this.dataProvider.fetchNodesData([syncNode]);
|
|
79
|
-
case
|
|
80
|
+
case 8:
|
|
80
81
|
data = _context.sent;
|
|
81
82
|
if (data) {
|
|
82
|
-
_context.next =
|
|
83
|
+
_context.next = 11;
|
|
83
84
|
break;
|
|
84
85
|
}
|
|
85
86
|
throw new Error('Failed to fetch sync block node data');
|
|
86
|
-
case
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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<"
|
|
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
|
|
14
|
+
export declare enum SyncBlockError {
|
|
15
15
|
Errored = "errored",
|
|
16
16
|
NotFound = "not_found",
|
|
17
|
-
|
|
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;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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 {
|
|
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,
|
|
3
|
-
export type FetchSyncBlockDataResult =
|
|
4
|
-
|
|
5
|
-
|
|
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):
|
|
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):
|
|
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<"
|
|
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
|
|
14
|
+
export declare enum SyncBlockError {
|
|
15
15
|
Errored = "errored",
|
|
16
16
|
NotFound = "not_found",
|
|
17
|
-
|
|
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 {
|
|
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,
|
|
3
|
-
export type FetchSyncBlockDataResult =
|
|
4
|
-
|
|
5
|
-
|
|
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):
|
|
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):
|
|
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