@atlaskit/editor-synced-block-provider 3.1.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/clients/block-service/ari.js +13 -16
- package/dist/cjs/clients/block-service/blockService.js +37 -14
- package/dist/cjs/clients/confluence/ari.js +7 -40
- package/dist/cjs/clients/confluence/sourceInfo.js +3 -1
- package/dist/cjs/clients/jira/ari.js +5 -2
- package/dist/cjs/index.js +2 -27
- package/dist/cjs/providers/block-service/blockServiceAPI.js +71 -28
- package/dist/cjs/providers/syncBlockProvider.js +57 -38
- package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +5 -8
- package/dist/es2019/clients/block-service/ari.js +15 -16
- package/dist/es2019/clients/block-service/blockService.js +39 -7
- package/dist/es2019/clients/confluence/ari.js +11 -37
- package/dist/es2019/clients/confluence/sourceInfo.js +3 -1
- package/dist/es2019/clients/jira/ari.js +9 -2
- package/dist/es2019/index.js +2 -3
- package/dist/es2019/providers/block-service/blockServiceAPI.js +75 -28
- package/dist/es2019/providers/syncBlockProvider.js +45 -25
- package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +5 -8
- package/dist/esm/clients/block-service/ari.js +13 -16
- package/dist/esm/clients/block-service/blockService.js +37 -14
- package/dist/esm/clients/confluence/ari.js +6 -39
- package/dist/esm/clients/confluence/sourceInfo.js +3 -1
- package/dist/esm/clients/jira/ari.js +5 -2
- package/dist/esm/index.js +2 -3
- package/dist/esm/providers/block-service/blockServiceAPI.js +70 -27
- package/dist/esm/providers/syncBlockProvider.js +57 -38
- package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +4 -8
- package/dist/types/clients/block-service/ari.d.ts +14 -4
- package/dist/types/clients/block-service/blockService.d.ts +1 -2
- package/dist/types/clients/confluence/ari.d.ts +8 -21
- package/dist/types/clients/jira/ari.d.ts +7 -2
- package/dist/types/index.d.ts +5 -6
- package/dist/types/providers/block-service/blockServiceAPI.d.ts +31 -6
- package/dist/types/providers/syncBlockProvider.d.ts +14 -13
- package/dist/types/providers/types.d.ts +9 -6
- package/dist/types-ts4.5/clients/block-service/ari.d.ts +14 -4
- package/dist/types-ts4.5/clients/block-service/blockService.d.ts +1 -2
- package/dist/types-ts4.5/clients/confluence/ari.d.ts +8 -21
- package/dist/types-ts4.5/clients/jira/ari.d.ts +7 -2
- package/dist/types-ts4.5/index.d.ts +5 -6
- package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +31 -6
- package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +14 -13
- package/dist/types-ts4.5/providers/types.d.ts +9 -6
- package/package.json +1 -1
- package/dist/cjs/clients/confluence/contentProperty.js +0 -284
- package/dist/cjs/providers/confluence/confluenceContentAPI.js +0 -446
- package/dist/es2019/clients/confluence/contentProperty.js +0 -288
- package/dist/es2019/providers/confluence/confluenceContentAPI.js +0 -310
- package/dist/esm/clients/confluence/contentProperty.js +0 -277
- package/dist/esm/providers/confluence/confluenceContentAPI.js +0 -440
- package/dist/types/clients/confluence/contentProperty.d.ts +0 -139
- package/dist/types/providers/confluence/confluenceContentAPI.d.ts +0 -44
- package/dist/types-ts4.5/clients/confluence/contentProperty.d.ts +0 -139
- package/dist/types-ts4.5/providers/confluence/confluenceContentAPI.d.ts +0 -44
|
@@ -18,28 +18,24 @@ var _react = require("react");
|
|
|
18
18
|
var _ari = require("../clients/confluence/ari");
|
|
19
19
|
var _sourceInfo = require("../clients/confluence/sourceInfo");
|
|
20
20
|
var _types = require("../common/types");
|
|
21
|
-
var _types2 = require("
|
|
21
|
+
var _types2 = require("./types");
|
|
22
22
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
23
23
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
24
24
|
var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
|
|
25
|
-
// the source document ARI; that the source sync block is on.
|
|
26
|
-
|
|
27
25
|
/**
|
|
28
26
|
* Constructor for the SyncBlockProvider
|
|
29
27
|
*
|
|
30
28
|
* @param fetchProvider
|
|
31
29
|
* @param writeProvider
|
|
32
|
-
* @param sourceId
|
|
33
30
|
* @param nestedRendererDataProviders
|
|
34
31
|
*/
|
|
35
|
-
function SyncBlockProvider(fetchProvider, writeProvider
|
|
32
|
+
function SyncBlockProvider(fetchProvider, writeProvider) {
|
|
36
33
|
var _this;
|
|
37
34
|
(0, _classCallCheck2.default)(this, SyncBlockProvider);
|
|
38
35
|
_this = _callSuper(this, SyncBlockProvider);
|
|
39
36
|
(0, _defineProperty2.default)(_this, "name", 'syncBlockProvider');
|
|
40
37
|
_this.fetchProvider = fetchProvider;
|
|
41
38
|
_this.writeProvider = writeProvider;
|
|
42
|
-
_this.sourceId = sourceId;
|
|
43
39
|
_this.providerOptions = {};
|
|
44
40
|
return _this;
|
|
45
41
|
}
|
|
@@ -49,11 +45,6 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
49
45
|
value: function setProviderOptions(providerOptions) {
|
|
50
46
|
this.providerOptions = providerOptions;
|
|
51
47
|
}
|
|
52
|
-
}, {
|
|
53
|
-
key: "getProduct",
|
|
54
|
-
value: function getProduct() {
|
|
55
|
-
return this.writeProvider.product;
|
|
56
|
-
}
|
|
57
48
|
|
|
58
49
|
/**
|
|
59
50
|
* Check if the node is supported by the provider
|
|
@@ -132,14 +123,24 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
132
123
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
133
124
|
while (1) switch (_context.prev = _context.next) {
|
|
134
125
|
case 0:
|
|
135
|
-
|
|
126
|
+
if (this.writeProvider) {
|
|
127
|
+
_context.next = 2;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
return _context.abrupt("return", Promise.reject(new Error('Write provider not set')));
|
|
131
|
+
case 2:
|
|
132
|
+
_context.next = 4;
|
|
136
133
|
return Promise.allSettled(nodes.map(function (_node, index) {
|
|
134
|
+
var _this3$writeProvider;
|
|
135
|
+
if (!_this3.writeProvider) {
|
|
136
|
+
return Promise.reject('Write provider not set');
|
|
137
|
+
}
|
|
137
138
|
if (!data[index].content) {
|
|
138
139
|
return Promise.reject('No Synced Block content to write');
|
|
139
140
|
}
|
|
140
|
-
return _this3.writeProvider.writeData(data[index]);
|
|
141
|
+
return (_this3$writeProvider = _this3.writeProvider) === null || _this3$writeProvider === void 0 ? void 0 : _this3$writeProvider.writeData(data[index]);
|
|
141
142
|
}));
|
|
142
|
-
case
|
|
143
|
+
case 4:
|
|
143
144
|
results = _context.sent;
|
|
144
145
|
return _context.abrupt("return", results.map(function (result) {
|
|
145
146
|
if (result.status === 'fulfilled') {
|
|
@@ -150,11 +151,11 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
150
151
|
};
|
|
151
152
|
}
|
|
152
153
|
}));
|
|
153
|
-
case
|
|
154
|
+
case 6:
|
|
154
155
|
case "end":
|
|
155
156
|
return _context.stop();
|
|
156
157
|
}
|
|
157
|
-
}, _callee);
|
|
158
|
+
}, _callee, this);
|
|
158
159
|
}));
|
|
159
160
|
function writeNodesData(_x, _x2) {
|
|
160
161
|
return _writeNodesData.apply(this, arguments);
|
|
@@ -164,6 +165,9 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
164
165
|
}, {
|
|
165
166
|
key: "createNodeData",
|
|
166
167
|
value: function createNodeData(data) {
|
|
168
|
+
if (!this.writeProvider) {
|
|
169
|
+
return Promise.reject(new Error('Write provider not set'));
|
|
170
|
+
}
|
|
167
171
|
return this.writeProvider.createData(data).then(function (result) {
|
|
168
172
|
return result;
|
|
169
173
|
}, function (error) {
|
|
@@ -189,11 +193,20 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
189
193
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
190
194
|
while (1) switch (_context2.prev = _context2.next) {
|
|
191
195
|
case 0:
|
|
192
|
-
|
|
196
|
+
if (this.writeProvider) {
|
|
197
|
+
_context2.next = 2;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
return _context2.abrupt("return", Promise.reject(new Error('Write provider not set')));
|
|
201
|
+
case 2:
|
|
202
|
+
_context2.next = 4;
|
|
193
203
|
return Promise.allSettled(resourceIds.map(function (resourceId) {
|
|
204
|
+
if (!_this4.writeProvider) {
|
|
205
|
+
return Promise.reject('Write provider not set');
|
|
206
|
+
}
|
|
194
207
|
return _this4.writeProvider.deleteData(resourceId);
|
|
195
208
|
}));
|
|
196
|
-
case
|
|
209
|
+
case 4:
|
|
197
210
|
results = _context2.sent;
|
|
198
211
|
return _context2.abrupt("return", results.map(function (result, index) {
|
|
199
212
|
if (result.status === 'fulfilled') {
|
|
@@ -206,29 +219,17 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
206
219
|
};
|
|
207
220
|
}
|
|
208
221
|
}));
|
|
209
|
-
case
|
|
222
|
+
case 6:
|
|
210
223
|
case "end":
|
|
211
224
|
return _context2.stop();
|
|
212
225
|
}
|
|
213
|
-
}, _callee2);
|
|
226
|
+
}, _callee2, this);
|
|
214
227
|
}));
|
|
215
228
|
function deleteNodesData(_x3) {
|
|
216
229
|
return _deleteNodesData.apply(this, arguments);
|
|
217
230
|
}
|
|
218
231
|
return deleteNodesData;
|
|
219
232
|
}()
|
|
220
|
-
/**
|
|
221
|
-
* Get the source id
|
|
222
|
-
*
|
|
223
|
-
* @returns The source id
|
|
224
|
-
*/
|
|
225
|
-
)
|
|
226
|
-
}, {
|
|
227
|
-
key: "getSourceId",
|
|
228
|
-
value: function getSourceId() {
|
|
229
|
-
return this.sourceId;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
233
|
/**
|
|
233
234
|
* Fetch the source info from the source id
|
|
234
235
|
*
|
|
@@ -238,6 +239,7 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
238
239
|
*
|
|
239
240
|
* @returns The source info
|
|
240
241
|
*/
|
|
242
|
+
)
|
|
241
243
|
}, {
|
|
242
244
|
key: "fetchSyncBlockSourceInfo",
|
|
243
245
|
value: function fetchSyncBlockSourceInfo(localId, sourceAri, sourceProduct, fireAnalyticsEvent) {
|
|
@@ -255,12 +257,20 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
255
257
|
}
|
|
256
258
|
}, {
|
|
257
259
|
key: "generateResourceId",
|
|
258
|
-
value: function generateResourceId(
|
|
259
|
-
|
|
260
|
+
value: function generateResourceId() {
|
|
261
|
+
var localId = crypto.randomUUID();
|
|
262
|
+
var resourceId = crypto.randomUUID();
|
|
263
|
+
return {
|
|
264
|
+
localId: localId,
|
|
265
|
+
resourceId: resourceId
|
|
266
|
+
};
|
|
260
267
|
}
|
|
261
268
|
}, {
|
|
262
269
|
key: "generateResourceIdForReference",
|
|
263
270
|
value: function generateResourceIdForReference(sourceId) {
|
|
271
|
+
if (!this.writeProvider) {
|
|
272
|
+
throw new Error('Write provider not set');
|
|
273
|
+
}
|
|
264
274
|
return this.writeProvider.generateResourceIdForReference(sourceId);
|
|
265
275
|
}
|
|
266
276
|
|
|
@@ -292,7 +302,9 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
292
302
|
switch (sourceProduct) {
|
|
293
303
|
case 'confluence-page':
|
|
294
304
|
return {
|
|
295
|
-
contentId: (0, _ari.getPageIdAndTypeFromConfluencePageAri)(
|
|
305
|
+
contentId: (0, _ari.getPageIdAndTypeFromConfluencePageAri)({
|
|
306
|
+
ari: sourceAri
|
|
307
|
+
}).id,
|
|
296
308
|
contentProduct: sourceProduct
|
|
297
309
|
};
|
|
298
310
|
case 'jira-work-item':
|
|
@@ -304,14 +316,21 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
304
316
|
}, {
|
|
305
317
|
key: "updateReferenceData",
|
|
306
318
|
value: function updateReferenceData(blocks, noContent) {
|
|
319
|
+
if (!this.writeProvider) {
|
|
320
|
+
throw new Error('Write provider not set');
|
|
321
|
+
}
|
|
307
322
|
return this.writeProvider.updateReferenceData(blocks, noContent);
|
|
308
323
|
}
|
|
309
324
|
}]);
|
|
310
325
|
}(_types2.SyncBlockDataProvider);
|
|
311
|
-
var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(
|
|
326
|
+
var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(_ref) {
|
|
327
|
+
var fetchProvider = _ref.fetchProvider,
|
|
328
|
+
writeProvider = _ref.writeProvider,
|
|
329
|
+
providerOptions = _ref.providerOptions,
|
|
330
|
+
getSSRData = _ref.getSSRData;
|
|
312
331
|
var syncBlockProvider = (0, _react.useMemo)(function () {
|
|
313
|
-
return new SyncBlockProvider(fetchProvider, writeProvider
|
|
314
|
-
}, [fetchProvider, writeProvider
|
|
332
|
+
return new SyncBlockProvider(fetchProvider, writeProvider);
|
|
333
|
+
}, [fetchProvider, writeProvider]);
|
|
315
334
|
syncBlockProvider.setProviderOptions(providerOptions);
|
|
316
335
|
var ssrData = getSSRData ? getSSRData() : undefined;
|
|
317
336
|
if (ssrData) {
|
|
@@ -10,13 +10,12 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
10
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
var _uuid = _interopRequireDefault(require("uuid"));
|
|
14
13
|
var _monitoring = require("@atlaskit/editor-common/monitoring");
|
|
15
14
|
var _types = require("../common/types");
|
|
16
15
|
var _errorHandling = require("../utils/errorHandling");
|
|
17
16
|
var _utils = require("../utils/utils");
|
|
18
17
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
19
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
20
19
|
// A store manager responsible for the lifecycle and state management of source sync blocks in an editor instance.
|
|
21
20
|
// Designed to manage local in-memory state and synchronize with an external data provider.
|
|
22
21
|
// Supports create, flush, and delete operations for source sync blocks.
|
|
@@ -237,14 +236,12 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
237
236
|
}, {
|
|
238
237
|
key: "generateBodiedSyncBlockAttrs",
|
|
239
238
|
value: function generateBodiedSyncBlockAttrs() {
|
|
240
|
-
|
|
241
|
-
// eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
|
|
242
|
-
var localId = (0, _uuid.default)();
|
|
243
|
-
var sourceId = (_this$dataProvider = this.dataProvider) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.getSourceId();
|
|
244
|
-
if (!this.dataProvider || !sourceId) {
|
|
239
|
+
if (!this.dataProvider) {
|
|
245
240
|
throw new Error('Data provider not set or source id not set');
|
|
246
241
|
}
|
|
247
|
-
var
|
|
242
|
+
var _this$dataProvider$ge = this.dataProvider.generateResourceId(),
|
|
243
|
+
resourceId = _this$dataProvider$ge.resourceId,
|
|
244
|
+
localId = _this$dataProvider$ge.localId;
|
|
248
245
|
return {
|
|
249
246
|
resourceId: resourceId,
|
|
250
247
|
localId: localId
|
|
@@ -2,32 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Generates the block ARI from the source page ARI and the source block's resource ID.
|
|
5
|
-
* @param
|
|
5
|
+
* @param cloudId - the cloudId of the block. E.G the cloudId of the confluence page, or the cloudId of the Jira instance
|
|
6
|
+
* @param parentId - the parentId of the block. E.G the pageId for a confluence page, or the issueId for a Jira work item
|
|
6
7
|
* @param resourceId - the resource ID of the block node. A randomly generated UUID
|
|
8
|
+
* @param product - the product of the block. E.G 'confluence-page', 'jira-work-item'
|
|
7
9
|
* @returns the block ARI. E.G ari:cloud:blocks:<cloudId>:synced-block/<product>/<pageId>/<resourceId>
|
|
8
10
|
*/
|
|
9
|
-
export const generateBlockAri = (
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return `ari:cloud:blocks:${cloudId}:synced-block/${product}/${pageId}/${resourceId}`;
|
|
11
|
+
export const generateBlockAri = ({
|
|
12
|
+
cloudId,
|
|
13
|
+
parentId,
|
|
14
|
+
product,
|
|
15
|
+
resourceId
|
|
16
|
+
}) => {
|
|
17
|
+
return `ari:cloud:blocks:${cloudId}:synced-block/${product}/${parentId}/${resourceId}`;
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Generates the block ARI from the reference synced block ARI and the resource ID
|
|
21
|
-
* @param
|
|
22
|
+
* @param cloudId - the cloudId of the block. E.G the cloudId of the confluence page, or the cloudId of the Jira instance
|
|
22
23
|
* @param resourceId - the resource ID of the reference synced block. E.G confluence-page/pageId/sourceResourceId
|
|
23
24
|
* @returns the block ARI. E.G ari:cloud:blocks:<cloudId>:synced-block/<product>/<pageId>/<resourceId>
|
|
24
25
|
*/
|
|
25
|
-
export const generateBlockAriFromReference = (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
const cloudId = match[1];
|
|
26
|
+
export const generateBlockAriFromReference = ({
|
|
27
|
+
cloudId,
|
|
28
|
+
resourceId
|
|
29
|
+
}) => {
|
|
31
30
|
return `ari:cloud:blocks:${cloudId}:synced-block/${resourceId}`;
|
|
32
31
|
};
|
|
33
32
|
|
|
@@ -3,11 +3,10 @@ export const isBlockContentResponse = response => {
|
|
|
3
3
|
const content = response.content;
|
|
4
4
|
return typeof content === 'string';
|
|
5
5
|
};
|
|
6
|
-
|
|
7
6
|
/**
|
|
8
7
|
* Retrieves all synced blocks referenced in a document.
|
|
9
8
|
*
|
|
10
|
-
* Calls the Block Service API
|
|
9
|
+
* Calls the Block Service GraphQL API: `blockService_getDocumentReferenceBlocks`
|
|
11
10
|
*
|
|
12
11
|
* @param documentAri - The ARI of the document to fetch synced blocks for
|
|
13
12
|
* @returns A promise containing arrays of successfully fetched blocks and any errors encountered
|
|
@@ -44,23 +43,56 @@ export const isBlockContentResponse = response => {
|
|
|
44
43
|
* ]
|
|
45
44
|
* }
|
|
46
45
|
* ```
|
|
47
|
-
* Check https://block-service.dev.atl-paas.net/ for latest API documentation.
|
|
48
46
|
*/
|
|
49
47
|
export const getReferenceSyncedBlocks = async documentAri => {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
const bodyData = {
|
|
49
|
+
query: buildGetDocumentReferenceBlocksQuery(documentAri),
|
|
50
|
+
operationName: GET_DOCUMENT_REFERENCE_BLOCKS_OPERATION_NAME
|
|
51
|
+
};
|
|
52
|
+
const response = await fetchWithRetry(GRAPHQL_ENDPOINT, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: COMMON_HEADERS,
|
|
55
|
+
body: JSON.stringify(bodyData)
|
|
53
56
|
});
|
|
54
57
|
if (!response.ok) {
|
|
55
58
|
throw new BlockError(response.status);
|
|
56
59
|
}
|
|
57
|
-
|
|
60
|
+
const result = await response.json();
|
|
61
|
+
if (result.errors && result.errors.length > 0) {
|
|
62
|
+
throw new Error(result.errors.map(e => e.message).join(', '));
|
|
63
|
+
}
|
|
64
|
+
if (!result.data) {
|
|
65
|
+
throw new Error('No data returned from GraphQL query');
|
|
66
|
+
}
|
|
67
|
+
return result.data.blockService_getDocumentReferenceBlocks;
|
|
58
68
|
};
|
|
59
69
|
const COMMON_HEADERS = {
|
|
60
70
|
'Content-Type': 'application/json',
|
|
61
71
|
Accept: 'application/json'
|
|
62
72
|
};
|
|
63
73
|
const BLOCK_SERVICE_API_URL = '/gateway/api/blocks/v1';
|
|
74
|
+
const GRAPHQL_ENDPOINT = '/gateway/api/graphql';
|
|
75
|
+
const GET_DOCUMENT_REFERENCE_BLOCKS_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_GET_DOCUMENT_REFERENCE_BLOCKS';
|
|
76
|
+
const buildGetDocumentReferenceBlocksQuery = documentAri => `query ${GET_DOCUMENT_REFERENCE_BLOCKS_OPERATION_NAME} {
|
|
77
|
+
blockService_getDocumentReferenceBlocks(documentAri: "${documentAri}") {
|
|
78
|
+
blocks {
|
|
79
|
+
blockAri
|
|
80
|
+
blockInstanceId
|
|
81
|
+
content
|
|
82
|
+
createdAt
|
|
83
|
+
createdBy
|
|
84
|
+
product
|
|
85
|
+
sourceAri
|
|
86
|
+
status
|
|
87
|
+
version
|
|
88
|
+
}
|
|
89
|
+
errors {
|
|
90
|
+
blockAri
|
|
91
|
+
code
|
|
92
|
+
reason
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}`;
|
|
64
96
|
export class BlockError extends Error {
|
|
65
97
|
constructor(status) {
|
|
66
98
|
super(`Block error`);
|
|
@@ -11,14 +11,22 @@
|
|
|
11
11
|
* @param pageType - the type of the page
|
|
12
12
|
* @returns the Confluence page ARI
|
|
13
13
|
*/
|
|
14
|
-
export const getConfluencePageAri = (
|
|
14
|
+
export const getConfluencePageAri = ({
|
|
15
|
+
pageId,
|
|
16
|
+
cloudId,
|
|
17
|
+
pageType
|
|
18
|
+
}) => {
|
|
19
|
+
return `ari:cloud:confluence:${cloudId}:${pageType}/${pageId}`;
|
|
20
|
+
};
|
|
15
21
|
|
|
16
22
|
/**
|
|
17
23
|
* Extracts the page ID and type from the Confluence page ARI
|
|
18
24
|
* @param ari - the Confluence page ARI
|
|
19
25
|
* @returns the page ID and type
|
|
20
26
|
*/
|
|
21
|
-
export const getPageIdAndTypeFromConfluencePageAri =
|
|
27
|
+
export const getPageIdAndTypeFromConfluencePageAri = ({
|
|
28
|
+
ari
|
|
29
|
+
}) => {
|
|
22
30
|
const match = ari.match(/ari:cloud:confluence:[^:]+:(page|blogpost)\/(\d+)/);
|
|
23
31
|
if (match !== null && match !== void 0 && match[2]) {
|
|
24
32
|
return {
|
|
@@ -27,38 +35,4 @@ export const getPageIdAndTypeFromConfluencePageAri = ari => {
|
|
|
27
35
|
};
|
|
28
36
|
}
|
|
29
37
|
throw new Error(`Invalid page ARI: ${ari}`);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Extracts the local ID from the Confluence page content property resource ID
|
|
34
|
-
* @param resourceId - the Confluence page content property resource ID
|
|
35
|
-
* @returns the local ID
|
|
36
|
-
*/
|
|
37
|
-
export const getLocalIdFromContentPropertyResourceId = resourceId => {
|
|
38
|
-
const match = resourceId.match(/ari:cloud:confluence:[^:]+:(page|blogpost)\/\d+\/([a-zA-Z0-9-]+)/);
|
|
39
|
-
if (match !== null && match !== void 0 && match[2]) {
|
|
40
|
-
return match[2];
|
|
41
|
-
}
|
|
42
|
-
throw new Error(`Invalid resourceId: ${resourceId}`);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Extracts the Confluence page ARI from the Confluence content property resource ID
|
|
47
|
-
* @param resourceId - the Confluence content property resource ID
|
|
48
|
-
* @returns the Confluence page ARI
|
|
49
|
-
*/
|
|
50
|
-
export const getPageAriFromContentPropertyResourceId = resourceId => {
|
|
51
|
-
const match = resourceId.match(/(ari:cloud:confluence:[^:]+:(page|blogpost)\/\d+)\/([a-zA-Z0-9-]+)$/);
|
|
52
|
-
if (match !== null && match !== void 0 && match[1]) {
|
|
53
|
-
return match[1];
|
|
54
|
-
}
|
|
55
|
-
throw new Error(`Invalid resourceId: ${resourceId}`);
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Generates the Confluence page content property resource ID from the source ID and local ID
|
|
60
|
-
* @param sourceId - the source ID
|
|
61
|
-
* @param localId - the local ID
|
|
62
|
-
* @returns the Confluence page content property resource ID
|
|
63
|
-
*/
|
|
64
|
-
export const resourceIdFromConfluencePageSourceIdAndLocalId = (sourceId, localId) => `${sourceId}/${localId}`;
|
|
38
|
+
};
|
|
@@ -60,7 +60,9 @@ export const fetchConfluencePageInfo = async (pageAri, localId, fireAnalyticsEve
|
|
|
60
60
|
var _response$data, _response$data$conten, _response$data$conten2, _contentData$space;
|
|
61
61
|
const {
|
|
62
62
|
type: pageType
|
|
63
|
-
} = getPageIdAndTypeFromConfluencePageAri(
|
|
63
|
+
} = getPageIdAndTypeFromConfluencePageAri({
|
|
64
|
+
ari: pageAri
|
|
65
|
+
});
|
|
64
66
|
const response = await getConfluenceSourceInfo(pageAri);
|
|
65
67
|
const contentData = (_response$data = response.data) === null || _response$data === void 0 ? void 0 : (_response$data$conten = _response$data.content) === null || _response$data$conten === void 0 ? void 0 : (_response$data$conten2 = _response$data$conten.nodes) === null || _response$data$conten2 === void 0 ? void 0 : _response$data$conten2[0];
|
|
66
68
|
const title = contentData === null || contentData === void 0 ? void 0 : contentData.title;
|
|
@@ -6,14 +6,21 @@
|
|
|
6
6
|
* @param cloudId - the cloud ID
|
|
7
7
|
* @returns the Jira work item ARI
|
|
8
8
|
*/
|
|
9
|
-
export const getJiraWorkItemAri = (
|
|
9
|
+
export const getJiraWorkItemAri = ({
|
|
10
|
+
cloudId,
|
|
11
|
+
workItemId
|
|
12
|
+
}) => {
|
|
13
|
+
return `ari:cloud:jira:${cloudId}:issue/${workItemId}`;
|
|
14
|
+
};
|
|
10
15
|
|
|
11
16
|
/**
|
|
12
17
|
* Extracts the Jira work item ID from the Jira work item ARI
|
|
13
18
|
* @param ari - the Jira work item ARI
|
|
14
19
|
* @returns the Jira work item ID
|
|
15
20
|
*/
|
|
16
|
-
export const getJiraWorkItemIdFromAri =
|
|
21
|
+
export const getJiraWorkItemIdFromAri = ({
|
|
22
|
+
ari
|
|
23
|
+
}) => {
|
|
17
24
|
const match = ari.match(/ari:cloud:jira:([^:]+):issue\/(\d+)/);
|
|
18
25
|
if (match !== null && match !== void 0 && match[2]) {
|
|
19
26
|
return match[2];
|
package/dist/es2019/index.js
CHANGED
|
@@ -10,12 +10,11 @@ export { useHandleContentChanges } from './hooks/useHandleContentChanges';
|
|
|
10
10
|
|
|
11
11
|
// clients
|
|
12
12
|
export { generateBlockAri, generateBlockAriFromReference, getLocalIdFromBlockResourceId } from './clients/block-service/ari';
|
|
13
|
-
export { getConfluencePageAri,
|
|
13
|
+
export { getConfluencePageAri, getPageIdAndTypeFromConfluencePageAri } from './clients/confluence/ari';
|
|
14
14
|
export { getJiraWorkItemAri, getJiraWorkItemIdFromAri } from './clients/jira/ari';
|
|
15
15
|
|
|
16
16
|
// providers
|
|
17
|
-
export { useMemoizedBlockServiceAPIProviders } from './providers/block-service/blockServiceAPI';
|
|
18
|
-
export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders } from './providers/confluence/confluenceContentAPI';
|
|
17
|
+
export { useMemoizedBlockServiceAPIProviders, useMemoizedBlockServiceFetchOnlyAPIProvider } from './providers/block-service/blockServiceAPI';
|
|
19
18
|
export { fetchConfluencePageInfo } from './clients/confluence/sourceInfo';
|
|
20
19
|
export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvider } from './providers/syncBlockProvider';
|
|
21
20
|
|
|
@@ -77,19 +77,23 @@ export const fetchReferences = async documentAri => {
|
|
|
77
77
|
}));
|
|
78
78
|
return [...blocksInstances, ...errorInstances];
|
|
79
79
|
};
|
|
80
|
-
|
|
81
80
|
/**
|
|
82
81
|
* ADFFetchProvider implementation that fetches synced block data from Block Service API
|
|
83
82
|
*/
|
|
84
83
|
class BlockServiceADFFetchProvider {
|
|
85
|
-
constructor(
|
|
86
|
-
|
|
84
|
+
constructor({
|
|
85
|
+
cloudId
|
|
86
|
+
}) {
|
|
87
|
+
this.cloudId = cloudId;
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
// resourceId of the reference synced block.
|
|
90
91
|
// the ARI must be constructed to call the block service API
|
|
91
92
|
async fetchData(resourceId) {
|
|
92
|
-
const blockAri = generateBlockAriFromReference(
|
|
93
|
+
const blockAri = generateBlockAriFromReference({
|
|
94
|
+
cloudId: this.cloudId,
|
|
95
|
+
resourceId
|
|
96
|
+
});
|
|
93
97
|
try {
|
|
94
98
|
const blockContentResponse = await getSyncedBlockContent({
|
|
95
99
|
blockAri
|
|
@@ -129,15 +133,21 @@ class BlockServiceADFFetchProvider {
|
|
|
129
133
|
}
|
|
130
134
|
}
|
|
131
135
|
}
|
|
132
|
-
|
|
133
136
|
/**
|
|
134
137
|
* ADFWriteProvider implementation that writes synced block data to Block Service API
|
|
135
138
|
*/
|
|
136
139
|
class BlockServiceADFWriteProvider {
|
|
137
|
-
constructor(
|
|
138
|
-
|
|
140
|
+
constructor({
|
|
141
|
+
cloudId,
|
|
142
|
+
parentAri,
|
|
143
|
+
parentId,
|
|
144
|
+
product,
|
|
145
|
+
getVersion
|
|
146
|
+
}) {
|
|
147
|
+
this.cloudId = cloudId;
|
|
148
|
+
this.parentAri = parentAri;
|
|
149
|
+
this.parentId = parentId;
|
|
139
150
|
this.product = product;
|
|
140
|
-
this.sourceDocumentId = sourceDocumentId;
|
|
141
151
|
this.getVersion = getVersion;
|
|
142
152
|
}
|
|
143
153
|
|
|
@@ -146,7 +156,12 @@ class BlockServiceADFWriteProvider {
|
|
|
146
156
|
const {
|
|
147
157
|
resourceId
|
|
148
158
|
} = data;
|
|
149
|
-
const blockAri = generateBlockAri(
|
|
159
|
+
const blockAri = generateBlockAri({
|
|
160
|
+
cloudId: this.cloudId,
|
|
161
|
+
parentId: this.parentId,
|
|
162
|
+
product: this.product,
|
|
163
|
+
resourceId
|
|
164
|
+
});
|
|
150
165
|
const stepVersion = this.getVersion ? this.getVersion() : undefined;
|
|
151
166
|
try {
|
|
152
167
|
// Try update existing block's content
|
|
@@ -175,13 +190,18 @@ class BlockServiceADFWriteProvider {
|
|
|
175
190
|
const {
|
|
176
191
|
resourceId
|
|
177
192
|
} = data;
|
|
178
|
-
const blockAri = generateBlockAri(
|
|
193
|
+
const blockAri = generateBlockAri({
|
|
194
|
+
cloudId: this.cloudId,
|
|
195
|
+
parentId: this.parentId,
|
|
196
|
+
product: this.product,
|
|
197
|
+
resourceId
|
|
198
|
+
});
|
|
179
199
|
const stepVersion = this.getVersion ? this.getVersion() : undefined;
|
|
180
200
|
try {
|
|
181
201
|
await createSyncedBlock({
|
|
182
202
|
blockAri,
|
|
183
203
|
blockInstanceId: data.blockInstanceId,
|
|
184
|
-
sourceAri: this.
|
|
204
|
+
sourceAri: this.parentAri,
|
|
185
205
|
product: this.product,
|
|
186
206
|
content: JSON.stringify(data.content),
|
|
187
207
|
stepVersion
|
|
@@ -205,7 +225,12 @@ class BlockServiceADFWriteProvider {
|
|
|
205
225
|
|
|
206
226
|
// soft deletes the source synced block
|
|
207
227
|
async deleteData(resourceId) {
|
|
208
|
-
const blockAri = generateBlockAri(
|
|
228
|
+
const blockAri = generateBlockAri({
|
|
229
|
+
cloudId: this.cloudId,
|
|
230
|
+
parentId: this.parentId,
|
|
231
|
+
product: this.product,
|
|
232
|
+
resourceId
|
|
233
|
+
});
|
|
209
234
|
try {
|
|
210
235
|
await deleteSyncedBlock({
|
|
211
236
|
blockAri
|
|
@@ -241,7 +266,7 @@ class BlockServiceADFWriteProvider {
|
|
|
241
266
|
|
|
242
267
|
// the sourceId is the resourceId of the source synced block.
|
|
243
268
|
generateResourceIdForReference(sourceId) {
|
|
244
|
-
return `${this.product}/${this.
|
|
269
|
+
return `${this.product}/${this.parentId}/${sourceId}`;
|
|
245
270
|
}
|
|
246
271
|
generateResourceId() {
|
|
247
272
|
return crypto.randomUUID();
|
|
@@ -249,9 +274,12 @@ class BlockServiceADFWriteProvider {
|
|
|
249
274
|
async updateReferenceData(blocks, noContent) {
|
|
250
275
|
try {
|
|
251
276
|
await updateReferenceSyncedBlockOnDocument({
|
|
252
|
-
documentAri: this.
|
|
277
|
+
documentAri: this.parentAri,
|
|
253
278
|
blocks: blocks.map(block => ({
|
|
254
|
-
blockAri: generateBlockAriFromReference(
|
|
279
|
+
blockAri: generateBlockAriFromReference({
|
|
280
|
+
cloudId: this.cloudId,
|
|
281
|
+
resourceId: block.resourceId
|
|
282
|
+
}),
|
|
255
283
|
blockInstanceId: block.localId
|
|
256
284
|
})),
|
|
257
285
|
noContent
|
|
@@ -273,18 +301,37 @@ class BlockServiceADFWriteProvider {
|
|
|
273
301
|
}
|
|
274
302
|
}
|
|
275
303
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
return {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
304
|
+
export const useMemoizedBlockServiceAPIProviders = ({
|
|
305
|
+
cloudId,
|
|
306
|
+
parentAri,
|
|
307
|
+
parentId,
|
|
308
|
+
product,
|
|
309
|
+
getVersion
|
|
310
|
+
}) => {
|
|
311
|
+
return useMemo(() => {
|
|
312
|
+
return {
|
|
313
|
+
fetchProvider: new BlockServiceADFFetchProvider({
|
|
314
|
+
cloudId
|
|
315
|
+
}),
|
|
316
|
+
writeProvider: new BlockServiceADFWriteProvider({
|
|
317
|
+
cloudId,
|
|
318
|
+
parentAri,
|
|
319
|
+
parentId,
|
|
320
|
+
product,
|
|
321
|
+
getVersion
|
|
322
|
+
})
|
|
323
|
+
};
|
|
324
|
+
}, [cloudId, parentAri, parentId, product, getVersion]);
|
|
287
325
|
};
|
|
288
|
-
export const
|
|
289
|
-
|
|
326
|
+
export const useMemoizedBlockServiceFetchOnlyAPIProvider = ({
|
|
327
|
+
cloudId
|
|
328
|
+
}) => {
|
|
329
|
+
return useMemo(() => {
|
|
330
|
+
return {
|
|
331
|
+
fetchProvider: new BlockServiceADFFetchProvider({
|
|
332
|
+
cloudId
|
|
333
|
+
}),
|
|
334
|
+
writeProvider: undefined
|
|
335
|
+
};
|
|
336
|
+
}, [cloudId]);
|
|
290
337
|
};
|