@atlaskit/editor-synced-block-provider 2.10.1 → 2.10.2
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 +8 -0
- package/dist/cjs/providers/confluence/confluenceContentAPI.js +21 -14
- package/dist/cjs/providers/syncBlockProvider.js +31 -1
- package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +51 -10
- package/dist/cjs/store-manager/syncBlockStoreManager.js +1 -0
- package/dist/cjs/utils/ari.js +1 -1
- package/dist/es2019/providers/confluence/confluenceContentAPI.js +8 -2
- package/dist/es2019/providers/syncBlockProvider.js +31 -1
- package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +51 -10
- package/dist/es2019/store-manager/syncBlockStoreManager.js +2 -0
- package/dist/es2019/utils/ari.js +1 -1
- package/dist/esm/providers/confluence/confluenceContentAPI.js +22 -15
- package/dist/esm/providers/syncBlockProvider.js +31 -1
- package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +51 -10
- package/dist/esm/store-manager/syncBlockStoreManager.js +2 -0
- package/dist/esm/utils/ari.js +1 -1
- package/dist/types/common/types.d.ts +3 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/providers/syncBlockProvider.d.ts +10 -1
- package/dist/types/providers/types.d.ts +20 -8
- package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +1 -0
- package/dist/types/utils/blockService.d.ts +3 -3
- package/dist/types-ts4.5/common/types.d.ts +3 -1
- package/dist/types-ts4.5/index.d.ts +2 -2
- package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +10 -1
- package/dist/types-ts4.5/providers/types.d.ts +20 -8
- package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +1 -0
- package/dist/types-ts4.5/utils/blockService.d.ts +3 -3
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/editor-synced-block-provider
|
|
2
2
|
|
|
3
|
+
## 2.10.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`27e34de207285`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/27e34de207285) -
|
|
8
|
+
EDITOR-2771 Create media & emoji provider per each reference sync block
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
3
11
|
## 2.10.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -17,6 +17,8 @@ var _ari = require("../../utils/ari");
|
|
|
17
17
|
var _contentProperty3 = require("../../utils/contentProperty");
|
|
18
18
|
var _errorHandling = require("../../utils/errorHandling");
|
|
19
19
|
var _utils = require("../../utils/utils");
|
|
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; }
|
|
20
22
|
/**
|
|
21
23
|
* Configuration for Content API providers
|
|
22
24
|
*/
|
|
@@ -217,7 +219,7 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
|
|
|
217
219
|
key: "writeData",
|
|
218
220
|
value: function () {
|
|
219
221
|
var _writeData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(data) {
|
|
220
|
-
var match, resourceId, _match, pageId, pageType, localId, key, options, updatePayload, updateResult;
|
|
222
|
+
var match, resourceId, _match, pageId, pageType, localId, key, sourceAri, syncBlockDataWithSourceDocumentAri, options, updatePayload, updateResult;
|
|
221
223
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
222
224
|
while (1) switch (_context3.prev = _context3.next) {
|
|
223
225
|
case 0:
|
|
@@ -238,28 +240,33 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
|
|
|
238
240
|
// Update existing content property
|
|
239
241
|
localId = (0, _ari.getLocalIdFromAri)(resourceId);
|
|
240
242
|
key = getContentPropertyKey(this.config.contentPropertyKey, localId);
|
|
243
|
+
sourceAri = (0, _ari.getConfluencePageAri)(pageId, this.config.cloudId, pageType);
|
|
244
|
+
syncBlockDataWithSourceDocumentAri = _objectSpread(_objectSpread({}, data), {}, {
|
|
245
|
+
product: 'confluence-page',
|
|
246
|
+
sourceAri: sourceAri
|
|
247
|
+
});
|
|
241
248
|
options = {
|
|
242
249
|
pageId: pageId,
|
|
243
250
|
key: key,
|
|
244
|
-
value:
|
|
251
|
+
value: syncBlockDataWithSourceDocumentAri,
|
|
245
252
|
cloudId: this.config.cloudId,
|
|
246
253
|
pageType: pageType
|
|
247
254
|
};
|
|
248
|
-
_context3.next =
|
|
255
|
+
_context3.next = 17;
|
|
249
256
|
return (0, _contentProperty3.updateContentProperty)(options);
|
|
250
|
-
case
|
|
257
|
+
case 17:
|
|
251
258
|
updatePayload = _context3.sent;
|
|
252
259
|
updateResult = (0, _utils.isBlogPageType)(pageType) ? updatePayload.data.confluence.updateValueBlogPostProperty.blogPostProperty : updatePayload.data.confluence.updateValuePageProperty.pageProperty;
|
|
253
260
|
if (!((updateResult === null || updateResult === void 0 ? void 0 : updateResult.key) === key)) {
|
|
254
|
-
_context3.next =
|
|
261
|
+
_context3.next = 23;
|
|
255
262
|
break;
|
|
256
263
|
}
|
|
257
264
|
return _context3.abrupt("return", {
|
|
258
265
|
resourceId: resourceId
|
|
259
266
|
});
|
|
260
|
-
case
|
|
267
|
+
case 23:
|
|
261
268
|
if (updateResult) {
|
|
262
|
-
_context3.next =
|
|
269
|
+
_context3.next = 27;
|
|
263
270
|
break;
|
|
264
271
|
}
|
|
265
272
|
return _context3.abrupt("return", this.createNewContentProperty(pageId, key, data, pageType).then(function () {
|
|
@@ -271,24 +278,24 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
|
|
|
271
278
|
error: error
|
|
272
279
|
};
|
|
273
280
|
}));
|
|
274
|
-
case
|
|
281
|
+
case 27:
|
|
275
282
|
return _context3.abrupt("return", {
|
|
276
283
|
error: "Failed to update ".concat(pageType, " content property")
|
|
277
284
|
});
|
|
278
|
-
case 26:
|
|
279
|
-
_context3.next = 31;
|
|
280
|
-
break;
|
|
281
285
|
case 28:
|
|
282
|
-
_context3.
|
|
286
|
+
_context3.next = 33;
|
|
287
|
+
break;
|
|
288
|
+
case 30:
|
|
289
|
+
_context3.prev = 30;
|
|
283
290
|
_context3.t1 = _context3["catch"](9);
|
|
284
291
|
return _context3.abrupt("return", {
|
|
285
292
|
error: "Failed to write ".concat(pageType)
|
|
286
293
|
});
|
|
287
|
-
case
|
|
294
|
+
case 33:
|
|
288
295
|
case "end":
|
|
289
296
|
return _context3.stop();
|
|
290
297
|
}
|
|
291
|
-
}, _callee3, this, [[1, 5], [9,
|
|
298
|
+
}, _callee3, this, [[1, 5], [9, 30]]);
|
|
292
299
|
}));
|
|
293
300
|
function writeData(_x6) {
|
|
294
301
|
return _writeData.apply(this, arguments);
|
|
@@ -17,6 +17,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
17
17
|
var _react = require("react");
|
|
18
18
|
var _types = require("../common/types");
|
|
19
19
|
var _types2 = require("../providers/types");
|
|
20
|
+
var _ari = require("../utils/ari");
|
|
20
21
|
var _sourceInfo = require("../utils/sourceInfo");
|
|
21
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)); }
|
|
22
23
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
@@ -217,7 +218,7 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
217
218
|
}, {
|
|
218
219
|
key: "retrieveSyncBlockSourceInfo",
|
|
219
220
|
value: function retrieveSyncBlockSourceInfo(node) {
|
|
220
|
-
// with content API, this is the concatenation of the page ARI and the block's localId.
|
|
221
|
+
// with content API, this is the concatenation of the page ARI and the block's localId.
|
|
221
222
|
// with block service, this is the ARI of the block.
|
|
222
223
|
// this can be cleaned up from the specific providers and placed here after platform_synced_blocks_block_service_provider
|
|
223
224
|
var resourceId = node.attrs.resourceId;
|
|
@@ -250,6 +251,35 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
250
251
|
value: function getSyncedBlockRendererProviderOptions() {
|
|
251
252
|
return this.providerOptions;
|
|
252
253
|
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Retrieve the parent info for the sync block
|
|
257
|
+
*
|
|
258
|
+
* @param resourceId
|
|
259
|
+
* @param syncBlockInstance
|
|
260
|
+
*
|
|
261
|
+
* @returns The parent info for the sync block
|
|
262
|
+
*/
|
|
263
|
+
}, {
|
|
264
|
+
key: "retrieveSyncBlockParentInfo",
|
|
265
|
+
value: function retrieveSyncBlockParentInfo(syncBlockInstance) {
|
|
266
|
+
if (!syncBlockInstance || !syncBlockInstance.data) {
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
var _syncBlockInstance$da = syncBlockInstance.data,
|
|
270
|
+
sourceAri = _syncBlockInstance$da.sourceAri,
|
|
271
|
+
resourceId = _syncBlockInstance$da.resourceId,
|
|
272
|
+
contentProduct = _syncBlockInstance$da.product;
|
|
273
|
+
|
|
274
|
+
// Temp solution to get the pageId from resource since the sourceDocumentAri is not available for older sync blocks
|
|
275
|
+
var pageARI = sourceAri || resourceId;
|
|
276
|
+
var _getPageIdAndTypeFrom = (0, _ari.getPageIdAndTypeFromAri)(pageARI),
|
|
277
|
+
contentId = _getPageIdAndTypeFrom.id;
|
|
278
|
+
return {
|
|
279
|
+
contentId: contentId,
|
|
280
|
+
contentProduct: contentProduct || 'confluence-page'
|
|
281
|
+
};
|
|
282
|
+
}
|
|
253
283
|
}]);
|
|
254
284
|
}(_types2.SyncBlockDataProvider);
|
|
255
285
|
var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions) {
|
|
@@ -348,20 +348,61 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
|
|
|
348
348
|
return undefined;
|
|
349
349
|
}
|
|
350
350
|
var _this$dataProvider$ge = this.dataProvider.getSyncedBlockRendererProviderOptions(),
|
|
351
|
-
parentDataProviders = _this$dataProvider$ge.parentDataProviders
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
this.providerFactories.set(resourceId, _providerFactory.ProviderFactory.create({
|
|
357
|
-
emojiProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.emojiProvider,
|
|
358
|
-
mediaProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.mediaProvider,
|
|
351
|
+
parentDataProviders = _this$dataProvider$ge.parentDataProviders,
|
|
352
|
+
providerCreator = _this$dataProvider$ge.providerCreator;
|
|
353
|
+
var providerFactory = this.providerFactories.get(resourceId);
|
|
354
|
+
if (!providerFactory) {
|
|
355
|
+
providerFactory = _providerFactory.ProviderFactory.create({
|
|
359
356
|
mentionProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.mentionProvider,
|
|
360
357
|
profilecardProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.profilecardProvider,
|
|
361
358
|
taskDecisionProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.taskDecisionProvider
|
|
362
|
-
})
|
|
359
|
+
});
|
|
360
|
+
this.providerFactories.set(resourceId, providerFactory);
|
|
361
|
+
}
|
|
362
|
+
if (providerCreator) {
|
|
363
|
+
this.retrieveDynamicProviders(resourceId, providerFactory, providerCreator);
|
|
364
|
+
}
|
|
365
|
+
return providerFactory;
|
|
366
|
+
}
|
|
367
|
+
}, {
|
|
368
|
+
key: "retrieveDynamicProviders",
|
|
369
|
+
value: function retrieveDynamicProviders(resourceId, providerFactory, providerCreator) {
|
|
370
|
+
if (!this.dataProvider) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
var hasMediaProvider = providerFactory.hasProvider('mediaProvider');
|
|
374
|
+
var hasEmojiProvider = providerFactory.hasProvider('emojiProvider');
|
|
375
|
+
if (hasMediaProvider && hasEmojiProvider) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
var parentInfo = this.dataProvider.retrieveSyncBlockParentInfo(this.syncBlockCache.get(resourceId));
|
|
379
|
+
if (!parentInfo) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
var contentId = parentInfo.contentId,
|
|
383
|
+
contentProduct = parentInfo.contentProduct;
|
|
384
|
+
if (!hasMediaProvider) {
|
|
385
|
+
if (providerCreator.createMediaProvider && contentId && contentProduct) {
|
|
386
|
+
var mediaProvider = providerCreator.createMediaProvider({
|
|
387
|
+
contentProduct: contentProduct,
|
|
388
|
+
contentId: contentId
|
|
389
|
+
});
|
|
390
|
+
if (mediaProvider) {
|
|
391
|
+
providerFactory.setProvider('mediaProvider', mediaProvider);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
if (!hasEmojiProvider) {
|
|
396
|
+
if (providerCreator.createEmojiProvider && contentId && contentProduct) {
|
|
397
|
+
var emojiProvider = providerCreator.createEmojiProvider({
|
|
398
|
+
contentProduct: contentProduct,
|
|
399
|
+
contentId: contentId
|
|
400
|
+
});
|
|
401
|
+
if (emojiProvider) {
|
|
402
|
+
providerFactory.setProvider('emojiProvider', emojiProvider);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
363
405
|
}
|
|
364
|
-
return this.providerFactories.get(resourceId);
|
|
365
406
|
}
|
|
366
407
|
}, {
|
|
367
408
|
key: "destroy",
|
|
@@ -10,6 +10,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
|
|
|
10
10
|
var _utils = require("../utils/utils");
|
|
11
11
|
var _referenceSyncBlockStoreManager = require("./referenceSyncBlockStoreManager");
|
|
12
12
|
var _sourceSyncBlockStoreManager = require("./sourceSyncBlockStoreManager");
|
|
13
|
+
// eslint-disable-next-line no-restricted-imports
|
|
13
14
|
// A store manager responsible for the lifecycle and state management of sync blocks in an editor instance.
|
|
14
15
|
// Supports create, read, update, and delete operations for sync blocks.
|
|
15
16
|
// Designed to manage local in-memory state and synchronize with an external data provider.
|
package/dist/cjs/utils/ari.js
CHANGED
|
@@ -11,7 +11,7 @@ var getConfluencePageAri = exports.getConfluencePageAri = function getConfluence
|
|
|
11
11
|
return "ari:cloud:confluence:".concat(cloudId, ":").concat(pageType, "/").concat(pageId);
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
// For extracting from Page ARI and also the content property's version of resourceId
|
|
14
|
+
// For extracting from Page ARI and also the content property's version of resourceId
|
|
15
15
|
var getPageIdAndTypeFromAri = exports.getPageIdAndTypeFromAri = function getPageIdAndTypeFromAri(ari) {
|
|
16
16
|
var match = ari.match(/ari:cloud:confluence:[^:]+:(page|blogpost)\/(\d+)/);
|
|
17
17
|
if (match !== null && match !== void 0 && match[2]) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { SyncBlockError } from '../../common/types';
|
|
4
|
-
import {
|
|
4
|
+
import { getConfluencePageAri, getPageARIFromResourceId, getLocalIdFromAri, getPageIdAndTypeFromAri, resourceIdFromSourceAndLocalId } from '../../utils/ari';
|
|
5
5
|
import { getContentProperty, createContentProperty, updateContentProperty, deleteContentProperty } from '../../utils/contentProperty';
|
|
6
6
|
import { stringifyError } from '../../utils/errorHandling';
|
|
7
7
|
import { isBlogPageType } from '../../utils/utils';
|
|
@@ -166,10 +166,16 @@ class ConfluenceADFWriteProvider {
|
|
|
166
166
|
// Update existing content property
|
|
167
167
|
const localId = getLocalIdFromAri(resourceId);
|
|
168
168
|
const key = getContentPropertyKey(this.config.contentPropertyKey, localId);
|
|
169
|
+
const sourceAri = getConfluencePageAri(pageId, this.config.cloudId, pageType);
|
|
170
|
+
const syncBlockDataWithSourceDocumentAri = {
|
|
171
|
+
...data,
|
|
172
|
+
product: 'confluence-page',
|
|
173
|
+
sourceAri
|
|
174
|
+
};
|
|
169
175
|
const options = {
|
|
170
176
|
pageId,
|
|
171
177
|
key,
|
|
172
|
-
value:
|
|
178
|
+
value: syncBlockDataWithSourceDocumentAri,
|
|
173
179
|
cloudId: this.config.cloudId,
|
|
174
180
|
pageType
|
|
175
181
|
};
|
|
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { SyncBlockError } from '../common/types';
|
|
4
4
|
import { SyncBlockDataProvider } from '../providers/types';
|
|
5
|
+
import { getPageIdAndTypeFromAri } from '../utils/ari';
|
|
5
6
|
import { fetchSourceInfo } from '../utils/sourceInfo';
|
|
6
7
|
export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
7
8
|
// the source document ARI; that the source sync block is on.
|
|
@@ -137,7 +138,7 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
137
138
|
* @returns The source info
|
|
138
139
|
*/
|
|
139
140
|
retrieveSyncBlockSourceInfo(node) {
|
|
140
|
-
// with content API, this is the concatenation of the page ARI and the block's localId.
|
|
141
|
+
// with content API, this is the concatenation of the page ARI and the block's localId.
|
|
141
142
|
// with block service, this is the ARI of the block.
|
|
142
143
|
// this can be cleaned up from the specific providers and placed here after platform_synced_blocks_block_service_provider
|
|
143
144
|
const {
|
|
@@ -168,6 +169,35 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
168
169
|
getSyncedBlockRendererProviderOptions() {
|
|
169
170
|
return this.providerOptions;
|
|
170
171
|
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Retrieve the parent info for the sync block
|
|
175
|
+
*
|
|
176
|
+
* @param resourceId
|
|
177
|
+
* @param syncBlockInstance
|
|
178
|
+
*
|
|
179
|
+
* @returns The parent info for the sync block
|
|
180
|
+
*/
|
|
181
|
+
retrieveSyncBlockParentInfo(syncBlockInstance) {
|
|
182
|
+
if (!syncBlockInstance || !syncBlockInstance.data) {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
const {
|
|
186
|
+
sourceAri,
|
|
187
|
+
resourceId,
|
|
188
|
+
product: contentProduct
|
|
189
|
+
} = syncBlockInstance.data;
|
|
190
|
+
|
|
191
|
+
// Temp solution to get the pageId from resource since the sourceDocumentAri is not available for older sync blocks
|
|
192
|
+
const pageARI = sourceAri || resourceId;
|
|
193
|
+
const {
|
|
194
|
+
id: contentId
|
|
195
|
+
} = getPageIdAndTypeFromAri(pageARI);
|
|
196
|
+
return {
|
|
197
|
+
contentId,
|
|
198
|
+
contentProduct: contentProduct || 'confluence-page'
|
|
199
|
+
};
|
|
200
|
+
}
|
|
171
201
|
}
|
|
172
202
|
export const useMemoizedSyncedBlockProvider = (fetchProvider, writeProvider, sourceId, providerOptions) => {
|
|
173
203
|
return useMemo(() => {
|
|
@@ -235,21 +235,62 @@ export class ReferenceSyncBlockStoreManager {
|
|
|
235
235
|
return undefined;
|
|
236
236
|
}
|
|
237
237
|
const {
|
|
238
|
-
parentDataProviders
|
|
238
|
+
parentDataProviders,
|
|
239
|
+
providerCreator
|
|
239
240
|
} = this.dataProvider.getSyncedBlockRendererProviderOptions();
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
// So we need to keep the reference to the Provider Factory so we can then set media & emoji providers later
|
|
244
|
-
this.providerFactories.set(resourceId, ProviderFactory.create({
|
|
245
|
-
emojiProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.emojiProvider,
|
|
246
|
-
mediaProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.mediaProvider,
|
|
241
|
+
let providerFactory = this.providerFactories.get(resourceId);
|
|
242
|
+
if (!providerFactory) {
|
|
243
|
+
providerFactory = ProviderFactory.create({
|
|
247
244
|
mentionProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.mentionProvider,
|
|
248
245
|
profilecardProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.profilecardProvider,
|
|
249
246
|
taskDecisionProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.taskDecisionProvider
|
|
250
|
-
})
|
|
247
|
+
});
|
|
248
|
+
this.providerFactories.set(resourceId, providerFactory);
|
|
249
|
+
}
|
|
250
|
+
if (providerCreator) {
|
|
251
|
+
this.retrieveDynamicProviders(resourceId, providerFactory, providerCreator);
|
|
252
|
+
}
|
|
253
|
+
return providerFactory;
|
|
254
|
+
}
|
|
255
|
+
retrieveDynamicProviders(resourceId, providerFactory, providerCreator) {
|
|
256
|
+
if (!this.dataProvider) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const hasMediaProvider = providerFactory.hasProvider('mediaProvider');
|
|
260
|
+
const hasEmojiProvider = providerFactory.hasProvider('emojiProvider');
|
|
261
|
+
if (hasMediaProvider && hasEmojiProvider) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const parentInfo = this.dataProvider.retrieveSyncBlockParentInfo(this.syncBlockCache.get(resourceId));
|
|
265
|
+
if (!parentInfo) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const {
|
|
269
|
+
contentId,
|
|
270
|
+
contentProduct
|
|
271
|
+
} = parentInfo;
|
|
272
|
+
if (!hasMediaProvider) {
|
|
273
|
+
if (providerCreator.createMediaProvider && contentId && contentProduct) {
|
|
274
|
+
const mediaProvider = providerCreator.createMediaProvider({
|
|
275
|
+
contentProduct,
|
|
276
|
+
contentId
|
|
277
|
+
});
|
|
278
|
+
if (mediaProvider) {
|
|
279
|
+
providerFactory.setProvider('mediaProvider', mediaProvider);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (!hasEmojiProvider) {
|
|
284
|
+
if (providerCreator.createEmojiProvider && contentId && contentProduct) {
|
|
285
|
+
const emojiProvider = providerCreator.createEmojiProvider({
|
|
286
|
+
contentProduct,
|
|
287
|
+
contentId
|
|
288
|
+
});
|
|
289
|
+
if (emojiProvider) {
|
|
290
|
+
providerFactory.setProvider('emojiProvider', emojiProvider);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
251
293
|
}
|
|
252
|
-
return this.providerFactories.get(resourceId);
|
|
253
294
|
}
|
|
254
295
|
destroy() {
|
|
255
296
|
this.syncBlockCache.clear();
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// eslint-disable-next-line no-restricted-imports
|
|
2
|
+
|
|
1
3
|
import { convertPMNodeToSyncBlockNode } from '../utils/utils';
|
|
2
4
|
import { ReferenceSyncBlockStoreManager } from './referenceSyncBlockStoreManager';
|
|
3
5
|
import { SourceSyncBlockStoreManager } from './sourceSyncBlockStoreManager';
|
package/dist/es2019/utils/ari.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export const getConfluencePageAri = (pageId, cloudId, pageType = 'page') => `ari:cloud:confluence:${cloudId}:${pageType}/${pageId}`;
|
|
4
4
|
|
|
5
|
-
// For extracting from Page ARI and also the content property's version of resourceId
|
|
5
|
+
// For extracting from Page ARI and also the content property's version of resourceId
|
|
6
6
|
export const getPageIdAndTypeFromAri = ari => {
|
|
7
7
|
const match = ari.match(/ari:cloud:confluence:[^:]+:(page|blogpost)\/(\d+)/);
|
|
8
8
|
if (match !== null && match !== void 0 && match[2]) {
|
|
@@ -3,10 +3,12 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
|
3
3
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
4
4
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
5
5
|
import _typeof from "@babel/runtime/helpers/typeof";
|
|
6
|
+
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; }
|
|
7
|
+
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) { _defineProperty(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; }
|
|
6
8
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
7
9
|
import { useMemo } from 'react';
|
|
8
10
|
import { SyncBlockError } from '../../common/types';
|
|
9
|
-
import {
|
|
11
|
+
import { getConfluencePageAri, getPageARIFromResourceId, getLocalIdFromAri, getPageIdAndTypeFromAri, resourceIdFromSourceAndLocalId } from '../../utils/ari';
|
|
10
12
|
import { getContentProperty, createContentProperty, updateContentProperty, deleteContentProperty } from '../../utils/contentProperty';
|
|
11
13
|
import { stringifyError } from '../../utils/errorHandling';
|
|
12
14
|
import { isBlogPageType } from '../../utils/utils';
|
|
@@ -211,7 +213,7 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
|
|
|
211
213
|
key: "writeData",
|
|
212
214
|
value: function () {
|
|
213
215
|
var _writeData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(data) {
|
|
214
|
-
var match, resourceId, _match, pageId, pageType, localId, key, options, updatePayload, updateResult;
|
|
216
|
+
var match, resourceId, _match, pageId, pageType, localId, key, sourceAri, syncBlockDataWithSourceDocumentAri, options, updatePayload, updateResult;
|
|
215
217
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
216
218
|
while (1) switch (_context3.prev = _context3.next) {
|
|
217
219
|
case 0:
|
|
@@ -232,28 +234,33 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
|
|
|
232
234
|
// Update existing content property
|
|
233
235
|
localId = getLocalIdFromAri(resourceId);
|
|
234
236
|
key = getContentPropertyKey(this.config.contentPropertyKey, localId);
|
|
237
|
+
sourceAri = getConfluencePageAri(pageId, this.config.cloudId, pageType);
|
|
238
|
+
syncBlockDataWithSourceDocumentAri = _objectSpread(_objectSpread({}, data), {}, {
|
|
239
|
+
product: 'confluence-page',
|
|
240
|
+
sourceAri: sourceAri
|
|
241
|
+
});
|
|
235
242
|
options = {
|
|
236
243
|
pageId: pageId,
|
|
237
244
|
key: key,
|
|
238
|
-
value:
|
|
245
|
+
value: syncBlockDataWithSourceDocumentAri,
|
|
239
246
|
cloudId: this.config.cloudId,
|
|
240
247
|
pageType: pageType
|
|
241
248
|
};
|
|
242
|
-
_context3.next =
|
|
249
|
+
_context3.next = 17;
|
|
243
250
|
return updateContentProperty(options);
|
|
244
|
-
case
|
|
251
|
+
case 17:
|
|
245
252
|
updatePayload = _context3.sent;
|
|
246
253
|
updateResult = isBlogPageType(pageType) ? updatePayload.data.confluence.updateValueBlogPostProperty.blogPostProperty : updatePayload.data.confluence.updateValuePageProperty.pageProperty;
|
|
247
254
|
if (!((updateResult === null || updateResult === void 0 ? void 0 : updateResult.key) === key)) {
|
|
248
|
-
_context3.next =
|
|
255
|
+
_context3.next = 23;
|
|
249
256
|
break;
|
|
250
257
|
}
|
|
251
258
|
return _context3.abrupt("return", {
|
|
252
259
|
resourceId: resourceId
|
|
253
260
|
});
|
|
254
|
-
case
|
|
261
|
+
case 23:
|
|
255
262
|
if (updateResult) {
|
|
256
|
-
_context3.next =
|
|
263
|
+
_context3.next = 27;
|
|
257
264
|
break;
|
|
258
265
|
}
|
|
259
266
|
return _context3.abrupt("return", this.createNewContentProperty(pageId, key, data, pageType).then(function () {
|
|
@@ -265,24 +272,24 @@ var ConfluenceADFWriteProvider = /*#__PURE__*/function () {
|
|
|
265
272
|
error: error
|
|
266
273
|
};
|
|
267
274
|
}));
|
|
268
|
-
case
|
|
275
|
+
case 27:
|
|
269
276
|
return _context3.abrupt("return", {
|
|
270
277
|
error: "Failed to update ".concat(pageType, " content property")
|
|
271
278
|
});
|
|
272
|
-
case 26:
|
|
273
|
-
_context3.next = 31;
|
|
274
|
-
break;
|
|
275
279
|
case 28:
|
|
276
|
-
_context3.
|
|
280
|
+
_context3.next = 33;
|
|
281
|
+
break;
|
|
282
|
+
case 30:
|
|
283
|
+
_context3.prev = 30;
|
|
277
284
|
_context3.t1 = _context3["catch"](9);
|
|
278
285
|
return _context3.abrupt("return", {
|
|
279
286
|
error: "Failed to write ".concat(pageType)
|
|
280
287
|
});
|
|
281
|
-
case
|
|
288
|
+
case 33:
|
|
282
289
|
case "end":
|
|
283
290
|
return _context3.stop();
|
|
284
291
|
}
|
|
285
|
-
}, _callee3, this, [[1, 5], [9,
|
|
292
|
+
}, _callee3, this, [[1, 5], [9, 30]]);
|
|
286
293
|
}));
|
|
287
294
|
function writeData(_x6) {
|
|
288
295
|
return _writeData.apply(this, arguments);
|
|
@@ -12,6 +12,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
12
12
|
import { useMemo } from 'react';
|
|
13
13
|
import { SyncBlockError } from '../common/types';
|
|
14
14
|
import { SyncBlockDataProvider } from '../providers/types';
|
|
15
|
+
import { getPageIdAndTypeFromAri } from '../utils/ari';
|
|
15
16
|
import { fetchSourceInfo } from '../utils/sourceInfo';
|
|
16
17
|
export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
|
|
17
18
|
// the source document ARI; that the source sync block is on.
|
|
@@ -210,7 +211,7 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
|
|
|
210
211
|
}, {
|
|
211
212
|
key: "retrieveSyncBlockSourceInfo",
|
|
212
213
|
value: function retrieveSyncBlockSourceInfo(node) {
|
|
213
|
-
// with content API, this is the concatenation of the page ARI and the block's localId.
|
|
214
|
+
// with content API, this is the concatenation of the page ARI and the block's localId.
|
|
214
215
|
// with block service, this is the ARI of the block.
|
|
215
216
|
// this can be cleaned up from the specific providers and placed here after platform_synced_blocks_block_service_provider
|
|
216
217
|
var resourceId = node.attrs.resourceId;
|
|
@@ -243,6 +244,35 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
|
|
|
243
244
|
value: function getSyncedBlockRendererProviderOptions() {
|
|
244
245
|
return this.providerOptions;
|
|
245
246
|
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Retrieve the parent info for the sync block
|
|
250
|
+
*
|
|
251
|
+
* @param resourceId
|
|
252
|
+
* @param syncBlockInstance
|
|
253
|
+
*
|
|
254
|
+
* @returns The parent info for the sync block
|
|
255
|
+
*/
|
|
256
|
+
}, {
|
|
257
|
+
key: "retrieveSyncBlockParentInfo",
|
|
258
|
+
value: function retrieveSyncBlockParentInfo(syncBlockInstance) {
|
|
259
|
+
if (!syncBlockInstance || !syncBlockInstance.data) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
var _syncBlockInstance$da = syncBlockInstance.data,
|
|
263
|
+
sourceAri = _syncBlockInstance$da.sourceAri,
|
|
264
|
+
resourceId = _syncBlockInstance$da.resourceId,
|
|
265
|
+
contentProduct = _syncBlockInstance$da.product;
|
|
266
|
+
|
|
267
|
+
// Temp solution to get the pageId from resource since the sourceDocumentAri is not available for older sync blocks
|
|
268
|
+
var pageARI = sourceAri || resourceId;
|
|
269
|
+
var _getPageIdAndTypeFrom = getPageIdAndTypeFromAri(pageARI),
|
|
270
|
+
contentId = _getPageIdAndTypeFrom.id;
|
|
271
|
+
return {
|
|
272
|
+
contentId: contentId,
|
|
273
|
+
contentProduct: contentProduct || 'confluence-page'
|
|
274
|
+
};
|
|
275
|
+
}
|
|
246
276
|
}]);
|
|
247
277
|
}(SyncBlockDataProvider);
|
|
248
278
|
export var useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions) {
|
|
@@ -341,20 +341,61 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
|
|
|
341
341
|
return undefined;
|
|
342
342
|
}
|
|
343
343
|
var _this$dataProvider$ge = this.dataProvider.getSyncedBlockRendererProviderOptions(),
|
|
344
|
-
parentDataProviders = _this$dataProvider$ge.parentDataProviders
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
this.providerFactories.set(resourceId, ProviderFactory.create({
|
|
350
|
-
emojiProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.emojiProvider,
|
|
351
|
-
mediaProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.mediaProvider,
|
|
344
|
+
parentDataProviders = _this$dataProvider$ge.parentDataProviders,
|
|
345
|
+
providerCreator = _this$dataProvider$ge.providerCreator;
|
|
346
|
+
var providerFactory = this.providerFactories.get(resourceId);
|
|
347
|
+
if (!providerFactory) {
|
|
348
|
+
providerFactory = ProviderFactory.create({
|
|
352
349
|
mentionProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.mentionProvider,
|
|
353
350
|
profilecardProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.profilecardProvider,
|
|
354
351
|
taskDecisionProvider: parentDataProviders === null || parentDataProviders === void 0 ? void 0 : parentDataProviders.taskDecisionProvider
|
|
355
|
-
})
|
|
352
|
+
});
|
|
353
|
+
this.providerFactories.set(resourceId, providerFactory);
|
|
354
|
+
}
|
|
355
|
+
if (providerCreator) {
|
|
356
|
+
this.retrieveDynamicProviders(resourceId, providerFactory, providerCreator);
|
|
357
|
+
}
|
|
358
|
+
return providerFactory;
|
|
359
|
+
}
|
|
360
|
+
}, {
|
|
361
|
+
key: "retrieveDynamicProviders",
|
|
362
|
+
value: function retrieveDynamicProviders(resourceId, providerFactory, providerCreator) {
|
|
363
|
+
if (!this.dataProvider) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
var hasMediaProvider = providerFactory.hasProvider('mediaProvider');
|
|
367
|
+
var hasEmojiProvider = providerFactory.hasProvider('emojiProvider');
|
|
368
|
+
if (hasMediaProvider && hasEmojiProvider) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
var parentInfo = this.dataProvider.retrieveSyncBlockParentInfo(this.syncBlockCache.get(resourceId));
|
|
372
|
+
if (!parentInfo) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
var contentId = parentInfo.contentId,
|
|
376
|
+
contentProduct = parentInfo.contentProduct;
|
|
377
|
+
if (!hasMediaProvider) {
|
|
378
|
+
if (providerCreator.createMediaProvider && contentId && contentProduct) {
|
|
379
|
+
var mediaProvider = providerCreator.createMediaProvider({
|
|
380
|
+
contentProduct: contentProduct,
|
|
381
|
+
contentId: contentId
|
|
382
|
+
});
|
|
383
|
+
if (mediaProvider) {
|
|
384
|
+
providerFactory.setProvider('mediaProvider', mediaProvider);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (!hasEmojiProvider) {
|
|
389
|
+
if (providerCreator.createEmojiProvider && contentId && contentProduct) {
|
|
390
|
+
var emojiProvider = providerCreator.createEmojiProvider({
|
|
391
|
+
contentProduct: contentProduct,
|
|
392
|
+
contentId: contentId
|
|
393
|
+
});
|
|
394
|
+
if (emojiProvider) {
|
|
395
|
+
providerFactory.setProvider('emojiProvider', emojiProvider);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
356
398
|
}
|
|
357
|
-
return this.providerFactories.get(resourceId);
|
|
358
399
|
}
|
|
359
400
|
}, {
|
|
360
401
|
key: "destroy",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
2
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
+
// eslint-disable-next-line no-restricted-imports
|
|
4
|
+
|
|
3
5
|
import { convertPMNodeToSyncBlockNode } from '../utils/utils';
|
|
4
6
|
import { ReferenceSyncBlockStoreManager } from './referenceSyncBlockStoreManager';
|
|
5
7
|
import { SourceSyncBlockStoreManager } from './sourceSyncBlockStoreManager';
|
package/dist/esm/utils/ari.js
CHANGED
|
@@ -5,7 +5,7 @@ export var getConfluencePageAri = function getConfluencePageAri(pageId, cloudId)
|
|
|
5
5
|
return "ari:cloud:confluence:".concat(cloudId, ":").concat(pageType, "/").concat(pageId);
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
// For extracting from Page ARI and also the content property's version of resourceId
|
|
8
|
+
// For extracting from Page ARI and also the content property's version of resourceId
|
|
9
9
|
export var getPageIdAndTypeFromAri = function getPageIdAndTypeFromAri(ari) {
|
|
10
10
|
var match = ari.match(/ari:cloud:confluence:[^:]+:(page|blogpost)\/(\d+)/);
|
|
11
11
|
if (match !== null && match !== void 0 && match[2]) {
|
|
@@ -2,6 +2,7 @@ import type { ADFEntity } from '@atlaskit/adf-utils/types';
|
|
|
2
2
|
import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
|
|
3
3
|
export type BlockInstanceId = string;
|
|
4
4
|
export type ResourceId = string;
|
|
5
|
+
export type SyncBlockProduct = 'confluence-page' | 'jira-work-item';
|
|
5
6
|
export type SyncBlockAttrs = {
|
|
6
7
|
localId: BlockInstanceId;
|
|
7
8
|
resourceId: ResourceId;
|
|
@@ -22,8 +23,9 @@ export interface SyncBlockData {
|
|
|
22
23
|
createdAt?: string;
|
|
23
24
|
createdBy?: string;
|
|
24
25
|
isSynced?: boolean;
|
|
26
|
+
product?: SyncBlockProduct;
|
|
25
27
|
resourceId: ResourceId;
|
|
26
|
-
|
|
28
|
+
sourceAri?: string;
|
|
27
29
|
sourceTitle?: string;
|
|
28
30
|
sourceURL?: string;
|
|
29
31
|
updatedAt?: string;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ export type { SyncBlockData, SyncBlockNode } from './common/types';
|
|
|
4
4
|
export { useFetchSyncBlockData, type UseFetchSyncBlockDataResult, } from './hooks/useFetchSyncBlockData';
|
|
5
5
|
export { useFetchSyncBlockTitle } from './hooks/useFetchSyncBlockTitle';
|
|
6
6
|
export { useHandleContentChanges } from './hooks/useHandleContentChanges';
|
|
7
|
-
export { blockResourceIdFromSourceAndLocalId, getLocalIdFromResourceId } from './providers/block-service/ari';
|
|
7
|
+
export { blockResourceIdFromSourceAndLocalId, getLocalIdFromResourceId, } from './providers/block-service/ari';
|
|
8
8
|
export { useMemoizedBlockServiceAPIProviders } from './providers/block-service/blockServiceAPI';
|
|
9
9
|
export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders, } from './providers/confluence/confluenceContentAPI';
|
|
10
10
|
export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvider, } from './providers/syncBlockProvider';
|
|
11
|
-
export type { ADFFetchProvider, ADFWriteProvider, SyncBlockDataProvider, SyncBlockInstance, } from './providers/types';
|
|
11
|
+
export type { ADFFetchProvider, ADFWriteProvider, SyncBlockDataProvider, SyncBlockInstance, MediaEmojiProviderOptions, SyncedBlockRendererProviderOptions, SyncBlockRendererProviderCreator, } from './providers/types';
|
|
12
12
|
export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
|
|
13
13
|
export { SyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
|
|
14
14
|
export { getConfluencePageAri, getLocalIdFromAri, getPageARIFromResourceId, getPageIdAndTypeFromAri, resourceIdFromSourceAndLocalId, } from './utils/ari';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
|
|
2
2
|
import { type SyncBlockData, type SyncBlockNode } from '../common/types';
|
|
3
|
-
import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockSourceInfo, type SyncedBlockRendererProviderOptions, type WriteSyncBlockResult } from '../providers/types';
|
|
3
|
+
import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockParentInfo, type SyncBlockSourceInfo, type SyncedBlockRendererProviderOptions, type WriteSyncBlockResult } from '../providers/types';
|
|
4
4
|
export declare class SyncBlockProvider extends SyncBlockDataProvider {
|
|
5
5
|
name: string;
|
|
6
6
|
private fetchProvider;
|
|
@@ -79,5 +79,14 @@ export declare class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
79
79
|
* @returns The synced block renderer provider options
|
|
80
80
|
*/
|
|
81
81
|
getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
|
|
82
|
+
/**
|
|
83
|
+
* Retrieve the parent info for the sync block
|
|
84
|
+
*
|
|
85
|
+
* @param resourceId
|
|
86
|
+
* @param syncBlockInstance
|
|
87
|
+
*
|
|
88
|
+
* @returns The parent info for the sync block
|
|
89
|
+
*/
|
|
90
|
+
retrieveSyncBlockParentInfo(syncBlockInstance: SyncBlockInstance | undefined): SyncBlockParentInfo | undefined;
|
|
82
91
|
}
|
|
83
92
|
export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions) => SyncBlockProvider;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaProvider, ProfilecardProvider } from '@atlaskit/editor-common/provider-factory';
|
|
2
2
|
import type { EmojiProvider } from '@atlaskit/emoji';
|
|
3
|
+
import type { MentionProvider } from '@atlaskit/mention/types';
|
|
3
4
|
import { NodeDataProvider } from '@atlaskit/node-data-provider';
|
|
4
|
-
import type {
|
|
5
|
+
import type { TaskDecisionProvider } from '@atlaskit/task-decision/types';
|
|
6
|
+
import type { SyncBlockData, ResourceId, SyncBlockError, SyncBlockNode, SyncBlockProduct } from '../common/types';
|
|
5
7
|
/**
|
|
6
8
|
* The instance of a sync block, containing its data and metadata.
|
|
7
9
|
* Mainly used for representing the state of a sync block after fetching from a data provider.
|
|
@@ -21,6 +23,10 @@ export type SyncBlockSourceInfo = {
|
|
|
21
23
|
title?: string;
|
|
22
24
|
url?: string;
|
|
23
25
|
};
|
|
26
|
+
export type SyncBlockParentInfo = {
|
|
27
|
+
contentId: string;
|
|
28
|
+
contentProduct: SyncBlockProduct;
|
|
29
|
+
};
|
|
24
30
|
export type WriteSyncBlockResult = {
|
|
25
31
|
error?: string;
|
|
26
32
|
resourceId?: string;
|
|
@@ -40,15 +46,20 @@ export interface ADFWriteProvider {
|
|
|
40
46
|
}
|
|
41
47
|
export type MediaEmojiProviderOptions = {
|
|
42
48
|
contentId: string;
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
contentProduct: SyncBlockProduct;
|
|
50
|
+
};
|
|
51
|
+
export type SyncedBlockRendererDataProviders = {
|
|
52
|
+
mentionProvider?: Promise<MentionProvider>;
|
|
53
|
+
profilecardProvider?: Promise<ProfilecardProvider>;
|
|
54
|
+
taskDecisionProvider?: Promise<TaskDecisionProvider>;
|
|
55
|
+
};
|
|
56
|
+
export type SyncBlockRendererProviderCreator = {
|
|
57
|
+
createEmojiProvider: ((options: MediaEmojiProviderOptions) => Promise<EmojiProvider>) | undefined;
|
|
58
|
+
createMediaProvider: ((options: MediaEmojiProviderOptions) => Promise<MediaProvider>) | undefined;
|
|
45
59
|
};
|
|
46
60
|
export type SyncedBlockRendererProviderOptions = {
|
|
47
61
|
parentDataProviders?: SyncedBlockRendererDataProviders;
|
|
48
|
-
providerCreator?:
|
|
49
|
-
createEmojiProvider: ((options: MediaEmojiProviderOptions) => Promise<EmojiProvider>) | undefined;
|
|
50
|
-
createMediaProvider: ((options: MediaEmojiProviderOptions) => Promise<MediaProvider>) | undefined;
|
|
51
|
-
};
|
|
62
|
+
providerCreator?: SyncBlockRendererProviderCreator;
|
|
52
63
|
};
|
|
53
64
|
export declare abstract class SyncBlockDataProvider extends NodeDataProvider<SyncBlockNode, SyncBlockInstance> {
|
|
54
65
|
abstract writeNodesData(nodes: SyncBlockNode[], data: SyncBlockData[]): Promise<Array<WriteSyncBlockResult>>;
|
|
@@ -56,6 +67,7 @@ export declare abstract class SyncBlockDataProvider extends NodeDataProvider<Syn
|
|
|
56
67
|
abstract getSourceId(): ResourceId;
|
|
57
68
|
abstract retrieveSyncBlockSourceInfo(node: SyncBlockNode): Promise<SyncBlockSourceInfo | undefined>;
|
|
58
69
|
abstract getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
|
|
70
|
+
abstract retrieveSyncBlockParentInfo(syncBlockInstance: SyncBlockInstance | undefined): SyncBlockParentInfo | undefined;
|
|
59
71
|
/**
|
|
60
72
|
* Generates a resource ID from a source ID and local ID.
|
|
61
73
|
* @param sourceId - The source document ID (e.g., page ARI)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import type { SyncBlockProduct } from '../common/types';
|
|
2
2
|
export type BlockContentResponse = {
|
|
3
3
|
blockAri: string;
|
|
4
4
|
blockInstanceId: string;
|
|
@@ -7,7 +7,7 @@ export type BlockContentResponse = {
|
|
|
7
7
|
createdAt: number;
|
|
8
8
|
createdBy: string;
|
|
9
9
|
isSynced: boolean;
|
|
10
|
-
product:
|
|
10
|
+
product: SyncBlockProduct;
|
|
11
11
|
sourceAri: string;
|
|
12
12
|
status: 'active' | 'deleted';
|
|
13
13
|
version: number;
|
|
@@ -26,7 +26,7 @@ export type CreateSyncedBlockRequest = {
|
|
|
26
26
|
blockAri: string;
|
|
27
27
|
blockInstanceId: string;
|
|
28
28
|
content: string;
|
|
29
|
-
product:
|
|
29
|
+
product: SyncBlockProduct;
|
|
30
30
|
sourceAri: string;
|
|
31
31
|
};
|
|
32
32
|
export declare class BlockError extends Error {
|
|
@@ -2,6 +2,7 @@ import type { ADFEntity } from '@atlaskit/adf-utils/types';
|
|
|
2
2
|
import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
|
|
3
3
|
export type BlockInstanceId = string;
|
|
4
4
|
export type ResourceId = string;
|
|
5
|
+
export type SyncBlockProduct = 'confluence-page' | 'jira-work-item';
|
|
5
6
|
export type SyncBlockAttrs = {
|
|
6
7
|
localId: BlockInstanceId;
|
|
7
8
|
resourceId: ResourceId;
|
|
@@ -22,8 +23,9 @@ export interface SyncBlockData {
|
|
|
22
23
|
createdAt?: string;
|
|
23
24
|
createdBy?: string;
|
|
24
25
|
isSynced?: boolean;
|
|
26
|
+
product?: SyncBlockProduct;
|
|
25
27
|
resourceId: ResourceId;
|
|
26
|
-
|
|
28
|
+
sourceAri?: string;
|
|
27
29
|
sourceTitle?: string;
|
|
28
30
|
sourceURL?: string;
|
|
29
31
|
updatedAt?: string;
|
|
@@ -4,11 +4,11 @@ export type { SyncBlockData, SyncBlockNode } from './common/types';
|
|
|
4
4
|
export { useFetchSyncBlockData, type UseFetchSyncBlockDataResult, } from './hooks/useFetchSyncBlockData';
|
|
5
5
|
export { useFetchSyncBlockTitle } from './hooks/useFetchSyncBlockTitle';
|
|
6
6
|
export { useHandleContentChanges } from './hooks/useHandleContentChanges';
|
|
7
|
-
export { blockResourceIdFromSourceAndLocalId, getLocalIdFromResourceId } from './providers/block-service/ari';
|
|
7
|
+
export { blockResourceIdFromSourceAndLocalId, getLocalIdFromResourceId, } from './providers/block-service/ari';
|
|
8
8
|
export { useMemoizedBlockServiceAPIProviders } from './providers/block-service/blockServiceAPI';
|
|
9
9
|
export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders, } from './providers/confluence/confluenceContentAPI';
|
|
10
10
|
export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvider, } from './providers/syncBlockProvider';
|
|
11
|
-
export type { ADFFetchProvider, ADFWriteProvider, SyncBlockDataProvider, SyncBlockInstance, } from './providers/types';
|
|
11
|
+
export type { ADFFetchProvider, ADFWriteProvider, SyncBlockDataProvider, SyncBlockInstance, MediaEmojiProviderOptions, SyncedBlockRendererProviderOptions, SyncBlockRendererProviderCreator, } from './providers/types';
|
|
12
12
|
export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
|
|
13
13
|
export { SyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
|
|
14
14
|
export { getConfluencePageAri, getLocalIdFromAri, getPageARIFromResourceId, getPageIdAndTypeFromAri, resourceIdFromSourceAndLocalId, } from './utils/ari';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
|
|
2
2
|
import { type SyncBlockData, type SyncBlockNode } from '../common/types';
|
|
3
|
-
import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockSourceInfo, type SyncedBlockRendererProviderOptions, type WriteSyncBlockResult } from '../providers/types';
|
|
3
|
+
import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockParentInfo, type SyncBlockSourceInfo, type SyncedBlockRendererProviderOptions, type WriteSyncBlockResult } from '../providers/types';
|
|
4
4
|
export declare class SyncBlockProvider extends SyncBlockDataProvider {
|
|
5
5
|
name: string;
|
|
6
6
|
private fetchProvider;
|
|
@@ -79,5 +79,14 @@ export declare class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
79
79
|
* @returns The synced block renderer provider options
|
|
80
80
|
*/
|
|
81
81
|
getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
|
|
82
|
+
/**
|
|
83
|
+
* Retrieve the parent info for the sync block
|
|
84
|
+
*
|
|
85
|
+
* @param resourceId
|
|
86
|
+
* @param syncBlockInstance
|
|
87
|
+
*
|
|
88
|
+
* @returns The parent info for the sync block
|
|
89
|
+
*/
|
|
90
|
+
retrieveSyncBlockParentInfo(syncBlockInstance: SyncBlockInstance | undefined): SyncBlockParentInfo | undefined;
|
|
82
91
|
}
|
|
83
92
|
export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions) => SyncBlockProvider;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaProvider, ProfilecardProvider } from '@atlaskit/editor-common/provider-factory';
|
|
2
2
|
import type { EmojiProvider } from '@atlaskit/emoji';
|
|
3
|
+
import type { MentionProvider } from '@atlaskit/mention/types';
|
|
3
4
|
import { NodeDataProvider } from '@atlaskit/node-data-provider';
|
|
4
|
-
import type {
|
|
5
|
+
import type { TaskDecisionProvider } from '@atlaskit/task-decision/types';
|
|
6
|
+
import type { SyncBlockData, ResourceId, SyncBlockError, SyncBlockNode, SyncBlockProduct } from '../common/types';
|
|
5
7
|
/**
|
|
6
8
|
* The instance of a sync block, containing its data and metadata.
|
|
7
9
|
* Mainly used for representing the state of a sync block after fetching from a data provider.
|
|
@@ -21,6 +23,10 @@ export type SyncBlockSourceInfo = {
|
|
|
21
23
|
title?: string;
|
|
22
24
|
url?: string;
|
|
23
25
|
};
|
|
26
|
+
export type SyncBlockParentInfo = {
|
|
27
|
+
contentId: string;
|
|
28
|
+
contentProduct: SyncBlockProduct;
|
|
29
|
+
};
|
|
24
30
|
export type WriteSyncBlockResult = {
|
|
25
31
|
error?: string;
|
|
26
32
|
resourceId?: string;
|
|
@@ -40,15 +46,20 @@ export interface ADFWriteProvider {
|
|
|
40
46
|
}
|
|
41
47
|
export type MediaEmojiProviderOptions = {
|
|
42
48
|
contentId: string;
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
contentProduct: SyncBlockProduct;
|
|
50
|
+
};
|
|
51
|
+
export type SyncedBlockRendererDataProviders = {
|
|
52
|
+
mentionProvider?: Promise<MentionProvider>;
|
|
53
|
+
profilecardProvider?: Promise<ProfilecardProvider>;
|
|
54
|
+
taskDecisionProvider?: Promise<TaskDecisionProvider>;
|
|
55
|
+
};
|
|
56
|
+
export type SyncBlockRendererProviderCreator = {
|
|
57
|
+
createEmojiProvider: ((options: MediaEmojiProviderOptions) => Promise<EmojiProvider>) | undefined;
|
|
58
|
+
createMediaProvider: ((options: MediaEmojiProviderOptions) => Promise<MediaProvider>) | undefined;
|
|
45
59
|
};
|
|
46
60
|
export type SyncedBlockRendererProviderOptions = {
|
|
47
61
|
parentDataProviders?: SyncedBlockRendererDataProviders;
|
|
48
|
-
providerCreator?:
|
|
49
|
-
createEmojiProvider: ((options: MediaEmojiProviderOptions) => Promise<EmojiProvider>) | undefined;
|
|
50
|
-
createMediaProvider: ((options: MediaEmojiProviderOptions) => Promise<MediaProvider>) | undefined;
|
|
51
|
-
};
|
|
62
|
+
providerCreator?: SyncBlockRendererProviderCreator;
|
|
52
63
|
};
|
|
53
64
|
export declare abstract class SyncBlockDataProvider extends NodeDataProvider<SyncBlockNode, SyncBlockInstance> {
|
|
54
65
|
abstract writeNodesData(nodes: SyncBlockNode[], data: SyncBlockData[]): Promise<Array<WriteSyncBlockResult>>;
|
|
@@ -56,6 +67,7 @@ export declare abstract class SyncBlockDataProvider extends NodeDataProvider<Syn
|
|
|
56
67
|
abstract getSourceId(): ResourceId;
|
|
57
68
|
abstract retrieveSyncBlockSourceInfo(node: SyncBlockNode): Promise<SyncBlockSourceInfo | undefined>;
|
|
58
69
|
abstract getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
|
|
70
|
+
abstract retrieveSyncBlockParentInfo(syncBlockInstance: SyncBlockInstance | undefined): SyncBlockParentInfo | undefined;
|
|
59
71
|
/**
|
|
60
72
|
* Generates a resource ID from a source ID and local ID.
|
|
61
73
|
* @param sourceId - The source document ID (e.g., page ARI)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import type { SyncBlockProduct } from '../common/types';
|
|
2
2
|
export type BlockContentResponse = {
|
|
3
3
|
blockAri: string;
|
|
4
4
|
blockInstanceId: string;
|
|
@@ -7,7 +7,7 @@ export type BlockContentResponse = {
|
|
|
7
7
|
createdAt: number;
|
|
8
8
|
createdBy: string;
|
|
9
9
|
isSynced: boolean;
|
|
10
|
-
product:
|
|
10
|
+
product: SyncBlockProduct;
|
|
11
11
|
sourceAri: string;
|
|
12
12
|
status: 'active' | 'deleted';
|
|
13
13
|
version: number;
|
|
@@ -26,7 +26,7 @@ export type CreateSyncedBlockRequest = {
|
|
|
26
26
|
blockAri: string;
|
|
27
27
|
blockInstanceId: string;
|
|
28
28
|
content: string;
|
|
29
|
-
product:
|
|
29
|
+
product: SyncBlockProduct;
|
|
30
30
|
sourceAri: string;
|
|
31
31
|
};
|
|
32
32
|
export declare class BlockError extends Error {
|
package/package.json
CHANGED
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@atlaskit/adf-schema": "^51.4.0",
|
|
28
28
|
"@atlaskit/adf-utils": "^19.26.0",
|
|
29
|
-
"@atlaskit/css": "^0.
|
|
29
|
+
"@atlaskit/css": "^0.16.0",
|
|
30
30
|
"@atlaskit/editor-json-transformer": "^8.31.0",
|
|
31
31
|
"@atlaskit/editor-prosemirror": "7.0.0",
|
|
32
32
|
"@atlaskit/node-data-provider": "^7.5.0",
|
|
33
|
-
"@atlaskit/primitives": "^16.
|
|
34
|
-
"@atlaskit/tokens": "^8.
|
|
33
|
+
"@atlaskit/primitives": "^16.2.0",
|
|
34
|
+
"@atlaskit/tokens": "^8.1.0",
|
|
35
35
|
"@babel/runtime": "^7.0.0",
|
|
36
36
|
"@compiled/react": "^0.18.6",
|
|
37
37
|
"uuid": "^3.1.0"
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
}
|
|
84
84
|
},
|
|
85
85
|
"name": "@atlaskit/editor-synced-block-provider",
|
|
86
|
-
"version": "2.10.
|
|
86
|
+
"version": "2.10.2",
|
|
87
87
|
"description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
|
|
88
88
|
"author": "Atlassian Pty Ltd",
|
|
89
89
|
"license": "Apache-2.0",
|