@atlaskit/editor-synced-block-provider 3.12.1 → 3.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/cjs/clients/block-service/blockSubscription.js +124 -0
- package/dist/cjs/clients/jira/sourceInfo.js +152 -0
- package/dist/cjs/providers/block-service/blockServiceAPI.js +43 -6
- package/dist/cjs/providers/syncBlockProvider.js +40 -8
- package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +351 -118
- package/dist/cjs/store-manager/syncBlockStoreManager.js +2 -2
- package/dist/cjs/utils/resolveSyncBlockInstance.js +1 -1
- package/dist/es2019/clients/block-service/blockSubscription.js +125 -0
- package/dist/es2019/clients/jira/sourceInfo.js +87 -0
- package/dist/es2019/providers/block-service/blockServiceAPI.js +40 -5
- package/dist/es2019/providers/syncBlockProvider.js +26 -2
- package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +237 -49
- package/dist/es2019/store-manager/syncBlockStoreManager.js +2 -2
- package/dist/es2019/utils/resolveSyncBlockInstance.js +1 -1
- package/dist/esm/clients/block-service/blockSubscription.js +118 -0
- package/dist/esm/clients/jira/sourceInfo.js +147 -0
- package/dist/esm/providers/block-service/blockServiceAPI.js +43 -6
- package/dist/esm/providers/syncBlockProvider.js +38 -6
- package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +351 -118
- package/dist/esm/store-manager/syncBlockStoreManager.js +2 -2
- package/dist/esm/utils/resolveSyncBlockInstance.js +1 -1
- package/dist/types/clients/block-service/blockService.d.ts +2 -2
- package/dist/types/clients/block-service/blockSubscription.d.ts +38 -0
- package/dist/types/clients/jira/sourceInfo.d.ts +2 -0
- package/dist/types/common/types.d.ts +4 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/providers/block-service/blockServiceAPI.d.ts +8 -0
- package/dist/types/providers/syncBlockProvider.d.ts +9 -1
- package/dist/types/providers/types.d.ts +22 -6
- package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +59 -0
- package/dist/types-ts4.5/clients/block-service/blockService.d.ts +2 -2
- package/dist/types-ts4.5/clients/block-service/blockSubscription.d.ts +38 -0
- package/dist/types-ts4.5/clients/jira/sourceInfo.d.ts +2 -0
- package/dist/types-ts4.5/common/types.d.ts +4 -2
- package/dist/types-ts4.5/index.d.ts +2 -2
- package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +8 -0
- package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +9 -1
- package/dist/types-ts4.5/providers/types.d.ts +22 -6
- package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +59 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @atlaskit/editor-synced-block-provider
|
|
2
2
|
|
|
3
|
+
## 3.13.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`ab11bedd7f6e6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ab11bedd7f6e6) -
|
|
8
|
+
Fix over logging of source ari not found error
|
|
9
|
+
|
|
10
|
+
## 3.13.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- [`870c3baec758b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/870c3baec758b) -
|
|
15
|
+
Enable consumers to use GraphQL subscription for fetching the block data when the block changes
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [`5c522f81f181e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5c522f81f181e) -
|
|
20
|
+
[ux] EDITOR-4369 Support synced location for references on Jira in source and reference synced
|
|
21
|
+
block
|
|
22
|
+
- [`058065aadf69f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/058065aadf69f) -
|
|
23
|
+
[ux] [EDITOR-2851] Support reference sync block unsyc
|
|
24
|
+
- Updated dependencies
|
|
25
|
+
|
|
3
26
|
## 3.12.1
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.subscribeToBlockUpdates = void 0;
|
|
7
|
+
var _graphqlWs = require("graphql-ws");
|
|
8
|
+
var GRAPHQL_WS_ENDPOINT = '/gateway/api/graphql/subscriptions';
|
|
9
|
+
var blockServiceClient = null;
|
|
10
|
+
var getBlockServiceClient = function getBlockServiceClient() {
|
|
11
|
+
// Don't create client during SSR
|
|
12
|
+
if (typeof window === 'undefined') {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
if (!blockServiceClient) {
|
|
16
|
+
var protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
17
|
+
var wsUrl = "".concat(protocol, "//").concat(window.location.host).concat(GRAPHQL_WS_ENDPOINT);
|
|
18
|
+
blockServiceClient = (0, _graphqlWs.createClient)({
|
|
19
|
+
url: wsUrl,
|
|
20
|
+
lazy: true,
|
|
21
|
+
retryAttempts: 3
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return blockServiceClient;
|
|
25
|
+
};
|
|
26
|
+
var SUBSCRIPTION_QUERY = "\nsubscription EDITOR_SYNCED_BLOCK_ON_BLOCK_UPDATED($resourceId: ID!) {\n\tblockService_onBlockUpdated(resourceId: $resourceId) {\n\t\tblockAri\n\t\tblockInstanceId\n\t\tcontent\n\t\tcontentUpdatedAt\n\t\tcreatedAt\n\t\tcreatedBy\n\t\tdeletionReason\n\t\tproduct\n\t\tsourceAri\n\t\tstatus\n\t}\n}\n";
|
|
27
|
+
/**
|
|
28
|
+
* Extracts the resourceId from a block ARI.
|
|
29
|
+
* Block ARI format: ari:cloud:blocks:<cloudId>:synced-block/<resourceId>
|
|
30
|
+
* @param blockAri - The block ARI string
|
|
31
|
+
* @returns The resourceId portion of the ARI
|
|
32
|
+
*/
|
|
33
|
+
var extractResourceIdFromBlockAri = function extractResourceIdFromBlockAri(blockAri) {
|
|
34
|
+
// eslint-disable-next-line require-unicode-regexp
|
|
35
|
+
var match = blockAri.match(/ari:cloud:blocks:[^:]+:synced-block\/(.+)$/);
|
|
36
|
+
return (match === null || match === void 0 ? void 0 : match[1]) || null;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Parses the subscription payload into a standardized format.
|
|
41
|
+
* @param payload - The raw subscription payload
|
|
42
|
+
* @returns Parsed block data or null if parsing fails
|
|
43
|
+
*/
|
|
44
|
+
var parseSubscriptionPayload = function parseSubscriptionPayload(payload) {
|
|
45
|
+
try {
|
|
46
|
+
var resourceId = extractResourceIdFromBlockAri(payload.blockAri);
|
|
47
|
+
if (!resourceId) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
var createdAt;
|
|
51
|
+
if (payload.createdAt !== undefined && payload.createdAt !== null) {
|
|
52
|
+
try {
|
|
53
|
+
// BE returns microseconds, convert to milliseconds
|
|
54
|
+
createdAt = new Date(payload.createdAt / 1000).toISOString();
|
|
55
|
+
} catch (_unused) {
|
|
56
|
+
createdAt = undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
blockAri: payload.blockAri,
|
|
61
|
+
blockInstanceId: payload.blockInstanceId,
|
|
62
|
+
content: JSON.parse(payload.content),
|
|
63
|
+
createdAt: createdAt,
|
|
64
|
+
createdBy: payload.createdBy,
|
|
65
|
+
product: payload.product,
|
|
66
|
+
resourceId: resourceId,
|
|
67
|
+
sourceAri: payload.sourceAri,
|
|
68
|
+
status: payload.status
|
|
69
|
+
};
|
|
70
|
+
} catch (_unused2) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Creates a GraphQL subscription to block updates using the shared graphql-ws client.
|
|
77
|
+
*
|
|
78
|
+
* @param blockAri - The full block ARI to subscribe to (ari:cloud:blocks:{cloudId}:synced-block/{resourceId})
|
|
79
|
+
* @param onData - Callback function invoked when block data is updated
|
|
80
|
+
* @param onError - Optional callback function invoked on subscription errors
|
|
81
|
+
* @returns Unsubscribe function to close the subscription
|
|
82
|
+
*/
|
|
83
|
+
var subscribeToBlockUpdates = exports.subscribeToBlockUpdates = function subscribeToBlockUpdates(blockAri, onData, onError) {
|
|
84
|
+
var client = getBlockServiceClient();
|
|
85
|
+
if (!client) {
|
|
86
|
+
// Return a no-op unsubscribe if client is not available (e.g., SSR)
|
|
87
|
+
return function () {};
|
|
88
|
+
}
|
|
89
|
+
var unsubscribe = client.subscribe({
|
|
90
|
+
query: SUBSCRIPTION_QUERY,
|
|
91
|
+
variables: {
|
|
92
|
+
resourceId: blockAri
|
|
93
|
+
},
|
|
94
|
+
operationName: 'EDITOR_SYNCED_BLOCK_ON_BLOCK_UPDATED'
|
|
95
|
+
}, {
|
|
96
|
+
next: function next(value) {
|
|
97
|
+
var _value$data;
|
|
98
|
+
if ((_value$data = value.data) !== null && _value$data !== void 0 && _value$data.blockService_onBlockUpdated) {
|
|
99
|
+
var parsed = parseSubscriptionPayload(value.data.blockService_onBlockUpdated);
|
|
100
|
+
if (parsed !== null) {
|
|
101
|
+
onData(parsed);
|
|
102
|
+
} else {
|
|
103
|
+
onError === null || onError === void 0 || onError(new Error('Failed to parse block subscription payload'));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
error: function (_error) {
|
|
108
|
+
function error(_x) {
|
|
109
|
+
return _error.apply(this, arguments);
|
|
110
|
+
}
|
|
111
|
+
error.toString = function () {
|
|
112
|
+
return _error.toString();
|
|
113
|
+
};
|
|
114
|
+
return error;
|
|
115
|
+
}(function (error) {
|
|
116
|
+
var errorMessage = error instanceof Error ? error.message : 'GraphQL subscription error';
|
|
117
|
+
onError === null || onError === void 0 || onError(new Error(errorMessage));
|
|
118
|
+
}),
|
|
119
|
+
complete: function complete() {
|
|
120
|
+
// Subscription completed
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return unsubscribe;
|
|
124
|
+
};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.fetchJiraWorkItemInfo = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _retry = require("../../utils/retry");
|
|
12
|
+
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; }
|
|
13
|
+
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; } /* eslint-disable require-unicode-regexp */
|
|
14
|
+
var COMMON_HEADERS = {
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
Accept: 'application/json'
|
|
17
|
+
};
|
|
18
|
+
var AGG_HEADERS = {
|
|
19
|
+
'X-ExperimentalApi': 'confluence-agg-beta'
|
|
20
|
+
};
|
|
21
|
+
var GRAPHQL_ENDPOINT = '/gateway/api/graphql';
|
|
22
|
+
var GET_SOURCE_INFO_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_GET_SOURCE_INFO';
|
|
23
|
+
/**
|
|
24
|
+
* Query to get the work item url by id
|
|
25
|
+
* @param id - the ID of the work item
|
|
26
|
+
* @returns url of the work item
|
|
27
|
+
*/
|
|
28
|
+
var GET_SOURCE_INFO_QUERY = "query ".concat(GET_SOURCE_INFO_OPERATION_NAME, " ($id: ID!) {\n jira {\n issueById(id: $id) {\n id\n webUrl\n summary\n }\n }}");
|
|
29
|
+
var getJiraWorkItemSourceInfo = /*#__PURE__*/function () {
|
|
30
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(ari) {
|
|
31
|
+
var bodyData, response;
|
|
32
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
33
|
+
while (1) switch (_context.prev = _context.next) {
|
|
34
|
+
case 0:
|
|
35
|
+
bodyData = {
|
|
36
|
+
query: GET_SOURCE_INFO_QUERY,
|
|
37
|
+
operationName: GET_SOURCE_INFO_OPERATION_NAME,
|
|
38
|
+
variables: {
|
|
39
|
+
id: ari
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
_context.next = 3;
|
|
43
|
+
return (0, _retry.fetchWithRetry)(GRAPHQL_ENDPOINT, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: _objectSpread(_objectSpread({}, COMMON_HEADERS), AGG_HEADERS),
|
|
46
|
+
body: JSON.stringify(bodyData)
|
|
47
|
+
});
|
|
48
|
+
case 3:
|
|
49
|
+
response = _context.sent;
|
|
50
|
+
if (response.ok) {
|
|
51
|
+
_context.next = 6;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
throw new Error("Failed to get url: ".concat(response.statusText));
|
|
55
|
+
case 6:
|
|
56
|
+
_context.next = 8;
|
|
57
|
+
return response.json();
|
|
58
|
+
case 8:
|
|
59
|
+
return _context.abrupt("return", _context.sent);
|
|
60
|
+
case 9:
|
|
61
|
+
case "end":
|
|
62
|
+
return _context.stop();
|
|
63
|
+
}
|
|
64
|
+
}, _callee);
|
|
65
|
+
}));
|
|
66
|
+
return function getJiraWorkItemSourceInfo(_x) {
|
|
67
|
+
return _ref.apply(this, arguments);
|
|
68
|
+
};
|
|
69
|
+
}();
|
|
70
|
+
var resolveNoAccessWorkItemInfo = /*#__PURE__*/function () {
|
|
71
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(ari) {
|
|
72
|
+
var response, _payload$data, _payload$data2, payload, url, title;
|
|
73
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
74
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
75
|
+
case 0:
|
|
76
|
+
_context2.next = 2;
|
|
77
|
+
return fetch('/gateway/api/object-resolver/resolve/ari', {
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: {
|
|
80
|
+
'Content-Type': 'application/json',
|
|
81
|
+
Accept: 'application/json'
|
|
82
|
+
},
|
|
83
|
+
body: JSON.stringify({
|
|
84
|
+
ari: ari
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
case 2:
|
|
88
|
+
response = _context2.sent;
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
_context2.next = 12;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
_context2.next = 6;
|
|
94
|
+
return response.json();
|
|
95
|
+
case 6:
|
|
96
|
+
payload = _context2.sent;
|
|
97
|
+
url = payload === null || payload === void 0 || (_payload$data = payload.data) === null || _payload$data === void 0 ? void 0 : _payload$data.url;
|
|
98
|
+
title = payload === null || payload === void 0 || (_payload$data2 = payload.data) === null || _payload$data2 === void 0 ? void 0 : _payload$data2.name;
|
|
99
|
+
return _context2.abrupt("return", {
|
|
100
|
+
url: typeof url === 'string' ? url : undefined,
|
|
101
|
+
title: typeof title === 'string' ? title : undefined,
|
|
102
|
+
sourceAri: ari
|
|
103
|
+
});
|
|
104
|
+
case 12:
|
|
105
|
+
throw new Error("Failed to resolve ari: ".concat(response.statusText));
|
|
106
|
+
case 13:
|
|
107
|
+
case "end":
|
|
108
|
+
return _context2.stop();
|
|
109
|
+
}
|
|
110
|
+
}, _callee2);
|
|
111
|
+
}));
|
|
112
|
+
return function resolveNoAccessWorkItemInfo(_x2) {
|
|
113
|
+
return _ref2.apply(this, arguments);
|
|
114
|
+
};
|
|
115
|
+
}();
|
|
116
|
+
var fetchJiraWorkItemInfo = exports.fetchJiraWorkItemInfo = /*#__PURE__*/function () {
|
|
117
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workItemAri, hasAccess) {
|
|
118
|
+
var _response$data, response, contentData, webUrl, summary;
|
|
119
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
120
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
121
|
+
case 0:
|
|
122
|
+
if (!hasAccess) {
|
|
123
|
+
_context3.next = 10;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
_context3.next = 3;
|
|
127
|
+
return getJiraWorkItemSourceInfo(workItemAri);
|
|
128
|
+
case 3:
|
|
129
|
+
response = _context3.sent;
|
|
130
|
+
contentData = (_response$data = response.data) === null || _response$data === void 0 || (_response$data = _response$data.jira) === null || _response$data === void 0 ? void 0 : _response$data.issueById;
|
|
131
|
+
webUrl = contentData === null || contentData === void 0 ? void 0 : contentData.webUrl;
|
|
132
|
+
summary = contentData === null || contentData === void 0 ? void 0 : contentData.summary;
|
|
133
|
+
return _context3.abrupt("return", Promise.resolve({
|
|
134
|
+
url: webUrl,
|
|
135
|
+
sourceAri: workItemAri,
|
|
136
|
+
title: summary
|
|
137
|
+
}));
|
|
138
|
+
case 10:
|
|
139
|
+
_context3.next = 12;
|
|
140
|
+
return resolveNoAccessWorkItemInfo(workItemAri);
|
|
141
|
+
case 12:
|
|
142
|
+
return _context3.abrupt("return", _context3.sent);
|
|
143
|
+
case 13:
|
|
144
|
+
case "end":
|
|
145
|
+
return _context3.stop();
|
|
146
|
+
}
|
|
147
|
+
}, _callee3);
|
|
148
|
+
}));
|
|
149
|
+
return function fetchJiraWorkItemInfo(_x3, _x4) {
|
|
150
|
+
return _ref3.apply(this, arguments);
|
|
151
|
+
};
|
|
152
|
+
}();
|
|
@@ -15,6 +15,7 @@ var _react = require("react");
|
|
|
15
15
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
16
16
|
var _ari = require("../../clients/block-service/ari");
|
|
17
17
|
var _blockService = require("../../clients/block-service/blockService");
|
|
18
|
+
var _blockSubscription = require("../../clients/block-service/blockSubscription");
|
|
18
19
|
var _types = require("../../common/types");
|
|
19
20
|
var _errorHandling = require("../../utils/errorHandling");
|
|
20
21
|
var _resourceId2 = require("../../utils/resourceId");
|
|
@@ -117,7 +118,8 @@ var convertToSyncBlockData = exports.convertToSyncBlockData = function convertTo
|
|
|
117
118
|
createdBy: data.createdBy,
|
|
118
119
|
product: data.product,
|
|
119
120
|
resourceId: resourceId,
|
|
120
|
-
sourceAri: data.sourceAri
|
|
121
|
+
sourceAri: data.sourceAri,
|
|
122
|
+
status: data.status
|
|
121
123
|
};
|
|
122
124
|
};
|
|
123
125
|
var fetchReferences = exports.fetchReferences = /*#__PURE__*/function () {
|
|
@@ -237,7 +239,8 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
|
|
|
237
239
|
blockInstanceId: blockContentResponse.blockInstanceId,
|
|
238
240
|
// this was the node's localId, but has become the resourceId.
|
|
239
241
|
sourceAri: blockContentResponse.sourceAri,
|
|
240
|
-
product: blockContentResponse.product
|
|
242
|
+
product: blockContentResponse.product,
|
|
243
|
+
status: blockContentResponse.status
|
|
241
244
|
},
|
|
242
245
|
resourceId: resourceId
|
|
243
246
|
});
|
|
@@ -292,7 +295,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
|
|
|
292
295
|
response.references.forEach(function (reference) {
|
|
293
296
|
references.push(_objectSpread(_objectSpread({}, reference), {}, {
|
|
294
297
|
hasAccess: true,
|
|
295
|
-
|
|
298
|
+
onSameDocument: _this.parentAri === reference.documentAri
|
|
296
299
|
}));
|
|
297
300
|
});
|
|
298
301
|
response.errors.forEach(function (reference) {
|
|
@@ -301,7 +304,7 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
|
|
|
301
304
|
blockAri: reference.blockAri,
|
|
302
305
|
documentAri: reference.documentAri,
|
|
303
306
|
hasAccess: false,
|
|
304
|
-
|
|
307
|
+
onSameDocument: false
|
|
305
308
|
});
|
|
306
309
|
}
|
|
307
310
|
});
|
|
@@ -432,7 +435,8 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
|
|
|
432
435
|
resourceId: blockContentResponse.blockAri,
|
|
433
436
|
blockInstanceId: blockContentResponse.blockInstanceId,
|
|
434
437
|
sourceAri: blockContentResponse.sourceAri,
|
|
435
|
-
product: blockContentResponse.product
|
|
438
|
+
product: blockContentResponse.product,
|
|
439
|
+
status: blockContentResponse.status
|
|
436
440
|
},
|
|
437
441
|
resourceId: resourceId
|
|
438
442
|
});
|
|
@@ -535,7 +539,40 @@ var BlockServiceADFFetchProvider = /*#__PURE__*/function () {
|
|
|
535
539
|
return _batchFetchData.apply(this, arguments);
|
|
536
540
|
}
|
|
537
541
|
return batchFetchData;
|
|
538
|
-
}()
|
|
542
|
+
}()
|
|
543
|
+
/**
|
|
544
|
+
* Subscribes to real-time updates for a specific block using GraphQL WebSocket subscriptions.
|
|
545
|
+
* @param resourceId - The resource ID of the block to subscribe to
|
|
546
|
+
* @param onUpdate - Callback function invoked when the block is updated
|
|
547
|
+
* @param onError - Optional callback function invoked on subscription errors
|
|
548
|
+
* @returns Unsubscribe function to stop receiving updates
|
|
549
|
+
*/
|
|
550
|
+
)
|
|
551
|
+
}, {
|
|
552
|
+
key: "subscribeToBlockUpdates",
|
|
553
|
+
value: function subscribeToBlockUpdates(resourceId, onUpdate, onError) {
|
|
554
|
+
var blockAri = (0, _ari.generateBlockAriFromReference)({
|
|
555
|
+
cloudId: this.cloudId,
|
|
556
|
+
resourceId: resourceId
|
|
557
|
+
});
|
|
558
|
+
return (0, _blockSubscription.subscribeToBlockUpdates)(blockAri, function (parsedData) {
|
|
559
|
+
// Convert ParsedBlockSubscriptionData to SyncBlockInstance
|
|
560
|
+
var syncBlockInstance = {
|
|
561
|
+
data: {
|
|
562
|
+
content: parsedData.content,
|
|
563
|
+
resourceId: parsedData.blockAri,
|
|
564
|
+
blockInstanceId: parsedData.blockInstanceId,
|
|
565
|
+
sourceAri: parsedData.sourceAri,
|
|
566
|
+
product: parsedData.product,
|
|
567
|
+
createdAt: parsedData.createdAt,
|
|
568
|
+
createdBy: parsedData.createdBy,
|
|
569
|
+
status: parsedData.status
|
|
570
|
+
},
|
|
571
|
+
resourceId: parsedData.resourceId
|
|
572
|
+
};
|
|
573
|
+
onUpdate(syncBlockInstance);
|
|
574
|
+
}, onError);
|
|
575
|
+
}
|
|
539
576
|
}]);
|
|
540
577
|
}();
|
|
541
578
|
/**
|
|
@@ -17,7 +17,8 @@ var _react = require("react");
|
|
|
17
17
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
18
18
|
var _ari = require("../clients/block-service/ari");
|
|
19
19
|
var _ari2 = require("../clients/confluence/ari");
|
|
20
|
-
var
|
|
20
|
+
var _sourceInfo2 = require("../clients/confluence/sourceInfo");
|
|
21
|
+
var _sourceInfo3 = require("../clients/jira/sourceInfo");
|
|
21
22
|
var _types = require("../common/types");
|
|
22
23
|
var _types2 = require("./types");
|
|
23
24
|
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; }
|
|
@@ -309,6 +310,8 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
309
310
|
_this$writeProvider,
|
|
310
311
|
sourceInfo,
|
|
311
312
|
_this$writeProvider2,
|
|
313
|
+
_this$writeProvider3,
|
|
314
|
+
_sourceInfo,
|
|
312
315
|
_args4 = arguments;
|
|
313
316
|
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
314
317
|
while (1) switch (_context4.prev = _context4.next) {
|
|
@@ -327,11 +330,11 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
327
330
|
return _context4.abrupt("return", Promise.reject(new Error('Source ari or source product is undefined')));
|
|
328
331
|
case 6:
|
|
329
332
|
_context4.t0 = product;
|
|
330
|
-
_context4.next = _context4.t0 === 'confluence-page' ? 9 : _context4.t0 === 'jira-work-item' ? 19 :
|
|
333
|
+
_context4.next = _context4.t0 === 'confluence-page' ? 9 : _context4.t0 === 'jira-work-item' ? 19 : 27;
|
|
331
334
|
break;
|
|
332
335
|
case 9:
|
|
333
336
|
_context4.next = 11;
|
|
334
|
-
return (0,
|
|
337
|
+
return (0, _sourceInfo2.fetchConfluencePageInfo)(ari, hasAccess, urlType, localId, fireAnalyticsEvent);
|
|
335
338
|
case 11:
|
|
336
339
|
sourceInfo = _context4.sent;
|
|
337
340
|
if (!(0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
@@ -345,22 +348,35 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
345
348
|
return _context4.abrupt("return", Promise.resolve(undefined));
|
|
346
349
|
case 15:
|
|
347
350
|
return _context4.abrupt("return", _objectSpread(_objectSpread({}, sourceInfo), {}, {
|
|
348
|
-
|
|
351
|
+
onSameDocument: ((_this$writeProvider2 = this.writeProvider) === null || _this$writeProvider2 === void 0 ? void 0 : _this$writeProvider2.parentAri) === ari,
|
|
349
352
|
productType: product
|
|
350
353
|
}));
|
|
351
354
|
case 18:
|
|
352
355
|
return _context4.abrupt("return", sourceInfo);
|
|
353
356
|
case 19:
|
|
354
357
|
if (!(0, _platformFeatureFlags.fg)('platform_synced_block_dogfooding')) {
|
|
355
|
-
_context4.next =
|
|
358
|
+
_context4.next = 26;
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
_context4.next = 22;
|
|
362
|
+
return (0, _sourceInfo3.fetchJiraWorkItemInfo)(ari, hasAccess);
|
|
363
|
+
case 22:
|
|
364
|
+
_sourceInfo = _context4.sent;
|
|
365
|
+
if (_sourceInfo) {
|
|
366
|
+
_context4.next = 25;
|
|
356
367
|
break;
|
|
357
368
|
}
|
|
358
369
|
return _context4.abrupt("return", Promise.resolve(undefined));
|
|
359
|
-
case
|
|
370
|
+
case 25:
|
|
371
|
+
return _context4.abrupt("return", _objectSpread(_objectSpread({}, _sourceInfo), {}, {
|
|
372
|
+
onSameDocument: ((_this$writeProvider3 = this.writeProvider) === null || _this$writeProvider3 === void 0 ? void 0 : _this$writeProvider3.parentAri) === ari,
|
|
373
|
+
productType: product
|
|
374
|
+
}));
|
|
375
|
+
case 26:
|
|
360
376
|
return _context4.abrupt("return", Promise.reject(new Error('Jira work item source product not supported')));
|
|
361
|
-
case
|
|
377
|
+
case 27:
|
|
362
378
|
return _context4.abrupt("return", Promise.reject(new Error("".concat(product, " source product not supported"))));
|
|
363
|
-
case
|
|
379
|
+
case 28:
|
|
364
380
|
case "end":
|
|
365
381
|
return _context4.stop();
|
|
366
382
|
}
|
|
@@ -445,6 +461,22 @@ var SyncBlockProvider = exports.SyncBlockProvider = /*#__PURE__*/function (_Sync
|
|
|
445
461
|
}
|
|
446
462
|
return this.fetchProvider.fetchReferences(isSource ? this.generateResourceIdForReference(resourceId) : resourceId);
|
|
447
463
|
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Subscribes to real-time updates for a specific block.
|
|
467
|
+
* @param resourceId - The resource ID of the block to subscribe to
|
|
468
|
+
* @param onUpdate - Callback function invoked when the block is updated
|
|
469
|
+
* @param onError - Optional callback function invoked on subscription errors
|
|
470
|
+
* @returns Unsubscribe function to stop receiving updates, or undefined if not supported
|
|
471
|
+
*/
|
|
472
|
+
}, {
|
|
473
|
+
key: "subscribeToBlockUpdates",
|
|
474
|
+
value: function subscribeToBlockUpdates(resourceId, onUpdate, onError) {
|
|
475
|
+
if (this.fetchProvider.subscribeToBlockUpdates) {
|
|
476
|
+
return this.fetchProvider.subscribeToBlockUpdates(resourceId, onUpdate, onError);
|
|
477
|
+
}
|
|
478
|
+
return undefined;
|
|
479
|
+
}
|
|
448
480
|
}]);
|
|
449
481
|
}(_types2.SyncBlockDataProvider);
|
|
450
482
|
var createSyncedBlockProvider = function createSyncedBlockProvider(_ref) {
|