@atlaskit/editor-synced-block-provider 3.14.2 → 3.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/clients/block-service/blockService.js +12 -9
  3. package/dist/cjs/providers/block-service/blockServiceAPI.js +28 -18
  4. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +61 -23
  5. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +27 -5
  6. package/dist/cjs/store-manager/syncBlockStoreManager.js +53 -22
  7. package/dist/cjs/utils/experienceTracking.js +18 -1
  8. package/dist/es2019/clients/block-service/blockService.js +5 -1
  9. package/dist/es2019/providers/block-service/blockServiceAPI.js +17 -7
  10. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +68 -34
  11. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +27 -6
  12. package/dist/es2019/store-manager/syncBlockStoreManager.js +36 -2
  13. package/dist/es2019/utils/experienceTracking.js +17 -0
  14. package/dist/esm/clients/block-service/blockService.js +12 -9
  15. package/dist/esm/providers/block-service/blockServiceAPI.js +28 -18
  16. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +61 -23
  17. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +28 -6
  18. package/dist/esm/store-manager/syncBlockStoreManager.js +53 -22
  19. package/dist/esm/utils/experienceTracking.js +17 -0
  20. package/dist/types/clients/block-service/blockService.d.ts +3 -2
  21. package/dist/types/providers/block-service/blockServiceAPI.d.ts +5 -2
  22. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +9 -0
  23. package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +1 -0
  24. package/dist/types/store-manager/syncBlockStoreManager.d.ts +2 -0
  25. package/dist/types/utils/experienceTracking.d.ts +8 -0
  26. package/dist/types-ts4.5/clients/block-service/blockService.d.ts +3 -2
  27. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +5 -2
  28. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +9 -0
  29. package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +1 -0
  30. package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +2 -0
  31. package/dist/types-ts4.5/utils/experienceTracking.d.ts +8 -0
  32. package/package.json +2 -2
@@ -9,7 +9,7 @@ import { logException } from '@atlaskit/editor-common/monitoring';
9
9
  import { fg } from '@atlaskit/platform-feature-flags';
10
10
  import { SyncBlockError } from '../common/types';
11
11
  import { updateErrorPayload, createErrorPayload, deleteErrorPayload, updateCacheErrorPayload, getSourceInfoErrorPayload, updateSuccessPayload, createSuccessPayload, deleteSuccessPayload, fetchReferencesErrorPayload } from '../utils/errorHandling';
12
- import { getCreateSourceExperience, getDeleteSourceExperience, getSaveSourceExperience } from '../utils/experienceTracking';
12
+ import { getCreateSourceExperience, getDeleteSourceExperience, getSaveSourceExperience, getFetchSourceInfoExperience } from '../utils/experienceTracking';
13
13
  import { convertSyncBlockPMNodeToSyncBlockData } from '../utils/utils';
14
14
  // A store manager responsible for the lifecycle and state management of source sync blocks in an editor instance.
15
15
  // Designed to manage local in-memory state and synchronize with an external data provider.
@@ -36,6 +36,7 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
36
36
  this.createExperience = getCreateSourceExperience(fireAnalyticsEvent);
37
37
  this.saveExperience = getSaveSourceExperience(fireAnalyticsEvent);
38
38
  this.deleteExperience = getDeleteSourceExperience(fireAnalyticsEvent);
39
+ this.fetchSourceInfoExperience = getFetchSourceInfoExperience(fireAnalyticsEvent);
39
40
  }
40
41
  }, {
41
42
  key: "isSourceBlock",
@@ -534,11 +535,29 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
534
535
  }, {
535
536
  key: "getSyncBlockSourceInfo",
536
537
  value: function getSyncBlockSourceInfo(localId) {
538
+ var _this6 = this;
537
539
  try {
538
540
  if (!this.dataProvider) {
539
541
  throw new Error('Data provider not set');
540
542
  }
541
- return this.dataProvider.fetchSyncBlockSourceInfo(localId, undefined, undefined, this.fireAnalyticsEvent);
543
+ if (fg('platform_synced_block_dogfooding')) {
544
+ var _this$fetchSourceInfo;
545
+ (_this$fetchSourceInfo = this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo === void 0 || _this$fetchSourceInfo.start();
546
+ }
547
+ return this.dataProvider.fetchSyncBlockSourceInfo(localId, undefined, undefined, this.fireAnalyticsEvent).then(function (sourceInfo) {
548
+ if (fg('platform_synced_block_dogfooding')) {
549
+ if (!sourceInfo) {
550
+ var _this6$fetchSourceInf;
551
+ (_this6$fetchSourceInf = _this6.fetchSourceInfoExperience) === null || _this6$fetchSourceInf === void 0 || _this6$fetchSourceInf.failure({
552
+ reason: "No source info returned"
553
+ });
554
+ } else {
555
+ var _this6$fetchSourceInf2;
556
+ (_this6$fetchSourceInf2 = _this6.fetchSourceInfoExperience) === null || _this6$fetchSourceInf2 === void 0 || _this6$fetchSourceInf2.success();
557
+ }
558
+ }
559
+ return sourceInfo;
560
+ });
542
561
  } catch (error) {
543
562
  var _this$fireAnalyticsEv6;
544
563
  logException(error, {
@@ -570,20 +589,23 @@ export var SourceSyncBlockStoreManager = /*#__PURE__*/function () {
570
589
  }, {
571
590
  key: "destroy",
572
591
  value: function destroy() {
573
- var _this$saveExperience4, _this$createExperienc2, _this$deleteExperienc4;
592
+ var _this$saveExperience4, _this$createExperienc2, _this$deleteExperienc4, _this$fetchSourceInfo2;
574
593
  this.syncBlockCache.clear();
575
594
  this.confirmationCallback = undefined;
576
595
  this.pendingResourceId = undefined;
577
596
  this.creationCallback = undefined;
578
597
  this.dataProvider = undefined;
579
598
  (_this$saveExperience4 = this.saveExperience) === null || _this$saveExperience4 === void 0 || _this$saveExperience4.abort({
580
- reason: 'editor-destroyed'
599
+ reason: 'editorDestroyed'
581
600
  });
582
601
  (_this$createExperienc2 = this.createExperience) === null || _this$createExperienc2 === void 0 || _this$createExperienc2.abort({
583
- reason: 'editor-destroyed'
602
+ reason: 'editorDestroyed'
584
603
  });
585
604
  (_this$deleteExperienc4 = this.deleteExperience) === null || _this$deleteExperienc4 === void 0 || _this$deleteExperienc4.abort({
586
- reason: 'editor-destroyed'
605
+ reason: 'editorDestroyed'
606
+ });
607
+ (_this$fetchSourceInfo2 = this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo2 === void 0 || _this$fetchSourceInfo2.abort({
608
+ reason: 'editorDestroyed'
587
609
  });
588
610
  this.clearPendingDeletion();
589
611
  }
@@ -7,9 +7,11 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
7
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; }
8
8
  import { useMemo } from 'react';
9
9
  import { logException } from '@atlaskit/editor-common/monitoring';
10
+ import { fg } from '@atlaskit/platform-feature-flags';
10
11
  import { getProductFromSourceAri } from '../clients/block-service/ari';
11
12
  import { SyncBlockError } from '../common/types';
12
13
  import { fetchReferencesErrorPayload } from '../utils/errorHandling';
14
+ import { getFetchReferencesExperience, getFetchSourceInfoExperience } from '../utils/experienceTracking';
13
15
  import { ReferenceSyncBlockStoreManager } from './referenceSyncBlockStoreManager';
14
16
  import { SourceSyncBlockStoreManager } from './sourceSyncBlockStoreManager';
15
17
 
@@ -32,7 +34,7 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
32
34
  value: function () {
33
35
  var _fetchReferencesSourceInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(resourceId, blockInstanceId, isSourceSyncBlock) {
34
36
  var _this = this;
35
- var _response$references, response, sourceInfoPromises, sourceInfos, sourceSyncBlockData, _this$fireAnalyticsEv;
37
+ var _this$fetchReferences, _response$references, _this$fetchReferences5, response, _this$fetchReferences2, _this$fetchReferences3, _this$fetchReferences4, sourceInfoPromises, sourceInfos, sourceSyncBlockData, _this$fireAnalyticsEv;
36
38
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
37
39
  while (1) switch (_context2.prev = _context2.next) {
38
40
  case 0:
@@ -43,51 +45,69 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
43
45
  }
44
46
  throw new Error('Data provider not set');
45
47
  case 3:
46
- _context2.next = 5;
48
+ (_this$fetchReferences = this.fetchReferencesExperience) === null || _this$fetchReferences === void 0 || _this$fetchReferences.start();
49
+ _context2.next = 6;
47
50
  return this.dataProvider.fetchReferences(resourceId, isSourceSyncBlock);
48
- case 5:
51
+ case 6:
49
52
  response = _context2.sent;
50
53
  if (!response.error) {
51
- _context2.next = 8;
54
+ _context2.next = 10;
52
55
  break;
53
56
  }
57
+ (_this$fetchReferences2 = this.fetchReferencesExperience) === null || _this$fetchReferences2 === void 0 || _this$fetchReferences2.failure({
58
+ reason: response.error
59
+ });
54
60
  return _context2.abrupt("return", {
55
61
  error: response.error
56
62
  });
57
- case 8:
63
+ case 10:
58
64
  if (!(!response.references || ((_response$references = response.references) === null || _response$references === void 0 ? void 0 : _response$references.length) === 0)) {
59
- _context2.next = 10;
65
+ _context2.next = 13;
60
66
  break;
61
67
  }
68
+ // No reference found
69
+ if (isSourceSyncBlock) {
70
+ (_this$fetchReferences3 = this.fetchReferencesExperience) === null || _this$fetchReferences3 === void 0 || _this$fetchReferences3.success();
71
+ } else {
72
+ (_this$fetchReferences4 = this.fetchReferencesExperience) === null || _this$fetchReferences4 === void 0 || _this$fetchReferences4.failure({
73
+ reason: 'No references found for reference synced block'
74
+ });
75
+ }
62
76
  return _context2.abrupt("return", isSourceSyncBlock ? {
63
77
  references: []
64
78
  } : {
65
79
  error: SyncBlockError.Errored
66
80
  });
67
- case 10:
81
+ case 13:
82
+ (_this$fetchReferences5 = this.fetchReferencesExperience) === null || _this$fetchReferences5 === void 0 || _this$fetchReferences5.success();
68
83
  sourceInfoPromises = response.references.map( /*#__PURE__*/function () {
69
84
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(reference) {
70
- var _this$dataProvider;
71
- var sourceInfo;
85
+ var _this$fetchSourceInfo, _this$dataProvider, _this$fetchSourceInfo3;
86
+ var sourceInfo, _this$fetchSourceInfo2;
72
87
  return _regeneratorRuntime.wrap(function _callee$(_context) {
73
88
  while (1) switch (_context.prev = _context.next) {
74
89
  case 0:
75
- _context.next = 2;
90
+ (_this$fetchSourceInfo = _this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo === void 0 || _this$fetchSourceInfo.start();
91
+ _context.next = 3;
76
92
  return (_this$dataProvider = _this.dataProvider) === null || _this$dataProvider === void 0 ? void 0 : _this$dataProvider.fetchSyncBlockSourceInfo(reference.blockInstanceId || '', reference.documentAri, getProductFromSourceAri(reference.documentAri), _this.fireAnalyticsEvent, reference.hasAccess, 'view');
77
- case 2:
93
+ case 3:
78
94
  sourceInfo = _context.sent;
79
95
  if (sourceInfo) {
80
- _context.next = 5;
96
+ _context.next = 7;
81
97
  break;
82
98
  }
99
+ (_this$fetchSourceInfo2 = _this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo2 === void 0 || _this$fetchSourceInfo2.failure({
100
+ reason: "no source info returned for ari: ".concat(reference.documentAri)
101
+ });
83
102
  return _context.abrupt("return", undefined);
84
- case 5:
103
+ case 7:
104
+ (_this$fetchSourceInfo3 = _this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo3 === void 0 || _this$fetchSourceInfo3.success();
85
105
  return _context.abrupt("return", _objectSpread(_objectSpread({}, sourceInfo), {}, {
86
106
  onSameDocument: reference.onSameDocument,
87
107
  hasAccess: reference.hasAccess,
88
108
  productType: sourceInfo.productType
89
109
  }));
90
- case 6:
110
+ case 9:
91
111
  case "end":
92
112
  return _context.stop();
93
113
  }
@@ -97,13 +117,13 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
97
117
  return _ref.apply(this, arguments);
98
118
  };
99
119
  }());
100
- _context2.next = 13;
120
+ _context2.next = 17;
101
121
  return Promise.all(sourceInfoPromises);
102
- case 13:
122
+ case 17:
103
123
  sourceInfos = _context2.sent;
104
- _context2.next = 16;
124
+ _context2.next = 20;
105
125
  return isSourceSyncBlock ? this.sourceSyncBlockStoreManager.getSyncBlockSourceInfo(blockInstanceId) : this.referenceSyncBlockStoreManager.fetchSyncBlockSourceInfo(resourceId);
106
- case 16:
126
+ case 20:
107
127
  sourceSyncBlockData = _context2.sent;
108
128
  if (sourceSyncBlockData) {
109
129
  sourceInfos.push(_objectSpread(_objectSpread({}, sourceSyncBlockData), {}, {
@@ -116,8 +136,8 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
116
136
  return _context2.abrupt("return", {
117
137
  references: sourceInfos
118
138
  });
119
- case 21:
120
- _context2.prev = 21;
139
+ case 25:
140
+ _context2.prev = 25;
121
141
  _context2.t0 = _context2["catch"](0);
122
142
  logException(_context2.t0, {
123
143
  location: 'editor-synced-block-provider/syncBlockStoreManager'
@@ -126,11 +146,11 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
126
146
  return _context2.abrupt("return", {
127
147
  error: SyncBlockError.Errored
128
148
  });
129
- case 26:
149
+ case 30:
130
150
  case "end":
131
151
  return _context2.stop();
132
152
  }
133
- }, _callee2, this, [[0, 21]]);
153
+ }, _callee2, this, [[0, 25]]);
134
154
  }));
135
155
  function fetchReferencesSourceInfo(_x, _x2, _x3) {
136
156
  return _fetchReferencesSourceInfo.apply(this, arguments);
@@ -143,6 +163,10 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
143
163
  this.fireAnalyticsEvent = fireAnalyticsEvent;
144
164
  this.referenceSyncBlockStoreManager.setFireAnalyticsEvent(fireAnalyticsEvent);
145
165
  this.sourceSyncBlockStoreManager.setFireAnalyticsEvent(fireAnalyticsEvent);
166
+ if (fg('platform_synced_block_dogfooding')) {
167
+ this.fetchReferencesExperience = getFetchReferencesExperience(fireAnalyticsEvent);
168
+ this.fetchSourceInfoExperience = getFetchSourceInfoExperience(fireAnalyticsEvent);
169
+ }
146
170
  }
147
171
  }, {
148
172
  key: "referenceManager",
@@ -157,8 +181,15 @@ export var SyncBlockStoreManager = /*#__PURE__*/function () {
157
181
  }, {
158
182
  key: "destroy",
159
183
  value: function destroy() {
184
+ var _this$fetchReferences6, _this$fetchSourceInfo4;
160
185
  this.referenceSyncBlockStoreManager.destroy();
161
186
  this.sourceSyncBlockStoreManager.destroy();
187
+ (_this$fetchReferences6 = this.fetchReferencesExperience) === null || _this$fetchReferences6 === void 0 || _this$fetchReferences6.abort({
188
+ reason: 'editorDestroyed'
189
+ });
190
+ (_this$fetchSourceInfo4 = this.fetchSourceInfoExperience) === null || _this$fetchSourceInfo4 === void 0 || _this$fetchSourceInfo4.abort({
191
+ reason: 'editorDestroyed'
192
+ });
162
193
  }
163
194
  }]);
164
195
  }();
@@ -110,4 +110,21 @@ export var getCreateSourceExperience = function getCreateSourceExperience(fireAn
110
110
  durationMs: TIMEOUT_DURATION
111
111
  })]
112
112
  });
113
+ };
114
+
115
+ /**
116
+ * This experience tracks when a source sync block is created and registered to the BE.
117
+ *
118
+ * Start: When the fetchSourceInfo function is called.
119
+ * Success: When the fetching the data is successful within the timeout duration of start.
120
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
121
+ */
122
+ export var getFetchReferencesExperience = function getFetchReferencesExperience(fireAnalyticsEvent) {
123
+ return new Experience(EXPERIENCE_ID.ASYNC_OPERATION, {
124
+ action: ACTION.SYNCED_BLOCK_FETCH_REFERENCES,
125
+ dispatchAnalyticsEvent: createExperienceDispatcher(fireAnalyticsEvent),
126
+ checks: [new ExperienceCheckTimeout({
127
+ durationMs: TIMEOUT_DURATION
128
+ })]
129
+ });
113
130
  };
@@ -84,6 +84,7 @@ export type CreateSyncedBlockRequest = {
84
84
  content: string;
85
85
  product: SyncBlockProduct;
86
86
  sourceAri: string;
87
+ status?: SyncBlockStatus;
87
88
  stepVersion?: number;
88
89
  };
89
90
  type ReferenceSyncedBlockIDs = {
@@ -119,7 +120,7 @@ export declare class BlockError extends Error {
119
120
  readonly status: number;
120
121
  constructor(status: number);
121
122
  }
122
- export declare const getSyncedBlockContent: ({ blockAri }: GetSyncedBlockContentRequest) => Promise<BlockContentResponse>;
123
+ export declare const getSyncedBlockContent: ({ blockAri, }: GetSyncedBlockContentRequest) => Promise<BlockContentResponse>;
123
124
  /**
124
125
  * Batch retrieves multiple synced blocks by their ARIs.
125
126
  *
@@ -131,7 +132,7 @@ export declare const getSyncedBlockContent: ({ blockAri }: GetSyncedBlockContent
131
132
  export declare const batchRetrieveSyncedBlocks: ({ blockIdentifiers, documentAri, }: BatchRetrieveSyncedBlocksRequest) => Promise<BatchRetrieveSyncedBlocksResponse>;
132
133
  export declare const deleteSyncedBlock: ({ blockAri, deleteReason, }: DeleteSyncedBlockRequest) => Promise<void>;
133
134
  export declare const updateSyncedBlock: ({ blockAri, content, stepVersion, }: UpdateSyncedBlockRequest) => Promise<void>;
134
- export declare const createSyncedBlock: ({ blockAri, blockInstanceId, sourceAri, product, content, stepVersion, }: CreateSyncedBlockRequest) => Promise<BlockContentResponse>;
135
+ export declare const createSyncedBlock: ({ blockAri, blockInstanceId, sourceAri, product, content, stepVersion, status, }: CreateSyncedBlockRequest) => Promise<BlockContentResponse>;
135
136
  export declare const updateReferenceSyncedBlockOnDocument: ({ documentAri, blocks, noContent, }: UpdateReferenceSyncedBlockOnDocumentRequest) => Promise<ReferenceSyncedBlockResponse | void>;
136
137
  export declare const getReferenceSyncedBlocksByBlockAri: ({ blockAri, }: GetReferenceSyncedBlocksByBlockAriRequest) => Promise<GetReferenceSyncedBlocksByBlockAriResponse>;
137
138
  export {};
@@ -56,6 +56,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
56
56
  interface BlockServiceADFWriteProviderProps {
57
57
  cloudId: string;
58
58
  getVersion?: () => number | undefined;
59
+ isParentUnpublished?: () => boolean;
59
60
  parentAri: string | undefined;
60
61
  parentId?: string;
61
62
  product: SyncBlockProduct;
@@ -67,9 +68,10 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
67
68
  private cloudId;
68
69
  private parentId?;
69
70
  private getVersion?;
71
+ private isParentUnpublished?;
70
72
  product: SyncBlockProduct;
71
73
  parentAri: string | undefined;
72
- constructor({ cloudId, parentAri, parentId, product, getVersion, }: BlockServiceADFWriteProviderProps);
74
+ constructor({ cloudId, parentAri, parentId, product, getVersion, isParentUnpublished, }: BlockServiceADFWriteProviderProps);
73
75
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
74
76
  createData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
75
77
  deleteData(resourceId: string, deleteReason: string | undefined): Promise<DeleteSyncBlockResult>;
@@ -80,11 +82,12 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
80
82
  interface BlockServiceAPIProvidersProps {
81
83
  cloudId: string;
82
84
  getVersion?: () => number | undefined;
85
+ isParentUnpublished?: () => boolean;
83
86
  parentAri: string | undefined;
84
87
  parentId?: string;
85
88
  product: SyncBlockProduct;
86
89
  }
87
- export declare const useMemoizedBlockServiceAPIProviders: ({ cloudId, parentAri, parentId, product, getVersion, }: BlockServiceAPIProvidersProps) => {
90
+ export declare const useMemoizedBlockServiceAPIProviders: ({ cloudId, parentAri, parentId, product, getVersion, isParentUnpublished, }: BlockServiceAPIProvidersProps) => {
88
91
  fetchProvider: BlockServiceADFFetchProvider;
89
92
  writeProvider: BlockServiceADFWriteProvider;
90
93
  };
@@ -20,6 +20,8 @@ export declare class ReferenceSyncBlockStoreManager {
20
20
  private graphqlSubscriptions;
21
21
  private useRealTimeSubscriptions;
22
22
  private subscriptionChangeListeners;
23
+ private newlyAddedSyncBlocks;
24
+ private onUnpublishedSyncBlockDetected?;
23
25
  fetchExperience: Experience | undefined;
24
26
  private fetchSourceInfoExperience;
25
27
  private saveExperience;
@@ -57,6 +59,13 @@ export declare class ReferenceSyncBlockStoreManager {
57
59
  */
58
60
  handleSubscriptionUpdate(syncBlockInstance: SyncBlockInstance): void;
59
61
  setFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
62
+ setOnUnpublishedSyncBlockDetected(callback?: (resourceId: ResourceId) => void): void;
63
+ /**
64
+ * Mark a sync block as newly added to the document.
65
+ * This should be called when a sync block node is added via a transaction.
66
+ * @param resourceId - The resource ID of the newly added sync block
67
+ */
68
+ markAsNewlyAdded(resourceId: ResourceId): void;
60
69
  generateResourceIdForReference(sourceId: ResourceId): ResourceId;
61
70
  updateFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
62
71
  getInitialSyncBlockData(resourceId: ResourceId): SyncBlockInstance | undefined;
@@ -18,6 +18,7 @@ export declare class SourceSyncBlockStoreManager {
18
18
  private createExperience;
19
19
  private saveExperience;
20
20
  private deleteExperience;
21
+ private fetchSourceInfoExperience;
21
22
  constructor(dataProvider?: SyncBlockDataProvider);
22
23
  setFireAnalyticsEvent(fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void): void;
23
24
  isSourceBlock(node: PMNode): boolean;
@@ -8,6 +8,8 @@ export declare class SyncBlockStoreManager {
8
8
  private sourceSyncBlockStoreManager;
9
9
  private dataProvider?;
10
10
  private fireAnalyticsEvent?;
11
+ private fetchReferencesExperience;
12
+ private fetchSourceInfoExperience;
11
13
  constructor(dataProvider?: SyncBlockDataProvider);
12
14
  fetchReferencesSourceInfo(resourceId: ResourceId, blockInstanceId: BlockInstanceId, isSourceSyncBlock: boolean): Promise<ReferencesSourceInfo>;
13
15
  setFireAnalyticsEvent(fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void): void;
@@ -49,3 +49,11 @@ export declare const getDeleteSourceExperience: (fireAnalyticsEvent?: (payload:
49
49
  * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
50
50
  */
51
51
  export declare const getCreateSourceExperience: (fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void) => Experience;
52
+ /**
53
+ * This experience tracks when a source sync block is created and registered to the BE.
54
+ *
55
+ * Start: When the fetchSourceInfo function is called.
56
+ * Success: When the fetching the data is successful within the timeout duration of start.
57
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
58
+ */
59
+ export declare const getFetchReferencesExperience: (fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void) => Experience;
@@ -84,6 +84,7 @@ export type CreateSyncedBlockRequest = {
84
84
  content: string;
85
85
  product: SyncBlockProduct;
86
86
  sourceAri: string;
87
+ status?: SyncBlockStatus;
87
88
  stepVersion?: number;
88
89
  };
89
90
  type ReferenceSyncedBlockIDs = {
@@ -119,7 +120,7 @@ export declare class BlockError extends Error {
119
120
  readonly status: number;
120
121
  constructor(status: number);
121
122
  }
122
- export declare const getSyncedBlockContent: ({ blockAri }: GetSyncedBlockContentRequest) => Promise<BlockContentResponse>;
123
+ export declare const getSyncedBlockContent: ({ blockAri, }: GetSyncedBlockContentRequest) => Promise<BlockContentResponse>;
123
124
  /**
124
125
  * Batch retrieves multiple synced blocks by their ARIs.
125
126
  *
@@ -131,7 +132,7 @@ export declare const getSyncedBlockContent: ({ blockAri }: GetSyncedBlockContent
131
132
  export declare const batchRetrieveSyncedBlocks: ({ blockIdentifiers, documentAri, }: BatchRetrieveSyncedBlocksRequest) => Promise<BatchRetrieveSyncedBlocksResponse>;
132
133
  export declare const deleteSyncedBlock: ({ blockAri, deleteReason, }: DeleteSyncedBlockRequest) => Promise<void>;
133
134
  export declare const updateSyncedBlock: ({ blockAri, content, stepVersion, }: UpdateSyncedBlockRequest) => Promise<void>;
134
- export declare const createSyncedBlock: ({ blockAri, blockInstanceId, sourceAri, product, content, stepVersion, }: CreateSyncedBlockRequest) => Promise<BlockContentResponse>;
135
+ export declare const createSyncedBlock: ({ blockAri, blockInstanceId, sourceAri, product, content, stepVersion, status, }: CreateSyncedBlockRequest) => Promise<BlockContentResponse>;
135
136
  export declare const updateReferenceSyncedBlockOnDocument: ({ documentAri, blocks, noContent, }: UpdateReferenceSyncedBlockOnDocumentRequest) => Promise<ReferenceSyncedBlockResponse | void>;
136
137
  export declare const getReferenceSyncedBlocksByBlockAri: ({ blockAri, }: GetReferenceSyncedBlocksByBlockAriRequest) => Promise<GetReferenceSyncedBlocksByBlockAriResponse>;
137
138
  export {};
@@ -56,6 +56,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
56
56
  interface BlockServiceADFWriteProviderProps {
57
57
  cloudId: string;
58
58
  getVersion?: () => number | undefined;
59
+ isParentUnpublished?: () => boolean;
59
60
  parentAri: string | undefined;
60
61
  parentId?: string;
61
62
  product: SyncBlockProduct;
@@ -67,9 +68,10 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
67
68
  private cloudId;
68
69
  private parentId?;
69
70
  private getVersion?;
71
+ private isParentUnpublished?;
70
72
  product: SyncBlockProduct;
71
73
  parentAri: string | undefined;
72
- constructor({ cloudId, parentAri, parentId, product, getVersion, }: BlockServiceADFWriteProviderProps);
74
+ constructor({ cloudId, parentAri, parentId, product, getVersion, isParentUnpublished, }: BlockServiceADFWriteProviderProps);
73
75
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
74
76
  createData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
75
77
  deleteData(resourceId: string, deleteReason: string | undefined): Promise<DeleteSyncBlockResult>;
@@ -80,11 +82,12 @@ declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
80
82
  interface BlockServiceAPIProvidersProps {
81
83
  cloudId: string;
82
84
  getVersion?: () => number | undefined;
85
+ isParentUnpublished?: () => boolean;
83
86
  parentAri: string | undefined;
84
87
  parentId?: string;
85
88
  product: SyncBlockProduct;
86
89
  }
87
- export declare const useMemoizedBlockServiceAPIProviders: ({ cloudId, parentAri, parentId, product, getVersion, }: BlockServiceAPIProvidersProps) => {
90
+ export declare const useMemoizedBlockServiceAPIProviders: ({ cloudId, parentAri, parentId, product, getVersion, isParentUnpublished, }: BlockServiceAPIProvidersProps) => {
88
91
  fetchProvider: BlockServiceADFFetchProvider;
89
92
  writeProvider: BlockServiceADFWriteProvider;
90
93
  };
@@ -20,6 +20,8 @@ export declare class ReferenceSyncBlockStoreManager {
20
20
  private graphqlSubscriptions;
21
21
  private useRealTimeSubscriptions;
22
22
  private subscriptionChangeListeners;
23
+ private newlyAddedSyncBlocks;
24
+ private onUnpublishedSyncBlockDetected?;
23
25
  fetchExperience: Experience | undefined;
24
26
  private fetchSourceInfoExperience;
25
27
  private saveExperience;
@@ -57,6 +59,13 @@ export declare class ReferenceSyncBlockStoreManager {
57
59
  */
58
60
  handleSubscriptionUpdate(syncBlockInstance: SyncBlockInstance): void;
59
61
  setFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
62
+ setOnUnpublishedSyncBlockDetected(callback?: (resourceId: ResourceId) => void): void;
63
+ /**
64
+ * Mark a sync block as newly added to the document.
65
+ * This should be called when a sync block node is added via a transaction.
66
+ * @param resourceId - The resource ID of the newly added sync block
67
+ */
68
+ markAsNewlyAdded(resourceId: ResourceId): void;
60
69
  generateResourceIdForReference(sourceId: ResourceId): ResourceId;
61
70
  updateFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
62
71
  getInitialSyncBlockData(resourceId: ResourceId): SyncBlockInstance | undefined;
@@ -18,6 +18,7 @@ export declare class SourceSyncBlockStoreManager {
18
18
  private createExperience;
19
19
  private saveExperience;
20
20
  private deleteExperience;
21
+ private fetchSourceInfoExperience;
21
22
  constructor(dataProvider?: SyncBlockDataProvider);
22
23
  setFireAnalyticsEvent(fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void): void;
23
24
  isSourceBlock(node: PMNode): boolean;
@@ -8,6 +8,8 @@ export declare class SyncBlockStoreManager {
8
8
  private sourceSyncBlockStoreManager;
9
9
  private dataProvider?;
10
10
  private fireAnalyticsEvent?;
11
+ private fetchReferencesExperience;
12
+ private fetchSourceInfoExperience;
11
13
  constructor(dataProvider?: SyncBlockDataProvider);
12
14
  fetchReferencesSourceInfo(resourceId: ResourceId, blockInstanceId: BlockInstanceId, isSourceSyncBlock: boolean): Promise<ReferencesSourceInfo>;
13
15
  setFireAnalyticsEvent(fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void): void;
@@ -49,3 +49,11 @@ export declare const getDeleteSourceExperience: (fireAnalyticsEvent?: (payload:
49
49
  * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
50
50
  */
51
51
  export declare const getCreateSourceExperience: (fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void) => Experience;
52
+ /**
53
+ * This experience tracks when a source sync block is created and registered to the BE.
54
+ *
55
+ * Start: When the fetchSourceInfo function is called.
56
+ * Success: When the fetching the data is successful within the timeout duration of start.
57
+ * Failure: When the timeout duration passes without the data being successfully fetched, or the fetch fails
58
+ */
59
+ export declare const getFetchReferencesExperience: (fireAnalyticsEvent?: (payload: SyncBlockEventPayload) => void) => Experience;
package/package.json CHANGED
@@ -35,7 +35,7 @@
35
35
  "uuid": "^3.1.0"
36
36
  },
37
37
  "peerDependencies": {
38
- "@atlaskit/editor-common": "^111.8.0",
38
+ "@atlaskit/editor-common": "^111.9.0",
39
39
  "react": "^18.2.0"
40
40
  },
41
41
  "devDependencies": {
@@ -78,7 +78,7 @@
78
78
  }
79
79
  },
80
80
  "name": "@atlaskit/editor-synced-block-provider",
81
- "version": "3.14.2",
81
+ "version": "3.14.3",
82
82
  "description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
83
83
  "author": "Atlassian Pty Ltd",
84
84
  "license": "Apache-2.0",