@atlaskit/editor-synced-block-provider 3.5.5 → 3.6.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 +21 -0
- package/dist/cjs/clients/block-service/ari.js +12 -1
- package/dist/cjs/clients/block-service/blockService.js +35 -2
- package/dist/cjs/clients/confluence/sourceInfo.js +150 -19
- package/dist/cjs/common/consts.js +7 -0
- package/dist/cjs/hooks/useFetchSyncBlockData.js +10 -2
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/providers/block-service/blockServiceAPI.js +195 -125
- package/dist/cjs/providers/syncBlockProvider.js +83 -14
- package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +267 -63
- package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +134 -34
- package/dist/cjs/store-manager/syncBlockStoreManager.js +121 -0
- package/dist/cjs/utils/errorHandling.js +4 -1
- package/dist/cjs/utils/parseResourceId.js +38 -0
- package/dist/es2019/clients/block-service/ari.js +11 -0
- package/dist/es2019/clients/block-service/blockService.js +12 -1
- package/dist/es2019/clients/confluence/sourceInfo.js +70 -2
- package/dist/es2019/common/consts.js +1 -0
- package/dist/es2019/hooks/useFetchSyncBlockData.js +10 -1
- package/dist/es2019/index.js +1 -0
- package/dist/es2019/providers/block-service/blockServiceAPI.js +45 -2
- package/dist/es2019/providers/syncBlockProvider.js +37 -5
- package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +249 -39
- package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +101 -16
- package/dist/es2019/store-manager/syncBlockStoreManager.js +64 -0
- package/dist/es2019/utils/errorHandling.js +2 -1
- package/dist/es2019/utils/parseResourceId.js +25 -0
- package/dist/esm/clients/block-service/ari.js +11 -0
- package/dist/esm/clients/block-service/blockService.js +34 -1
- package/dist/esm/clients/confluence/sourceInfo.js +149 -18
- package/dist/esm/common/consts.js +1 -0
- package/dist/esm/hooks/useFetchSyncBlockData.js +10 -2
- package/dist/esm/index.js +1 -0
- package/dist/esm/providers/block-service/blockServiceAPI.js +195 -125
- package/dist/esm/providers/syncBlockProvider.js +81 -12
- package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +267 -63
- package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +135 -35
- package/dist/esm/store-manager/syncBlockStoreManager.js +121 -0
- package/dist/esm/utils/errorHandling.js +3 -0
- package/dist/esm/utils/parseResourceId.js +31 -0
- package/dist/types/clients/block-service/ari.d.ts +1 -0
- package/dist/types/clients/block-service/blockService.d.ts +15 -5
- package/dist/types/clients/confluence/sourceInfo.d.ts +3 -1
- package/dist/types/common/consts.d.ts +1 -0
- package/dist/types/common/types.d.ts +27 -1
- package/dist/types/hooks/useFetchSyncBlockData.d.ts +6 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/providers/block-service/blockServiceAPI.d.ts +3 -2
- package/dist/types/providers/syncBlockProvider.d.ts +3 -2
- package/dist/types/providers/types.d.ts +15 -2
- package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +11 -2
- package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +7 -2
- package/dist/types/store-manager/syncBlockStoreManager.d.ts +4 -0
- package/dist/types/utils/errorHandling.d.ts +1 -0
- package/dist/types/utils/parseResourceId.d.ts +6 -0
- package/dist/types-ts4.5/clients/block-service/ari.d.ts +1 -0
- package/dist/types-ts4.5/clients/block-service/blockService.d.ts +15 -5
- package/dist/types-ts4.5/clients/confluence/sourceInfo.d.ts +3 -1
- package/dist/types-ts4.5/common/consts.d.ts +4 -0
- package/dist/types-ts4.5/common/types.d.ts +27 -1
- package/dist/types-ts4.5/hooks/useFetchSyncBlockData.d.ts +6 -1
- package/dist/types-ts4.5/index.d.ts +3 -2
- package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +3 -2
- package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +3 -2
- package/dist/types-ts4.5/providers/types.d.ts +15 -2
- package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +11 -2
- package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +7 -2
- package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +4 -0
- package/dist/types-ts4.5/utils/errorHandling.d.ts +1 -0
- package/dist/types-ts4.5/utils/parseResourceId.d.ts +6 -0
- package/package.json +2 -2
|
@@ -45,6 +45,16 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
45
45
|
value: function setCreateExperience(createExperience) {
|
|
46
46
|
this.createExperience = createExperience;
|
|
47
47
|
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "setSaveExperience",
|
|
50
|
+
value: function setSaveExperience(saveExperience) {
|
|
51
|
+
this.saveExperience = saveExperience;
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "setDeleteExperience",
|
|
55
|
+
value: function setDeleteExperience(deleteExperience) {
|
|
56
|
+
this.deleteExperience = deleteExperience;
|
|
57
|
+
}
|
|
48
58
|
}, {
|
|
49
59
|
key: "isSourceBlock",
|
|
50
60
|
value: function isSourceBlock(node) {
|
|
@@ -93,17 +103,11 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
93
103
|
value: (function () {
|
|
94
104
|
var _flush = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
95
105
|
var _this2 = this;
|
|
96
|
-
var bodiedSyncBlockNodes, bodiedSyncBlockData, writeResults, _this$fireAnalyticsEv2;
|
|
106
|
+
var bodiedSyncBlockNodes, bodiedSyncBlockData, _this$saveExperience, writeResults, successfulSaved, failedSave, _this$saveExperience2, _this$saveExperience3, _this$saveExperience4, _this$fireAnalyticsEv2;
|
|
97
107
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
98
108
|
while (1) switch (_context.prev = _context.next) {
|
|
99
109
|
case 0:
|
|
100
110
|
_context.prev = 0;
|
|
101
|
-
if (this.dataProvider) {
|
|
102
|
-
_context.next = 3;
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
throw new Error('Data provider not set');
|
|
106
|
-
case 3:
|
|
107
111
|
bodiedSyncBlockNodes = [];
|
|
108
112
|
bodiedSyncBlockData = [];
|
|
109
113
|
Array.from(this.syncBlockCache.values()).forEach(function (syncBlockData) {
|
|
@@ -128,14 +132,25 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
128
132
|
}
|
|
129
133
|
});
|
|
130
134
|
if (!(bodiedSyncBlockNodes.length === 0)) {
|
|
131
|
-
_context.next =
|
|
135
|
+
_context.next = 6;
|
|
132
136
|
break;
|
|
133
137
|
}
|
|
134
138
|
return _context.abrupt("return", Promise.resolve(true));
|
|
135
|
-
case
|
|
136
|
-
|
|
137
|
-
|
|
139
|
+
case 6:
|
|
140
|
+
// only start the save experience if we have sync blocks to save
|
|
141
|
+
if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
142
|
+
(_this$saveExperience = this.saveExperience) === null || _this$saveExperience === void 0 || _this$saveExperience.start({});
|
|
143
|
+
}
|
|
144
|
+
;
|
|
145
|
+
if (this.dataProvider) {
|
|
146
|
+
_context.next = 10;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
throw new Error('Data provider not set');
|
|
138
150
|
case 10:
|
|
151
|
+
_context.next = 12;
|
|
152
|
+
return this.dataProvider.writeNodesData(bodiedSyncBlockNodes, bodiedSyncBlockData);
|
|
153
|
+
case 12:
|
|
139
154
|
writeResults = _context.sent;
|
|
140
155
|
writeResults.forEach(function (result) {
|
|
141
156
|
// set isDirty to true for cases where it failed to save the sync block to the BE
|
|
@@ -146,37 +161,75 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
146
161
|
}
|
|
147
162
|
}
|
|
148
163
|
});
|
|
164
|
+
successfulSaved = writeResults.filter(function (result) {
|
|
165
|
+
return result.resourceId && !result.error;
|
|
166
|
+
}).map(function (result) {
|
|
167
|
+
return {
|
|
168
|
+
resourceId: result.resourceId
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
failedSave = writeResults.filter(function (result) {
|
|
172
|
+
return !result.resourceId || result.error;
|
|
173
|
+
}).map(function (result) {
|
|
174
|
+
return {
|
|
175
|
+
resourceId: result.resourceId || 'unknown',
|
|
176
|
+
failReason: result.error || 'Failed to save sync blocks'
|
|
177
|
+
};
|
|
178
|
+
});
|
|
149
179
|
if (!writeResults.every(function (result) {
|
|
150
180
|
return result.resourceId && !result.error;
|
|
151
181
|
})) {
|
|
152
|
-
_context.next =
|
|
182
|
+
_context.next = 22;
|
|
153
183
|
break;
|
|
154
184
|
}
|
|
185
|
+
if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
186
|
+
(_this$saveExperience2 = this.saveExperience) === null || _this$saveExperience2 === void 0 || _this$saveExperience2.success({
|
|
187
|
+
metadata: {
|
|
188
|
+
successfulSaved: successfulSaved
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
;
|
|
155
193
|
return _context.abrupt("return", true);
|
|
156
|
-
case
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
194
|
+
case 22:
|
|
195
|
+
if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
196
|
+
(_this$saveExperience3 = this.saveExperience) === null || _this$saveExperience3 === void 0 || _this$saveExperience3.failure({
|
|
197
|
+
metadata: {
|
|
198
|
+
successfulSaved: successfulSaved,
|
|
199
|
+
failedSave: failedSave
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
} else {
|
|
203
|
+
writeResults.filter(function (result) {
|
|
204
|
+
return !result.resourceId || result.error;
|
|
205
|
+
}).forEach(function (result) {
|
|
206
|
+
var _this2$fireAnalyticsE;
|
|
207
|
+
(_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.updateErrorPayload)(result.error || 'Failed to write data'));
|
|
208
|
+
});
|
|
209
|
+
}
|
|
163
210
|
return _context.abrupt("return", false);
|
|
164
|
-
case
|
|
165
|
-
_context.next =
|
|
211
|
+
case 24:
|
|
212
|
+
_context.next = 31;
|
|
166
213
|
break;
|
|
167
|
-
case
|
|
168
|
-
_context.prev =
|
|
214
|
+
case 26:
|
|
215
|
+
_context.prev = 26;
|
|
169
216
|
_context.t0 = _context["catch"](0);
|
|
170
217
|
(0, _monitoring.logException)(_context.t0, {
|
|
171
218
|
location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
|
|
172
219
|
});
|
|
173
|
-
|
|
220
|
+
if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
221
|
+
(_this$saveExperience4 = this.saveExperience) === null || _this$saveExperience4 === void 0 || _this$saveExperience4.failure({
|
|
222
|
+
reason: _context.t0.message
|
|
223
|
+
});
|
|
224
|
+
} else {
|
|
225
|
+
(_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 || _this$fireAnalyticsEv2.call(this, (0, _errorHandling.updateErrorPayload)(_context.t0.message));
|
|
226
|
+
}
|
|
174
227
|
return _context.abrupt("return", false);
|
|
175
|
-
case
|
|
228
|
+
case 31:
|
|
176
229
|
case "end":
|
|
177
230
|
return _context.stop();
|
|
178
231
|
}
|
|
179
|
-
}, _callee, this, [[0,
|
|
232
|
+
}, _callee, this, [[0, 26]]);
|
|
180
233
|
}));
|
|
181
234
|
function flush() {
|
|
182
235
|
return _flush.apply(this, arguments);
|
|
@@ -327,7 +380,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
327
380
|
value: function () {
|
|
328
381
|
var _delete2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(syncBlockIds, onDelete, onDeleteCompleted) {
|
|
329
382
|
var _this5 = this;
|
|
330
|
-
var results, callback, isDeleteSuccessful, _this$fireAnalyticsEv4;
|
|
383
|
+
var results, callback, isDeleteSuccessful, _this$deleteExperienc, successfulDeleted, failedDelete, _this$deleteExperienc2, _this$fireAnalyticsEv4;
|
|
331
384
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
332
385
|
while (1) switch (_context2.prev = _context2.next) {
|
|
333
386
|
case 0:
|
|
@@ -361,12 +414,36 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
361
414
|
callback = function callback(Ids) {
|
|
362
415
|
_this5.setPendingDeletion(Ids, false);
|
|
363
416
|
};
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
417
|
+
if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
418
|
+
successfulDeleted = results.filter(function (result) {
|
|
419
|
+
return result.success;
|
|
420
|
+
}).map(function (result) {
|
|
421
|
+
return {
|
|
422
|
+
resourceId: result.resourceId
|
|
423
|
+
};
|
|
424
|
+
});
|
|
425
|
+
failedDelete = results.filter(function (result) {
|
|
426
|
+
return !result.success;
|
|
427
|
+
}).map(function (result) {
|
|
428
|
+
return {
|
|
429
|
+
resourceId: result.resourceId || 'unknown',
|
|
430
|
+
failReason: result.error || 'Failed to delete sync block'
|
|
431
|
+
};
|
|
432
|
+
});
|
|
433
|
+
(_this$deleteExperienc = this.deleteExperience) === null || _this$deleteExperienc === void 0 || _this$deleteExperienc.failure({
|
|
434
|
+
metadata: {
|
|
435
|
+
successfulDeleted: successfulDeleted,
|
|
436
|
+
failedDelete: failedDelete
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
} else {
|
|
440
|
+
results.filter(function (result) {
|
|
441
|
+
return result.resourceId === undefined;
|
|
442
|
+
}).forEach(function (result) {
|
|
443
|
+
var _this5$fireAnalyticsE;
|
|
444
|
+
(_this5$fireAnalyticsE = _this5.fireAnalyticsEvent) === null || _this5$fireAnalyticsE === void 0 || _this5$fireAnalyticsE.call(_this5, (0, _errorHandling.deleteErrorPayload)(result.error || 'Failed to delete synced block'));
|
|
445
|
+
});
|
|
446
|
+
}
|
|
370
447
|
}
|
|
371
448
|
syncBlockIds.forEach(callback);
|
|
372
449
|
return _context2.abrupt("return", isDeleteSuccessful);
|
|
@@ -379,7 +456,13 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
379
456
|
(0, _monitoring.logException)(_context2.t0, {
|
|
380
457
|
location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
|
|
381
458
|
});
|
|
382
|
-
|
|
459
|
+
if ((0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
460
|
+
(_this$deleteExperienc2 = this.deleteExperience) === null || _this$deleteExperienc2 === void 0 || _this$deleteExperienc2.failure({
|
|
461
|
+
reason: _context2.t0.message
|
|
462
|
+
});
|
|
463
|
+
} else {
|
|
464
|
+
(_this$fireAnalyticsEv4 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv4 === void 0 || _this$fireAnalyticsEv4.call(this, (0, _errorHandling.deleteErrorPayload)(_context2.t0.message));
|
|
465
|
+
}
|
|
383
466
|
onDeleteCompleted(false);
|
|
384
467
|
return _context2.abrupt("return", false);
|
|
385
468
|
case 21:
|
|
@@ -495,6 +578,23 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
|
|
|
495
578
|
}
|
|
496
579
|
return deleteSyncBlocksWithConfirmation;
|
|
497
580
|
}())
|
|
581
|
+
}, {
|
|
582
|
+
key: "getSyncBlockSourceInfo",
|
|
583
|
+
value: function getSyncBlockSourceInfo(localId) {
|
|
584
|
+
try {
|
|
585
|
+
if (!this.dataProvider) {
|
|
586
|
+
throw new Error('Data provider not set');
|
|
587
|
+
}
|
|
588
|
+
return this.dataProvider.fetchSyncBlockSourceInfo(localId, undefined, undefined, this.fireAnalyticsEvent);
|
|
589
|
+
} catch (error) {
|
|
590
|
+
var _this$fireAnalyticsEv5;
|
|
591
|
+
(0, _monitoring.logException)(error, {
|
|
592
|
+
location: 'editor-synced-block-provider/sourceSyncBlockStoreManager'
|
|
593
|
+
});
|
|
594
|
+
(_this$fireAnalyticsEv5 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv5 === void 0 || _this$fireAnalyticsEv5.call(this, (0, _errorHandling.getSourceInfoErrorPayload)(error.message));
|
|
595
|
+
return Promise.resolve(undefined);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
498
598
|
}, {
|
|
499
599
|
key: "destroy",
|
|
500
600
|
value: function destroy() {
|
|
@@ -5,11 +5,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.useMemoizedSyncBlockStoreManager = exports.SyncBlockStoreManager = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
13
|
var _react = require("react");
|
|
14
|
+
var _monitoring = require("@atlaskit/editor-common/monitoring");
|
|
15
|
+
var _ari = require("../clients/block-service/ari");
|
|
16
|
+
var _types = require("../common/types");
|
|
17
|
+
var _errorHandling = require("../utils/errorHandling");
|
|
11
18
|
var _referenceSyncBlockStoreManager = require("./referenceSyncBlockStoreManager");
|
|
12
19
|
var _sourceSyncBlockStoreManager = require("./sourceSyncBlockStoreManager");
|
|
20
|
+
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; }
|
|
21
|
+
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; }
|
|
13
22
|
// A parent store manager responsible for the lifecycle and state management of sync blocks in an editor instance.
|
|
14
23
|
// Contains two child store managers: ReferenceSyncBlockStoreManager and SourceSyncBlockStoreManager.
|
|
15
24
|
// ReferenceSyncBlockStoreManager is responsible for the lifecycle and state management of reference sync blocks in an editor instance.
|
|
@@ -22,10 +31,122 @@ var SyncBlockStoreManager = exports.SyncBlockStoreManager = /*#__PURE__*/functio
|
|
|
22
31
|
// we can pass the source manager as a parameter to the reference manager constructor
|
|
23
32
|
this.sourceSyncBlockStoreManager = new _sourceSyncBlockStoreManager.SourceSyncBlockStoreManager(dataProvider);
|
|
24
33
|
this.referenceSyncBlockStoreManager = new _referenceSyncBlockStoreManager.ReferenceSyncBlockStoreManager(dataProvider);
|
|
34
|
+
this.dataProvider = dataProvider;
|
|
25
35
|
}
|
|
26
36
|
return (0, _createClass2.default)(SyncBlockStoreManager, [{
|
|
37
|
+
key: "fetchReferencesSourceInfo",
|
|
38
|
+
value: function () {
|
|
39
|
+
var _fetchReferencesSourceInfo = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(resourceId, blockInstanceId, isSourceSyncBlock) {
|
|
40
|
+
var _this = this;
|
|
41
|
+
var _response$references, response, sourceInfoPromises, sourceInfos, sourceSyncBlockData, _this$fireAnalyticsEv;
|
|
42
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
43
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
44
|
+
case 0:
|
|
45
|
+
_context2.prev = 0;
|
|
46
|
+
if (this.dataProvider) {
|
|
47
|
+
_context2.next = 3;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
throw new Error('Data provider not set');
|
|
51
|
+
case 3:
|
|
52
|
+
_context2.next = 5;
|
|
53
|
+
return this.dataProvider.fetchReferences(resourceId, isSourceSyncBlock);
|
|
54
|
+
case 5:
|
|
55
|
+
response = _context2.sent;
|
|
56
|
+
if (!response.error) {
|
|
57
|
+
_context2.next = 8;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
return _context2.abrupt("return", {
|
|
61
|
+
error: response.error
|
|
62
|
+
});
|
|
63
|
+
case 8:
|
|
64
|
+
if (!(!response.references || ((_response$references = response.references) === null || _response$references === void 0 ? void 0 : _response$references.length) === 0)) {
|
|
65
|
+
_context2.next = 10;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
return _context2.abrupt("return", isSourceSyncBlock ? {
|
|
69
|
+
references: []
|
|
70
|
+
} : {
|
|
71
|
+
error: _types.SyncBlockError.Errored
|
|
72
|
+
});
|
|
73
|
+
case 10:
|
|
74
|
+
sourceInfoPromises = response.references.map( /*#__PURE__*/function () {
|
|
75
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(reference) {
|
|
76
|
+
var _this$dataProvider;
|
|
77
|
+
var sourceInfo;
|
|
78
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
79
|
+
while (1) switch (_context.prev = _context.next) {
|
|
80
|
+
case 0:
|
|
81
|
+
_context.next = 2;
|
|
82
|
+
return (_this$dataProvider = _this.dataProvider) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.fetchSyncBlockSourceInfo(blockInstanceId, reference.documentAri, (0, _ari.getProductFromSourceAri)(reference.documentAri), _this.fireAnalyticsEvent, reference.hasAccess, 'view');
|
|
83
|
+
case 2:
|
|
84
|
+
sourceInfo = _context.sent;
|
|
85
|
+
if (sourceInfo) {
|
|
86
|
+
_context.next = 5;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
return _context.abrupt("return", undefined);
|
|
90
|
+
case 5:
|
|
91
|
+
return _context.abrupt("return", _objectSpread(_objectSpread({}, sourceInfo), {}, {
|
|
92
|
+
onSamePage: reference.onSamePage,
|
|
93
|
+
hasAccess: reference.hasAccess,
|
|
94
|
+
productType: sourceInfo.productType
|
|
95
|
+
}));
|
|
96
|
+
case 6:
|
|
97
|
+
case "end":
|
|
98
|
+
return _context.stop();
|
|
99
|
+
}
|
|
100
|
+
}, _callee);
|
|
101
|
+
}));
|
|
102
|
+
return function (_x4) {
|
|
103
|
+
return _ref.apply(this, arguments);
|
|
104
|
+
};
|
|
105
|
+
}());
|
|
106
|
+
_context2.next = 13;
|
|
107
|
+
return Promise.all(sourceInfoPromises);
|
|
108
|
+
case 13:
|
|
109
|
+
sourceInfos = _context2.sent;
|
|
110
|
+
_context2.next = 16;
|
|
111
|
+
return isSourceSyncBlock ? this.sourceSyncBlockStoreManager.getSyncBlockSourceInfo(blockInstanceId) : this.referenceSyncBlockStoreManager.fetchSyncBlockSourceInfo(resourceId);
|
|
112
|
+
case 16:
|
|
113
|
+
sourceSyncBlockData = _context2.sent;
|
|
114
|
+
if (sourceSyncBlockData) {
|
|
115
|
+
sourceInfos.push(_objectSpread(_objectSpread({}, sourceSyncBlockData), {}, {
|
|
116
|
+
onSamePage: Boolean(sourceSyncBlockData === null || sourceSyncBlockData === void 0 ? void 0 : sourceSyncBlockData.onSamePage),
|
|
117
|
+
hasAccess: true,
|
|
118
|
+
isSource: true,
|
|
119
|
+
productType: sourceSyncBlockData === null || sourceSyncBlockData === void 0 ? void 0 : sourceSyncBlockData.productType
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
return _context2.abrupt("return", {
|
|
123
|
+
references: sourceInfos
|
|
124
|
+
});
|
|
125
|
+
case 21:
|
|
126
|
+
_context2.prev = 21;
|
|
127
|
+
_context2.t0 = _context2["catch"](0);
|
|
128
|
+
(0, _monitoring.logException)(_context2.t0, {
|
|
129
|
+
location: 'editor-synced-block-provider/syncBlockStoreManager'
|
|
130
|
+
});
|
|
131
|
+
(_this$fireAnalyticsEv = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv === void 0 || _this$fireAnalyticsEv.call(this, (0, _errorHandling.fetchReferencesErrorPayload)(_context2.t0.message));
|
|
132
|
+
return _context2.abrupt("return", {
|
|
133
|
+
error: _types.SyncBlockError.Errored
|
|
134
|
+
});
|
|
135
|
+
case 26:
|
|
136
|
+
case "end":
|
|
137
|
+
return _context2.stop();
|
|
138
|
+
}
|
|
139
|
+
}, _callee2, this, [[0, 21]]);
|
|
140
|
+
}));
|
|
141
|
+
function fetchReferencesSourceInfo(_x, _x2, _x3) {
|
|
142
|
+
return _fetchReferencesSourceInfo.apply(this, arguments);
|
|
143
|
+
}
|
|
144
|
+
return fetchReferencesSourceInfo;
|
|
145
|
+
}()
|
|
146
|
+
}, {
|
|
27
147
|
key: "setFireAnalyticsEvent",
|
|
28
148
|
value: function setFireAnalyticsEvent(fireAnalyticsEvent) {
|
|
149
|
+
this.fireAnalyticsEvent = fireAnalyticsEvent;
|
|
29
150
|
this.referenceSyncBlockStoreManager.setFireAnalyticsEvent(fireAnalyticsEvent);
|
|
30
151
|
this.sourceSyncBlockStoreManager.setFireAnalyticsEvent(fireAnalyticsEvent);
|
|
31
152
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.updateReferenceErrorPayload = exports.updateErrorPayload = exports.updateCacheErrorPayload = exports.stringifyError = exports.getSourceInfoErrorPayload = exports.getErrorPayload = exports.fetchErrorPayload = exports.deleteErrorPayload = exports.createErrorPayload = void 0;
|
|
6
|
+
exports.updateReferenceErrorPayload = exports.updateErrorPayload = exports.updateCacheErrorPayload = exports.stringifyError = exports.getSourceInfoErrorPayload = exports.getErrorPayload = exports.fetchReferencesErrorPayload = exports.fetchErrorPayload = exports.deleteErrorPayload = exports.createErrorPayload = void 0;
|
|
7
7
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
8
8
|
var stringifyError = exports.stringifyError = function stringifyError(error) {
|
|
9
9
|
try {
|
|
@@ -43,4 +43,7 @@ var deleteErrorPayload = exports.deleteErrorPayload = function deleteErrorPayloa
|
|
|
43
43
|
};
|
|
44
44
|
var updateCacheErrorPayload = exports.updateCacheErrorPayload = function updateCacheErrorPayload(error) {
|
|
45
45
|
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE_CACHE, error);
|
|
46
|
+
};
|
|
47
|
+
var fetchReferencesErrorPayload = exports.fetchReferencesErrorPayload = function fetchReferencesErrorPayload(error) {
|
|
48
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH_REFERENCES, error);
|
|
46
49
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.parseResourceId = void 0;
|
|
8
|
+
var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
|
|
9
|
+
var _consts = require("../common/consts");
|
|
10
|
+
var isSyncBlockProduct = function isSyncBlockProduct(product) {
|
|
11
|
+
return _consts.SYNC_BLOCK_PRODUCTS.includes(product);
|
|
12
|
+
};
|
|
13
|
+
var parseResourceId = exports.parseResourceId = function parseResourceId(resourceId) {
|
|
14
|
+
if (!resourceId) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
var _resourceId$split = resourceId.split('/'),
|
|
18
|
+
_resourceId$split2 = (0, _toArray2.default)(_resourceId$split),
|
|
19
|
+
product = _resourceId$split2[0],
|
|
20
|
+
contentId = _resourceId$split2[1],
|
|
21
|
+
uuid = _resourceId$split2[2],
|
|
22
|
+
rest = _resourceId$split2.slice(3);
|
|
23
|
+
|
|
24
|
+
// invalid if any part is missing or there are extra parts
|
|
25
|
+
if (!product || !contentId || !uuid || rest.length > 0) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// invalid if product is not recognized
|
|
30
|
+
if (!isSyncBlockProduct(product)) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
product: product,
|
|
35
|
+
contentId: contentId,
|
|
36
|
+
uuid: uuid
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -41,4 +41,15 @@ export const getLocalIdFromBlockResourceId = ari => {
|
|
|
41
41
|
return match[1];
|
|
42
42
|
}
|
|
43
43
|
throw new Error(`Invalid page ARI: ${ari}`);
|
|
44
|
+
};
|
|
45
|
+
export const getProductFromSourceAri = ari => {
|
|
46
|
+
const jiraMatch = ari === null || ari === void 0 ? void 0 : ari.search(/ari:cloud:jira:.*/);
|
|
47
|
+
if (jiraMatch !== -1) {
|
|
48
|
+
return 'jira-work-item';
|
|
49
|
+
}
|
|
50
|
+
const confluenceMatch = ari === null || ari === void 0 ? void 0 : ari.search(/ari:cloud:confluence:.*/);
|
|
51
|
+
if (confluenceMatch !== -1) {
|
|
52
|
+
return 'confluence-page';
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
44
55
|
};
|
|
@@ -116,7 +116,6 @@ export const getSyncedBlockContent = async ({
|
|
|
116
116
|
}
|
|
117
117
|
return await response.json();
|
|
118
118
|
};
|
|
119
|
-
;
|
|
120
119
|
|
|
121
120
|
/**
|
|
122
121
|
* Batch retrieves multiple synced blocks by their ARIs.
|
|
@@ -218,4 +217,16 @@ export const updateReferenceSyncedBlockOnDocument = async ({
|
|
|
218
217
|
if (!noContent) {
|
|
219
218
|
return await response.json();
|
|
220
219
|
}
|
|
220
|
+
};
|
|
221
|
+
export const getReferenceSyncedBlocksByBlockAri = async ({
|
|
222
|
+
blockAri
|
|
223
|
+
}) => {
|
|
224
|
+
const response = await fetchWithRetry(`${BLOCK_SERVICE_API_URL}/reference/batch-retrieve/${encodeURIComponent(blockAri)}`, {
|
|
225
|
+
method: 'GET',
|
|
226
|
+
headers: COMMON_HEADERS
|
|
227
|
+
});
|
|
228
|
+
if (!response.ok) {
|
|
229
|
+
throw new BlockError(response.status);
|
|
230
|
+
}
|
|
231
|
+
return await response.json();
|
|
221
232
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable require-unicode-regexp */
|
|
2
2
|
|
|
3
3
|
import { logException } from '@atlaskit/editor-common/monitoring';
|
|
4
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
5
|
import { getSourceInfoErrorPayload } from '../../utils/errorHandling';
|
|
5
6
|
import { fetchWithRetry } from '../../utils/retry';
|
|
6
7
|
import { getPageIdAndTypeFromConfluencePageAri } from './ari';
|
|
@@ -55,7 +56,32 @@ const getConfluenceSourceInfo = async ari => {
|
|
|
55
56
|
}
|
|
56
57
|
return await response.json();
|
|
57
58
|
};
|
|
58
|
-
|
|
59
|
+
const resolveNoAccessPageInfo = async ari => {
|
|
60
|
+
const response = await fetch('/gateway/api/object-resolver/resolve/ari', {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: {
|
|
63
|
+
'Content-Type': 'application/json',
|
|
64
|
+
Accept: 'application/json'
|
|
65
|
+
},
|
|
66
|
+
body: JSON.stringify({
|
|
67
|
+
ari
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
if (response.ok) {
|
|
71
|
+
var _payload$data, _payload$data2;
|
|
72
|
+
const payload = await response.json();
|
|
73
|
+
const url = payload === null || payload === void 0 ? void 0 : (_payload$data = payload.data) === null || _payload$data === void 0 ? void 0 : _payload$data.url;
|
|
74
|
+
const title = payload === null || payload === void 0 ? void 0 : (_payload$data2 = payload.data) === null || _payload$data2 === void 0 ? void 0 : _payload$data2.name;
|
|
75
|
+
return {
|
|
76
|
+
url: typeof url === 'string' ? url : undefined,
|
|
77
|
+
title: typeof title === 'string' ? title : undefined,
|
|
78
|
+
sourceAri: ari
|
|
79
|
+
};
|
|
80
|
+
} else {
|
|
81
|
+
throw new Error(`Failed to resolve ari: ${response.statusText}`);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
export const fetchConfluencePageInfoOld = async (pageAri, localId, fireAnalyticsEvent) => {
|
|
59
85
|
try {
|
|
60
86
|
var _response$data, _response$data$conten, _response$data$conten2, _contentData$space;
|
|
61
87
|
const {
|
|
@@ -85,7 +111,8 @@ export const fetchConfluencePageInfo = async (pageAri, localId, fireAnalyticsEve
|
|
|
85
111
|
}
|
|
86
112
|
return Promise.resolve({
|
|
87
113
|
title,
|
|
88
|
-
url
|
|
114
|
+
url,
|
|
115
|
+
sourceAri: pageAri
|
|
89
116
|
});
|
|
90
117
|
} catch (error) {
|
|
91
118
|
logException(error, {
|
|
@@ -94,4 +121,45 @@ export const fetchConfluencePageInfo = async (pageAri, localId, fireAnalyticsEve
|
|
|
94
121
|
fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent(getSourceInfoErrorPayload(error.message));
|
|
95
122
|
return Promise.resolve(undefined);
|
|
96
123
|
}
|
|
124
|
+
};
|
|
125
|
+
export const fetchConfluencePageInfoNew = async (pageAri, hasAccess, urlType, localId) => {
|
|
126
|
+
if (hasAccess) {
|
|
127
|
+
var _response$data2, _response$data2$conte, _response$data2$conte2, _contentData$space2;
|
|
128
|
+
const {
|
|
129
|
+
type: pageType
|
|
130
|
+
} = getPageIdAndTypeFromConfluencePageAri({
|
|
131
|
+
ari: pageAri
|
|
132
|
+
});
|
|
133
|
+
const response = await getConfluenceSourceInfo(pageAri);
|
|
134
|
+
const contentData = (_response$data2 = response.data) === null || _response$data2 === void 0 ? void 0 : (_response$data2$conte = _response$data2.content) === null || _response$data2$conte === void 0 ? void 0 : (_response$data2$conte2 = _response$data2$conte.nodes) === null || _response$data2$conte2 === void 0 ? void 0 : _response$data2$conte2[0];
|
|
135
|
+
const {
|
|
136
|
+
title,
|
|
137
|
+
subType
|
|
138
|
+
} = contentData || {};
|
|
139
|
+
let url;
|
|
140
|
+
const {
|
|
141
|
+
base
|
|
142
|
+
} = (contentData === null || contentData === void 0 ? void 0 : contentData.links) || {};
|
|
143
|
+
if (base && contentData !== null && contentData !== void 0 && (_contentData$space2 = contentData.space) !== null && _contentData$space2 !== void 0 && _contentData$space2.key && contentData !== null && contentData !== void 0 && contentData.id) {
|
|
144
|
+
if (isBlogPageType(pageType)) {
|
|
145
|
+
url = `${base}/spaces/${contentData.space.key}/blog${urlType === 'edit' ? '/edit-v2' : ''}/${contentData.id}`;
|
|
146
|
+
} else if (contentData.subType === 'live') {
|
|
147
|
+
url = `${base}/spaces/${contentData.space.key}/pages/${contentData.id}`;
|
|
148
|
+
} else {
|
|
149
|
+
url = `${base}/spaces/${contentData.space.key}/pages${urlType === 'edit' ? '/edit-v2' : ''}/${contentData.id}`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
url = url && localId ? `${url}#block-${localId}` : url;
|
|
153
|
+
return Promise.resolve({
|
|
154
|
+
title,
|
|
155
|
+
url,
|
|
156
|
+
sourceAri: pageAri,
|
|
157
|
+
subType
|
|
158
|
+
});
|
|
159
|
+
} else {
|
|
160
|
+
return await resolveNoAccessPageInfo(pageAri);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
export const fetchConfluencePageInfo = async (pageAri, hasAccess, urlType, localId, fireAnalyticsEvent) => {
|
|
164
|
+
return fg('platform_synced_block_dogfooding') ? await fetchConfluencePageInfoNew(pageAri, hasAccess, urlType, localId) : await fetchConfluencePageInfoOld(pageAri, localId, fireAnalyticsEvent);
|
|
97
165
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SYNC_BLOCK_PRODUCTS = ['confluence-page', 'jira-work-item'];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { logException } from '@atlaskit/editor-common/monitoring';
|
|
3
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
4
|
import { SyncBlockError } from '../common/types';
|
|
4
5
|
import { fetchErrorPayload } from '../utils/errorHandling';
|
|
5
6
|
import { createSyncBlockNode } from '../utils/utils';
|
|
@@ -45,7 +46,14 @@ export const useFetchSyncBlockData = (manager, resourceId, localId, fireAnalytic
|
|
|
45
46
|
logException(error, {
|
|
46
47
|
location: 'editor-synced-block-provider/useFetchSyncBlockData'
|
|
47
48
|
});
|
|
48
|
-
|
|
49
|
+
if (fg('platform_synced_block_dogfooding')) {
|
|
50
|
+
var _manager$referenceMan2, _manager$referenceMan3;
|
|
51
|
+
manager === null || manager === void 0 ? void 0 : (_manager$referenceMan2 = manager.referenceManager) === null || _manager$referenceMan2 === void 0 ? void 0 : (_manager$referenceMan3 = _manager$referenceMan2.fetchExperience) === null || _manager$referenceMan3 === void 0 ? void 0 : _manager$referenceMan3.failure({
|
|
52
|
+
reason: error.message
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent(fetchErrorPayload(error.message));
|
|
56
|
+
}
|
|
49
57
|
|
|
50
58
|
// Set error state if fetching fails
|
|
51
59
|
setFetchState({
|
|
@@ -75,6 +83,7 @@ export const useFetchSyncBlockData = (manager, resourceId, localId, fireAnalytic
|
|
|
75
83
|
}, [localId, manager.referenceManager, resourceId]);
|
|
76
84
|
return {
|
|
77
85
|
isLoading,
|
|
86
|
+
ssrProviders: resourceId ? manager.referenceManager.getSSRProviders(resourceId) : null,
|
|
78
87
|
providerFactory: manager.referenceManager.getProviderFactory(resourceId || ''),
|
|
79
88
|
reloadData,
|
|
80
89
|
syncBlockInstance
|
package/dist/es2019/index.js
CHANGED
|
@@ -25,6 +25,7 @@ export { SyncBlockStoreManager, useMemoizedSyncBlockStoreManager } from './store
|
|
|
25
25
|
|
|
26
26
|
// utils
|
|
27
27
|
export { resolveSyncBlockInstance } from './utils/resolveSyncBlockInstance';
|
|
28
|
+
export { parseResourceId } from './utils/parseResourceId';
|
|
28
29
|
export { createSyncBlockNode, convertSyncBlockPMNodeToSyncBlockData, convertSyncBlockJSONNodeToSyncBlockNode, convertPMNodesToSyncBlockNodes, getContentIdAndProductFromResourceId } from './utils/utils';
|
|
29
30
|
export { fetchErrorPayload } from './utils/errorHandling';
|
|
30
31
|
export { fetchReferences } from './providers/block-service/blockServiceAPI';
|