@atlaskit/editor-synced-block-provider 2.13.1 → 2.14.0

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 CHANGED
@@ -1,5 +1,12 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 2.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`8f3a22c66ae60`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8f3a22c66ae60) -
8
+ Update to read from ssr cache
9
+
3
10
  ## 2.13.1
4
11
 
5
12
  ### Patch Changes
@@ -14,7 +14,15 @@ var _types = require("../common/types");
14
14
  var _errorHandling = require("../utils/errorHandling");
15
15
  var _utils = require("../utils/utils");
16
16
  var useFetchSyncBlockData = exports.useFetchSyncBlockData = function useFetchSyncBlockData(manager, resourceId, localId, fireAnalyticsEvent) {
17
- var _useState = (0, _react.useState)(null),
17
+ var _useState = (0, _react.useState)(function () {
18
+ if (resourceId) {
19
+ var _manager$referenceMan;
20
+ var _ref = (manager === null || manager === void 0 || (_manager$referenceMan = manager.referenceManager) === null || _manager$referenceMan === void 0 ? void 0 : _manager$referenceMan.getInitialSyncBlockData(resourceId)) || {},
21
+ data = _ref.data;
22
+ return data || null;
23
+ }
24
+ return null;
25
+ }),
18
26
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
19
27
  syncBlockInstance = _useState2[0],
20
28
  setSyncBlockInstance = _useState2[1];
@@ -73,7 +73,7 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
73
73
  }, {
74
74
  key: "nodeDataKey",
75
75
  value: function nodeDataKey(node) {
76
- return node.attrs.localId;
76
+ return node.attrs.resourceId;
77
77
  }
78
78
 
79
79
  /**
@@ -298,8 +298,13 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
298
298
  }
299
299
  }]);
300
300
  }(_types2.SyncBlockDataProvider);
301
- var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions) {
301
+ var useMemoizedSyncedBlockProvider = exports.useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions, getSSRData) {
302
302
  return (0, _react.useMemo)(function () {
303
- return new SyncBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions);
304
- }, [fetchProvider, writeProvider, sourceId, providerOptions]);
303
+ var syncBlockProvider = new SyncBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions);
304
+ var ssrData = getSSRData ? getSSRData() : undefined;
305
+ if (ssrData) {
306
+ syncBlockProvider.setSSRData(ssrData);
307
+ }
308
+ return syncBlockProvider;
309
+ }, [fetchProvider, writeProvider, sourceId, providerOptions, getSSRData]);
305
310
  };
@@ -52,6 +52,13 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
52
52
  value: function updateFireAnalyticsEvent(fireAnalyticsEvent) {
53
53
  this.fireAnalyticsEvent = fireAnalyticsEvent;
54
54
  }
55
+ }, {
56
+ key: "getInitialSyncBlockData",
57
+ value: function getInitialSyncBlockData(resourceId) {
58
+ var _this$dataProvider;
59
+ var syncBlockNode = (0, _utils.createSyncBlockNode)('', resourceId);
60
+ return this.getFromCache(resourceId) || ((_this$dataProvider = this.dataProvider) === null || _this$dataProvider === void 0 || (_this$dataProvider = _this$dataProvider.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.data);
61
+ }
55
62
 
56
63
  /**
57
64
  * Refreshes the subscriptions for all sync blocks.
@@ -315,17 +322,20 @@ var ReferenceSyncBlockStoreManager = exports.ReferenceSyncBlockStoreManager = /*
315
322
  }, {
316
323
  key: "subscribeToSyncBlock",
317
324
  value: function subscribeToSyncBlock(resourceId, localId, callback) {
318
- var _this3 = this;
325
+ var _this$dataProvider2,
326
+ _this3 = this;
319
327
  // add to subscriptions map
320
328
  var resourceSubscriptions = this.subscriptions.get(resourceId) || {};
321
329
  this.subscriptions.set(resourceId, _objectSpread(_objectSpread({}, resourceSubscriptions), {}, (0, _defineProperty2.default)({}, localId, callback)));
330
+ var syncBlockNode = (0, _utils.createSyncBlockNode)(localId, resourceId);
322
331
 
323
332
  // call the callback immediately if we have cached data
324
- var cachedData = this.getFromCache(resourceId);
333
+ // prefer cache from store manager first, should update data provider to use the same cache
334
+ var cachedData = this.getFromCache(resourceId) || ((_this$dataProvider2 = this.dataProvider) === null || _this$dataProvider2 === void 0 || (_this$dataProvider2 = _this$dataProvider2.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider2 === void 0 ? void 0 : _this$dataProvider2.data);
325
335
  if (cachedData) {
326
336
  callback(cachedData);
327
337
  } else {
328
- this.fetchSyncBlocksData([(0, _utils.createSyncBlockNode)(localId, resourceId)]).catch(function (error) {
338
+ this.fetchSyncBlocksData([syncBlockNode]).catch(function (error) {
329
339
  var _this3$fireAnalyticsE;
330
340
  (0, _monitoring.logException)(error, {
331
341
  location: 'editor-synced-block-provider/referenceSyncBlockStoreManager'
@@ -117,7 +117,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
117
117
  case 10:
118
118
  writeResults = _context.sent;
119
119
  if (!writeResults.every(function (result) {
120
- return !result.error;
120
+ return result.resourceId !== undefined;
121
121
  })) {
122
122
  _context.next = 15;
123
123
  break;
@@ -125,7 +125,7 @@ var SourceSyncBlockStoreManager = exports.SourceSyncBlockStoreManager = /*#__PUR
125
125
  return _context.abrupt("return", true);
126
126
  case 15:
127
127
  writeResults.filter(function (result) {
128
- return result.error;
128
+ return result.resourceId === undefined;
129
129
  }).forEach(function (result) {
130
130
  var _this2$fireAnalyticsE;
131
131
  (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, (0, _errorHandling.updateErrorPayload)(result.error || 'Failed to write data'));
@@ -4,7 +4,16 @@ import { SyncBlockError } from '../common/types';
4
4
  import { fetchErrorPayload } from '../utils/errorHandling';
5
5
  import { createSyncBlockNode } from '../utils/utils';
6
6
  export const useFetchSyncBlockData = (manager, resourceId, localId, fireAnalyticsEvent) => {
7
- const [syncBlockInstance, setSyncBlockInstance] = useState(null);
7
+ const [syncBlockInstance, setSyncBlockInstance] = useState(() => {
8
+ if (resourceId) {
9
+ var _manager$referenceMan;
10
+ const {
11
+ data
12
+ } = (manager === null || manager === void 0 ? void 0 : (_manager$referenceMan = manager.referenceManager) === null || _manager$referenceMan === void 0 ? void 0 : _manager$referenceMan.getInitialSyncBlockData(resourceId)) || {};
13
+ return data || null;
14
+ }
15
+ return null;
16
+ });
8
17
  const [isLoading, setIsLoading] = useState(true);
9
18
  const reloadData = useCallback(async () => {
10
19
  if (isLoading) {
@@ -46,7 +46,7 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
46
46
  * @returns The data key
47
47
  */
48
48
  nodeDataKey(node) {
49
- return node.attrs.localId;
49
+ return node.attrs.resourceId;
50
50
  }
51
51
 
52
52
  /**
@@ -201,8 +201,13 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
201
201
  }
202
202
  }
203
203
  }
204
- export const useMemoizedSyncedBlockProvider = (fetchProvider, writeProvider, sourceId, providerOptions) => {
204
+ export const useMemoizedSyncedBlockProvider = (fetchProvider, writeProvider, sourceId, providerOptions, getSSRData) => {
205
205
  return useMemo(() => {
206
- return new SyncBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions);
207
- }, [fetchProvider, writeProvider, sourceId, providerOptions]);
206
+ const syncBlockProvider = new SyncBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions);
207
+ const ssrData = getSSRData ? getSSRData() : undefined;
208
+ if (ssrData) {
209
+ syncBlockProvider.setSSRData(ssrData);
210
+ }
211
+ return syncBlockProvider;
212
+ }, [fetchProvider, writeProvider, sourceId, providerOptions, getSSRData]);
208
213
  };
@@ -31,6 +31,11 @@ export class ReferenceSyncBlockStoreManager {
31
31
  updateFireAnalyticsEvent(fireAnalyticsEvent) {
32
32
  this.fireAnalyticsEvent = fireAnalyticsEvent;
33
33
  }
34
+ getInitialSyncBlockData(resourceId) {
35
+ var _this$dataProvider, _this$dataProvider$ge;
36
+ const syncBlockNode = createSyncBlockNode('', resourceId);
37
+ return this.getFromCache(resourceId) || ((_this$dataProvider = this.dataProvider) === null || _this$dataProvider === void 0 ? void 0 : (_this$dataProvider$ge = _this$dataProvider.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider$ge === void 0 ? void 0 : _this$dataProvider$ge.data);
38
+ }
34
39
 
35
40
  /**
36
41
  * Refreshes the subscriptions for all sync blocks.
@@ -200,19 +205,22 @@ export class ReferenceSyncBlockStoreManager {
200
205
  this.providerFactories.delete(resourceId);
201
206
  }
202
207
  subscribeToSyncBlock(resourceId, localId, callback) {
208
+ var _this$dataProvider2, _this$dataProvider2$g;
203
209
  // add to subscriptions map
204
210
  const resourceSubscriptions = this.subscriptions.get(resourceId) || {};
205
211
  this.subscriptions.set(resourceId, {
206
212
  ...resourceSubscriptions,
207
213
  [localId]: callback
208
214
  });
215
+ const syncBlockNode = createSyncBlockNode(localId, resourceId);
209
216
 
210
217
  // call the callback immediately if we have cached data
211
- const cachedData = this.getFromCache(resourceId);
218
+ // prefer cache from store manager first, should update data provider to use the same cache
219
+ const cachedData = this.getFromCache(resourceId) || ((_this$dataProvider2 = this.dataProvider) === null || _this$dataProvider2 === void 0 ? void 0 : (_this$dataProvider2$g = _this$dataProvider2.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider2$g === void 0 ? void 0 : _this$dataProvider2$g.data);
212
220
  if (cachedData) {
213
221
  callback(cachedData);
214
222
  } else {
215
- this.fetchSyncBlocksData([createSyncBlockNode(localId, resourceId)]).catch(error => {
223
+ this.fetchSyncBlocksData([syncBlockNode]).catch(error => {
216
224
  var _this$fireAnalyticsEv7;
217
225
  logException(error, {
218
226
  location: 'editor-synced-block-provider/referenceSyncBlockStoreManager'
@@ -83,10 +83,10 @@ export class SourceSyncBlockStoreManager {
83
83
  return Promise.resolve(true);
84
84
  }
85
85
  const writeResults = await this.dataProvider.writeNodesData(bodiedSyncBlockNodes, bodiedSyncBlockData);
86
- if (writeResults.every(result => !result.error)) {
86
+ if (writeResults.every(result => result.resourceId !== undefined)) {
87
87
  return true;
88
88
  } else {
89
- writeResults.filter(result => result.error).forEach(result => {
89
+ writeResults.filter(result => result.resourceId === undefined).forEach(result => {
90
90
  var _this$fireAnalyticsEv2;
91
91
  (_this$fireAnalyticsEv2 = this.fireAnalyticsEvent) === null || _this$fireAnalyticsEv2 === void 0 ? void 0 : _this$fireAnalyticsEv2.call(this, updateErrorPayload(result.error || 'Failed to write data'));
92
92
  });
@@ -7,7 +7,15 @@ import { SyncBlockError } from '../common/types';
7
7
  import { fetchErrorPayload } from '../utils/errorHandling';
8
8
  import { createSyncBlockNode } from '../utils/utils';
9
9
  export var useFetchSyncBlockData = function useFetchSyncBlockData(manager, resourceId, localId, fireAnalyticsEvent) {
10
- var _useState = useState(null),
10
+ var _useState = useState(function () {
11
+ if (resourceId) {
12
+ var _manager$referenceMan;
13
+ var _ref = (manager === null || manager === void 0 || (_manager$referenceMan = manager.referenceManager) === null || _manager$referenceMan === void 0 ? void 0 : _manager$referenceMan.getInitialSyncBlockData(resourceId)) || {},
14
+ data = _ref.data;
15
+ return data || null;
16
+ }
17
+ return null;
18
+ }),
11
19
  _useState2 = _slicedToArray(_useState, 2),
12
20
  syncBlockInstance = _useState2[0],
13
21
  setSyncBlockInstance = _useState2[1];
@@ -66,7 +66,7 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
66
66
  }, {
67
67
  key: "nodeDataKey",
68
68
  value: function nodeDataKey(node) {
69
- return node.attrs.localId;
69
+ return node.attrs.resourceId;
70
70
  }
71
71
 
72
72
  /**
@@ -291,8 +291,13 @@ export var SyncBlockProvider = /*#__PURE__*/function (_SyncBlockDataProvide) {
291
291
  }
292
292
  }]);
293
293
  }(SyncBlockDataProvider);
294
- export var useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions) {
294
+ export var useMemoizedSyncedBlockProvider = function useMemoizedSyncedBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions, getSSRData) {
295
295
  return useMemo(function () {
296
- return new SyncBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions);
297
- }, [fetchProvider, writeProvider, sourceId, providerOptions]);
296
+ var syncBlockProvider = new SyncBlockProvider(fetchProvider, writeProvider, sourceId, providerOptions);
297
+ var ssrData = getSSRData ? getSSRData() : undefined;
298
+ if (ssrData) {
299
+ syncBlockProvider.setSSRData(ssrData);
300
+ }
301
+ return syncBlockProvider;
302
+ }, [fetchProvider, writeProvider, sourceId, providerOptions, getSSRData]);
298
303
  };
@@ -46,6 +46,13 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
46
46
  value: function updateFireAnalyticsEvent(fireAnalyticsEvent) {
47
47
  this.fireAnalyticsEvent = fireAnalyticsEvent;
48
48
  }
49
+ }, {
50
+ key: "getInitialSyncBlockData",
51
+ value: function getInitialSyncBlockData(resourceId) {
52
+ var _this$dataProvider;
53
+ var syncBlockNode = createSyncBlockNode('', resourceId);
54
+ return this.getFromCache(resourceId) || ((_this$dataProvider = this.dataProvider) === null || _this$dataProvider === void 0 || (_this$dataProvider = _this$dataProvider.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.data);
55
+ }
49
56
 
50
57
  /**
51
58
  * Refreshes the subscriptions for all sync blocks.
@@ -309,17 +316,20 @@ export var ReferenceSyncBlockStoreManager = /*#__PURE__*/function () {
309
316
  }, {
310
317
  key: "subscribeToSyncBlock",
311
318
  value: function subscribeToSyncBlock(resourceId, localId, callback) {
312
- var _this3 = this;
319
+ var _this$dataProvider2,
320
+ _this3 = this;
313
321
  // add to subscriptions map
314
322
  var resourceSubscriptions = this.subscriptions.get(resourceId) || {};
315
323
  this.subscriptions.set(resourceId, _objectSpread(_objectSpread({}, resourceSubscriptions), {}, _defineProperty({}, localId, callback)));
324
+ var syncBlockNode = createSyncBlockNode(localId, resourceId);
316
325
 
317
326
  // call the callback immediately if we have cached data
318
- var cachedData = this.getFromCache(resourceId);
327
+ // prefer cache from store manager first, should update data provider to use the same cache
328
+ var cachedData = this.getFromCache(resourceId) || ((_this$dataProvider2 = this.dataProvider) === null || _this$dataProvider2 === void 0 || (_this$dataProvider2 = _this$dataProvider2.getNodeDataFromCache(syncBlockNode)) === null || _this$dataProvider2 === void 0 ? void 0 : _this$dataProvider2.data);
319
329
  if (cachedData) {
320
330
  callback(cachedData);
321
331
  } else {
322
- this.fetchSyncBlocksData([createSyncBlockNode(localId, resourceId)]).catch(function (error) {
332
+ this.fetchSyncBlocksData([syncBlockNode]).catch(function (error) {
323
333
  var _this3$fireAnalyticsE;
324
334
  logException(error, {
325
335
  location: 'editor-synced-block-provider/referenceSyncBlockStoreManager'
@@ -110,7 +110,7 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
110
110
  case 10:
111
111
  writeResults = _context.sent;
112
112
  if (!writeResults.every(function (result) {
113
- return !result.error;
113
+ return result.resourceId !== undefined;
114
114
  })) {
115
115
  _context.next = 15;
116
116
  break;
@@ -118,7 +118,7 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
118
118
  return _context.abrupt("return", true);
119
119
  case 15:
120
120
  writeResults.filter(function (result) {
121
- return result.error;
121
+ return result.resourceId === undefined;
122
122
  }).forEach(function (result) {
123
123
  var _this2$fireAnalyticsE;
124
124
  (_this2$fireAnalyticsE = _this2.fireAnalyticsEvent) === null || _this2$fireAnalyticsE === void 0 || _this2$fireAnalyticsE.call(_this2, updateErrorPayload(result.error || 'Failed to write data'));
@@ -95,4 +95,4 @@ export declare class SyncBlockProvider extends SyncBlockDataProvider {
95
95
  */
96
96
  retrieveSyncBlockParentInfo(sourceAri: string, sourceProduct: SyncBlockProduct): SyncBlockParentInfo | undefined;
97
97
  }
98
- export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions) => SyncBlockProvider;
98
+ export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions, getSSRData?: () => Record<string, SyncBlockInstance> | undefined) => SyncBlockProvider;
@@ -15,6 +15,7 @@ export declare class ReferenceSyncBlockStoreManager {
15
15
  constructor(dataProvider?: SyncBlockDataProvider, fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void);
16
16
  generateResourceIdForReference(sourceId: ResourceId): ResourceId;
17
17
  updateFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
18
+ getInitialSyncBlockData(resourceId: ResourceId): SyncBlockInstance | undefined;
18
19
  /**
19
20
  * Refreshes the subscriptions for all sync blocks.
20
21
  * @returns {Promise<void>}
@@ -95,4 +95,4 @@ export declare class SyncBlockProvider extends SyncBlockDataProvider {
95
95
  */
96
96
  retrieveSyncBlockParentInfo(sourceAri: string, sourceProduct: SyncBlockProduct): SyncBlockParentInfo | undefined;
97
97
  }
98
- export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions) => SyncBlockProvider;
98
+ export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions, getSSRData?: () => Record<string, SyncBlockInstance> | undefined) => SyncBlockProvider;
@@ -15,6 +15,7 @@ export declare class ReferenceSyncBlockStoreManager {
15
15
  constructor(dataProvider?: SyncBlockDataProvider, fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void);
16
16
  generateResourceIdForReference(sourceId: ResourceId): ResourceId;
17
17
  updateFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
18
+ getInitialSyncBlockData(resourceId: ResourceId): SyncBlockInstance | undefined;
18
19
  /**
19
20
  * Refreshes the subscriptions for all sync blocks.
20
21
  * @returns {Promise<void>}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "category": "Layout and structure"
7
7
  }
8
8
  },
9
- "repository": "https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo",
9
+ "repository": "https://bitbucket.org/atlassian/atlassian-frontend-monorepo",
10
10
  "main": "dist/cjs/index.js",
11
11
  "module": "dist/esm/index.js",
12
12
  "module:es2019": "dist/es2019/index.js",
@@ -34,7 +34,7 @@
34
34
  "uuid": "^3.1.0"
35
35
  },
36
36
  "peerDependencies": {
37
- "@atlaskit/editor-common": "^110.40.0",
37
+ "@atlaskit/editor-common": "^110.41.0",
38
38
  "react": "^18.2.0"
39
39
  },
40
40
  "devDependencies": {
@@ -77,7 +77,7 @@
77
77
  }
78
78
  },
79
79
  "name": "@atlaskit/editor-synced-block-provider",
80
- "version": "2.13.1",
80
+ "version": "2.14.0",
81
81
  "description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
82
82
  "author": "Atlassian Pty Ltd",
83
83
  "license": "Apache-2.0",