@atlaskit/link-datasource 1.2.1 → 1.2.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.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/hooks/useDatasourceTableState.js +28 -33
- package/dist/cjs/ui/assets-modal/modal/index.js +1 -1
- package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +15 -1
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +50 -30
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/hooks/useDatasourceTableState.js +2 -6
- package/dist/es2019/ui/assets-modal/modal/index.js +1 -1
- package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +15 -1
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +49 -26
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/hooks/useDatasourceTableState.js +28 -33
- package/dist/esm/ui/assets-modal/modal/index.js +1 -1
- package/dist/esm/ui/datasource-table-view/datasourceTableView.js +15 -1
- package/dist/esm/ui/jira-issues-modal/modal/index.js +50 -30
- package/dist/types/analytics/generated/analytics.types.d.ts +8 -8
- package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +8 -8
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`de4dddb97d4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/de4dddb97d4) - Added 'ui.datasource.renderSuccess' event with display = 'table'
|
|
8
|
+
|
|
9
|
+
## 1.2.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`ce3de76af77`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ce3de76af77) - Added ui.table.viewed event
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
3
16
|
## 1.2.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -67,7 +67,7 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
67
67
|
getDatasourceData = _useDatasourceClientE.getDatasourceData,
|
|
68
68
|
getDatasourceDetails = _useDatasourceClientE.getDatasourceDetails;
|
|
69
69
|
var loadDatasourceDetails = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
70
|
-
var _yield$getDatasourceD,
|
|
70
|
+
var _yield$getDatasourceD, access, schema, isColumnNotPresentInCurrentColumnsList, allColumns, newColumns;
|
|
71
71
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
72
72
|
while (1) switch (_context.prev = _context.next) {
|
|
73
73
|
case 0:
|
|
@@ -84,20 +84,15 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
84
84
|
});
|
|
85
85
|
case 5:
|
|
86
86
|
_yield$getDatasourceD = _context.sent;
|
|
87
|
-
|
|
88
|
-
access = _yield$getDatasourceD2.access;
|
|
89
|
-
_destinationObjectTypes = _yield$getDatasourceD2.destinationObjectTypes;
|
|
90
|
-
_extensionKey = _yield$getDatasourceD2.extensionKey;
|
|
87
|
+
access = _yield$getDatasourceD.meta.access;
|
|
91
88
|
schema = _yield$getDatasourceD.data.schema;
|
|
92
89
|
if (!(access === 'forbidden' || access === 'unauthorized')) {
|
|
93
|
-
_context.next =
|
|
90
|
+
_context.next = 11;
|
|
94
91
|
break;
|
|
95
92
|
}
|
|
96
93
|
setStatus('unauthorized');
|
|
97
94
|
return _context.abrupt("return");
|
|
98
|
-
case
|
|
99
|
-
setExtensionKey(_extensionKey);
|
|
100
|
-
setDestinationObjectTypes(_destinationObjectTypes);
|
|
95
|
+
case 11:
|
|
101
96
|
isColumnNotPresentInCurrentColumnsList = function isColumnNotPresentInCurrentColumnsList(col) {
|
|
102
97
|
return !columns.find(function (column) {
|
|
103
98
|
return column.key === col.key;
|
|
@@ -106,17 +101,17 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
106
101
|
allColumns = schema.properties;
|
|
107
102
|
newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
|
|
108
103
|
newColumns.length > 0 && setColumns([].concat((0, _toConsumableArray2.default)(columns), (0, _toConsumableArray2.default)(newColumns)));
|
|
109
|
-
_context.next =
|
|
104
|
+
_context.next = 20;
|
|
110
105
|
break;
|
|
111
|
-
case
|
|
112
|
-
_context.prev =
|
|
106
|
+
case 17:
|
|
107
|
+
_context.prev = 17;
|
|
113
108
|
_context.t0 = _context["catch"](2);
|
|
114
109
|
setStatus('rejected');
|
|
115
|
-
case
|
|
110
|
+
case 20:
|
|
116
111
|
case "end":
|
|
117
112
|
return _context.stop();
|
|
118
113
|
}
|
|
119
|
-
}, _callee, null, [[2,
|
|
114
|
+
}, _callee, null, [[2, 17]]);
|
|
120
115
|
})), [columns, datasourceId, getDatasourceDetails, parameters]);
|
|
121
116
|
var applySchemaProperties = (0, _react.useCallback)(function (properties) {
|
|
122
117
|
if (columns.length === 0) {
|
|
@@ -144,12 +139,12 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
144
139
|
shouldForceRequest,
|
|
145
140
|
sortedFieldKeys,
|
|
146
141
|
datasourceDataRequest,
|
|
142
|
+
_yield$getDatasourceD2,
|
|
147
143
|
_yield$getDatasourceD3,
|
|
148
|
-
_yield$getDatasourceD4,
|
|
149
144
|
access,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
_yield$
|
|
145
|
+
_destinationObjectTypes,
|
|
146
|
+
_extensionKey,
|
|
147
|
+
_yield$getDatasourceD4,
|
|
153
148
|
items,
|
|
154
149
|
nextPageCursor,
|
|
155
150
|
_totalCount,
|
|
@@ -183,16 +178,16 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
183
178
|
_context2.next = 11;
|
|
184
179
|
return getDatasourceData(datasourceId, datasourceDataRequest, shouldForceRequest);
|
|
185
180
|
case 11:
|
|
186
|
-
_yield$
|
|
187
|
-
_yield$
|
|
188
|
-
access = _yield$
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
_yield$
|
|
192
|
-
items = _yield$
|
|
193
|
-
nextPageCursor = _yield$
|
|
194
|
-
_totalCount = _yield$
|
|
195
|
-
schema = _yield$
|
|
181
|
+
_yield$getDatasourceD2 = _context2.sent;
|
|
182
|
+
_yield$getDatasourceD3 = _yield$getDatasourceD2.meta;
|
|
183
|
+
access = _yield$getDatasourceD3.access;
|
|
184
|
+
_destinationObjectTypes = _yield$getDatasourceD3.destinationObjectTypes;
|
|
185
|
+
_extensionKey = _yield$getDatasourceD3.extensionKey;
|
|
186
|
+
_yield$getDatasourceD4 = _yield$getDatasourceD2.data;
|
|
187
|
+
items = _yield$getDatasourceD4.items;
|
|
188
|
+
nextPageCursor = _yield$getDatasourceD4.nextPageCursor;
|
|
189
|
+
_totalCount = _yield$getDatasourceD4.totalCount;
|
|
190
|
+
schema = _yield$getDatasourceD4.schema;
|
|
196
191
|
if (!(access === 'forbidden' || access === 'unauthorized')) {
|
|
197
192
|
_context2.next = 24;
|
|
198
193
|
break;
|
|
@@ -200,8 +195,8 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
200
195
|
setStatus('unauthorized');
|
|
201
196
|
return _context2.abrupt("return");
|
|
202
197
|
case 24:
|
|
203
|
-
setExtensionKey(
|
|
204
|
-
setDestinationObjectTypes(
|
|
198
|
+
setExtensionKey(_extensionKey);
|
|
199
|
+
setDestinationObjectTypes(_destinationObjectTypes);
|
|
205
200
|
setTotalCount(_totalCount);
|
|
206
201
|
setNextCursor(nextPageCursor);
|
|
207
202
|
setResponseItems(function (currentResponseItems) {
|
|
@@ -210,7 +205,6 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
210
205
|
}
|
|
211
206
|
return [].concat((0, _toConsumableArray2.default)(currentResponseItems), (0, _toConsumableArray2.default)(items));
|
|
212
207
|
});
|
|
213
|
-
setStatus('resolved');
|
|
214
208
|
setHasNextPage(Boolean(nextPageCursor));
|
|
215
209
|
if (fieldKeys.length > 0) {
|
|
216
210
|
setLastRequestedFieldKeys(fieldKeys);
|
|
@@ -223,11 +217,12 @@ var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
223
217
|
currentLoadedItemCount = (responseItems === null || responseItems === void 0 ? void 0 : responseItems.length) || 0;
|
|
224
218
|
newlyLoadedItemCount = (items === null || items === void 0 ? void 0 : items.length) || 0;
|
|
225
219
|
fireEvent('track.nextItem.loaded', {
|
|
226
|
-
extensionKey:
|
|
227
|
-
destinationObjectTypes:
|
|
220
|
+
extensionKey: _extensionKey,
|
|
221
|
+
destinationObjectTypes: _destinationObjectTypes,
|
|
228
222
|
loadedItemCount: currentLoadedItemCount + newlyLoadedItemCount
|
|
229
223
|
});
|
|
230
224
|
}
|
|
225
|
+
setStatus('resolved');
|
|
231
226
|
_context2.next = 40;
|
|
232
227
|
break;
|
|
233
228
|
case 37:
|
|
@@ -231,7 +231,7 @@ var analyticsContextAttributes = {
|
|
|
231
231
|
};
|
|
232
232
|
var analyticsContextData = {
|
|
233
233
|
packageName: "@atlaskit/link-datasource",
|
|
234
|
-
packageVersion: "1.2.
|
|
234
|
+
packageVersion: "1.2.3",
|
|
235
235
|
source: 'datasourceConfigModal'
|
|
236
236
|
};
|
|
237
237
|
var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
|
|
@@ -48,12 +48,15 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
48
48
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
49
49
|
var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
|
|
50
50
|
tableRenderInstanceId = _useRef.current;
|
|
51
|
+
var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
51
52
|
|
|
52
53
|
/* Need this to make sure that the datasource in the editor gets updated new info if any edits are made in the modal
|
|
53
54
|
But we don't want to call it on initial load. This screws up useDatasourceTableState's internal
|
|
54
55
|
mechanism of initial loading. Use of ref here makes it basically work as a `componentDidUpdate` but not `componentDidMount`
|
|
55
56
|
*/
|
|
56
57
|
var isInitialRender = (0, _react.useRef)(true);
|
|
58
|
+
var isDataReady = columns.length > 0 && responseItems.length > 0 && totalCount && totalCount > 0;
|
|
59
|
+
visibleColumnCount.current = (visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0;
|
|
57
60
|
(0, _react.useEffect)(function () {
|
|
58
61
|
if (!isInitialRender.current) {
|
|
59
62
|
reset();
|
|
@@ -65,6 +68,18 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
65
68
|
onVisibleColumnKeysChange(defaultVisibleColumnKeys);
|
|
66
69
|
}
|
|
67
70
|
}, [visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange]);
|
|
71
|
+
(0, _react.useEffect)(function () {
|
|
72
|
+
var isTableViewRenderedWithData = status === 'resolved' && isDataReady;
|
|
73
|
+
if (isTableViewRenderedWithData) {
|
|
74
|
+
fireEvent('ui.datasource.renderSuccess', {
|
|
75
|
+
extensionKey: extensionKey,
|
|
76
|
+
destinationObjectTypes: destinationObjectTypes,
|
|
77
|
+
totalItemCount: totalCount,
|
|
78
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
79
|
+
display: 'table'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}, [totalCount, fireEvent, status, extensionKey, destinationObjectTypes, isDataReady]);
|
|
68
83
|
(0, _react.useEffect)(function () {
|
|
69
84
|
var shouldStartUfoExperience = datasourceId && parameters && visibleColumnKeys && status === 'loading';
|
|
70
85
|
if (shouldStartUfoExperience) {
|
|
@@ -101,7 +116,6 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
101
116
|
onRefresh: reset
|
|
102
117
|
});
|
|
103
118
|
}
|
|
104
|
-
var isDataReady = columns.length > 0;
|
|
105
119
|
return (
|
|
106
120
|
// datasource-table classname is to exclude all children from being commentable - exclude list is in CFE
|
|
107
121
|
(0, _react2.jsx)("div", {
|
|
@@ -120,6 +120,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
120
120
|
var searchCount = (0, _react.useRef)(0);
|
|
121
121
|
var userInteractionActions = (0, _react.useRef)(new Set());
|
|
122
122
|
var lastSearchMethodRef = (0, _react.useRef)(null);
|
|
123
|
+
var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
123
124
|
var parameters = (0, _react.useMemo)(function () {
|
|
124
125
|
return !!cloudId ? {
|
|
125
126
|
cloudId: cloudId,
|
|
@@ -164,7 +165,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
164
165
|
}) || availableSites[0];
|
|
165
166
|
}
|
|
166
167
|
}, [availableSites, cloudId]);
|
|
167
|
-
var
|
|
168
|
+
var analyticsPayload = (0, _react.useMemo)(function () {
|
|
168
169
|
return {
|
|
169
170
|
extensionKey: extensionKey,
|
|
170
171
|
destinationObjectTypes: destinationObjectTypes
|
|
@@ -174,6 +175,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
174
175
|
var jqlUrl = selectedJiraSite && jql && "".concat(selectedJiraSite.url, "/issues/?jql=").concat(encodeURI(jql));
|
|
175
176
|
var isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading' || resolvedWithNoResults;
|
|
176
177
|
var shouldShowIssueCount = !!totalCount && totalCount !== 1 && currentViewMode === 'issue';
|
|
178
|
+
var isDataReady = (visibleColumnKeys || []).length > 0;
|
|
177
179
|
(0, _react.useEffect)(function () {
|
|
178
180
|
var shouldStartUfoExperience = status === 'loading';
|
|
179
181
|
if (shouldStartUfoExperience) {
|
|
@@ -194,6 +196,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
194
196
|
}, [fireEvent]);
|
|
195
197
|
(0, _react.useEffect)(function () {
|
|
196
198
|
var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
|
|
199
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
197
200
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
198
201
|
}, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
|
|
199
202
|
(0, _react.useEffect)(function () {
|
|
@@ -229,32 +232,48 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
229
232
|
}
|
|
230
233
|
}, [cloudId, selectedJiraSite]);
|
|
231
234
|
var fireSingleItemViewedEvent = (0, _react.useCallback)(function () {
|
|
232
|
-
fireEvent('ui.link.viewed.singleItem', {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
});
|
|
237
|
-
}, [extensionKey, fireEvent, destinationObjectTypes]);
|
|
235
|
+
fireEvent('ui.link.viewed.singleItem', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
236
|
+
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current)
|
|
237
|
+
}));
|
|
238
|
+
}, [analyticsPayload, fireEvent]);
|
|
238
239
|
var fireCountViewedEvent = (0, _react.useCallback)(function () {
|
|
239
|
-
fireEvent('ui.link.viewed.count', {
|
|
240
|
-
destinationObjectTypes: destinationObjectTypes,
|
|
240
|
+
fireEvent('ui.link.viewed.count', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
241
241
|
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current),
|
|
242
|
-
extensionKey: extensionKey,
|
|
243
242
|
totalItemCount: totalCount || 0
|
|
244
|
-
});
|
|
245
|
-
}, [
|
|
243
|
+
}));
|
|
244
|
+
}, [analyticsPayload, fireEvent, totalCount]);
|
|
245
|
+
var fireTableViewedEvent = (0, _react.useCallback)(function () {
|
|
246
|
+
if (isDataReady) {
|
|
247
|
+
fireEvent('ui.table.viewed.datasourceConfigModal', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
248
|
+
totalItemCount: totalCount || 0,
|
|
249
|
+
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current),
|
|
250
|
+
displayedColumnCount: visibleColumnCount.current
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
}, [analyticsPayload, fireEvent, totalCount, isDataReady]);
|
|
254
|
+
var fireIssueViewAnalytics = (0, _react.useCallback)(function () {
|
|
255
|
+
if (!totalCount) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (totalCount > 1) {
|
|
259
|
+
fireTableViewedEvent();
|
|
260
|
+
} else if (totalCount === 1) {
|
|
261
|
+
fireSingleItemViewedEvent();
|
|
262
|
+
}
|
|
263
|
+
}, [fireSingleItemViewedEvent, fireTableViewedEvent, totalCount]);
|
|
246
264
|
(0, _react.useEffect)(function () {
|
|
247
265
|
var isResolved = status === 'resolved';
|
|
248
|
-
var
|
|
249
|
-
var
|
|
250
|
-
if (isResolved) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
266
|
+
var isIssueViewMode = currentViewMode === 'issue';
|
|
267
|
+
var isCountViewMode = currentViewMode === 'count';
|
|
268
|
+
if (!isResolved) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (isIssueViewMode) {
|
|
272
|
+
fireIssueViewAnalytics();
|
|
273
|
+
} else if (isCountViewMode) {
|
|
274
|
+
fireCountViewedEvent();
|
|
256
275
|
}
|
|
257
|
-
}, [currentViewMode,
|
|
276
|
+
}, [currentViewMode, status, fireIssueViewAnalytics, fireCountViewedEvent]);
|
|
258
277
|
var onSearch = (0, _react.useCallback)(function (newParameters, searchMethod) {
|
|
259
278
|
searchCount.current++;
|
|
260
279
|
lastSearchMethodRef.current = searchMethod;
|
|
@@ -270,13 +289,13 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
270
289
|
analyticEvent.update({
|
|
271
290
|
eventType: 'ui',
|
|
272
291
|
actionSubjectId: 'cancel',
|
|
273
|
-
attributes: _objectSpread(_objectSpread({},
|
|
274
|
-
|
|
275
|
-
|
|
292
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
293
|
+
searchCount: searchCount.current,
|
|
294
|
+
actions: Array.from(userInteractionActions.current)
|
|
276
295
|
})
|
|
277
296
|
}).fire(_analytics.EVENT_CHANNEL);
|
|
278
297
|
onCancel();
|
|
279
|
-
}, [
|
|
298
|
+
}, [analyticsPayload, onCancel]);
|
|
280
299
|
var onSiteSelection = (0, _react.useCallback)(function (site) {
|
|
281
300
|
userInteractionActions.current.add(_types.DatasourceAction.INSTANCE_UPDATED);
|
|
282
301
|
setCloudId(site.cloudId);
|
|
@@ -298,13 +317,13 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
298
317
|
}
|
|
299
318
|
var insertButtonClickedEvent = analyticsEvent.update({
|
|
300
319
|
actionSubjectId: 'insert',
|
|
301
|
-
attributes: _objectSpread(_objectSpread({},
|
|
302
|
-
actions: Array.from(userInteractionActions.current),
|
|
320
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
303
321
|
totalItemCount: totalCount || 0,
|
|
304
|
-
displayedColumnCount:
|
|
322
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
305
323
|
display: getDisplayValue(currentViewMode, totalCount || 0),
|
|
306
324
|
searchCount: searchCount.current,
|
|
307
|
-
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current)
|
|
325
|
+
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current),
|
|
326
|
+
actions: Array.from(userInteractionActions.current)
|
|
308
327
|
}),
|
|
309
328
|
eventType: 'ui'
|
|
310
329
|
});
|
|
@@ -351,7 +370,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
351
370
|
}
|
|
352
371
|
}, consumerEvent);
|
|
353
372
|
}
|
|
354
|
-
}, [isParametersSet, jql, selectedJiraSite,
|
|
373
|
+
}, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId]);
|
|
355
374
|
var handleViewModeChange = function handleViewModeChange(selectedMode) {
|
|
356
375
|
userInteractionActions.current.add(_types.DatasourceAction.DISPLAY_VIEW_CHANGED);
|
|
357
376
|
setCurrentViewMode(selectedMode);
|
|
@@ -364,6 +383,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
364
383
|
var newVisibleColumnKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
365
384
|
var columnAction = getColumnAction(visibleColumnKeys || [], newVisibleColumnKeys);
|
|
366
385
|
userInteractionActions.current.add(columnAction);
|
|
386
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
367
387
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
368
388
|
}, [visibleColumnKeys]);
|
|
369
389
|
var issueLikeDataTableView = (0, _react.useMemo)(function () {
|
|
@@ -31,9 +31,7 @@ export const useDatasourceTableState = ({
|
|
|
31
31
|
try {
|
|
32
32
|
const {
|
|
33
33
|
meta: {
|
|
34
|
-
access
|
|
35
|
-
destinationObjectTypes,
|
|
36
|
-
extensionKey
|
|
34
|
+
access
|
|
37
35
|
},
|
|
38
36
|
data: {
|
|
39
37
|
schema
|
|
@@ -45,8 +43,6 @@ export const useDatasourceTableState = ({
|
|
|
45
43
|
setStatus('unauthorized');
|
|
46
44
|
return;
|
|
47
45
|
}
|
|
48
|
-
setExtensionKey(extensionKey);
|
|
49
|
-
setDestinationObjectTypes(destinationObjectTypes);
|
|
50
46
|
const isColumnNotPresentInCurrentColumnsList = col => !columns.find(column => column.key === col.key);
|
|
51
47
|
const allColumns = schema.properties;
|
|
52
48
|
const newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
|
|
@@ -118,7 +114,6 @@ export const useDatasourceTableState = ({
|
|
|
118
114
|
}
|
|
119
115
|
return [...currentResponseItems, ...items];
|
|
120
116
|
});
|
|
121
|
-
setStatus('resolved');
|
|
122
117
|
setHasNextPage(Boolean(nextPageCursor));
|
|
123
118
|
if (fieldKeys.length > 0) {
|
|
124
119
|
setLastRequestedFieldKeys(fieldKeys);
|
|
@@ -136,6 +131,7 @@ export const useDatasourceTableState = ({
|
|
|
136
131
|
loadedItemCount: currentLoadedItemCount + newlyLoadedItemCount
|
|
137
132
|
});
|
|
138
133
|
}
|
|
134
|
+
setStatus('resolved');
|
|
139
135
|
} catch (e) {
|
|
140
136
|
setStatus('rejected');
|
|
141
137
|
}
|
|
@@ -43,12 +43,15 @@ const DatasourceTableViewWithoutAnalytics = ({
|
|
|
43
43
|
const {
|
|
44
44
|
current: tableRenderInstanceId
|
|
45
45
|
} = useRef(uuidv4());
|
|
46
|
+
const visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
46
47
|
|
|
47
48
|
/* Need this to make sure that the datasource in the editor gets updated new info if any edits are made in the modal
|
|
48
49
|
But we don't want to call it on initial load. This screws up useDatasourceTableState's internal
|
|
49
50
|
mechanism of initial loading. Use of ref here makes it basically work as a `componentDidUpdate` but not `componentDidMount`
|
|
50
51
|
*/
|
|
51
52
|
const isInitialRender = useRef(true);
|
|
53
|
+
const isDataReady = columns.length > 0 && responseItems.length > 0 && totalCount && totalCount > 0;
|
|
54
|
+
visibleColumnCount.current = (visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0;
|
|
52
55
|
useEffect(() => {
|
|
53
56
|
if (!isInitialRender.current) {
|
|
54
57
|
reset();
|
|
@@ -60,6 +63,18 @@ const DatasourceTableViewWithoutAnalytics = ({
|
|
|
60
63
|
onVisibleColumnKeysChange(defaultVisibleColumnKeys);
|
|
61
64
|
}
|
|
62
65
|
}, [visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
const isTableViewRenderedWithData = status === 'resolved' && isDataReady;
|
|
68
|
+
if (isTableViewRenderedWithData) {
|
|
69
|
+
fireEvent('ui.datasource.renderSuccess', {
|
|
70
|
+
extensionKey,
|
|
71
|
+
destinationObjectTypes,
|
|
72
|
+
totalItemCount: totalCount,
|
|
73
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
74
|
+
display: 'table'
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}, [totalCount, fireEvent, status, extensionKey, destinationObjectTypes, isDataReady]);
|
|
63
78
|
useEffect(() => {
|
|
64
79
|
const shouldStartUfoExperience = datasourceId && parameters && visibleColumnKeys && status === 'loading';
|
|
65
80
|
if (shouldStartUfoExperience) {
|
|
@@ -96,7 +111,6 @@ const DatasourceTableViewWithoutAnalytics = ({
|
|
|
96
111
|
onRefresh: reset
|
|
97
112
|
});
|
|
98
113
|
}
|
|
99
|
-
const isDataReady = columns.length > 0;
|
|
100
114
|
return (
|
|
101
115
|
// datasource-table classname is to exclude all children from being commentable - exclude list is in CFE
|
|
102
116
|
jsx("div", {
|
|
@@ -91,6 +91,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
91
91
|
const searchCount = useRef(0);
|
|
92
92
|
const userInteractionActions = useRef(new Set());
|
|
93
93
|
const lastSearchMethodRef = useRef(null);
|
|
94
|
+
const visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
94
95
|
const parameters = useMemo(() => !!cloudId ? {
|
|
95
96
|
cloudId,
|
|
96
97
|
jql: jql || ''
|
|
@@ -132,7 +133,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
132
133
|
return availableSites.find(jiraSite => jiraSite.url === currentlyLoggedInSiteUrl) || availableSites[0];
|
|
133
134
|
}
|
|
134
135
|
}, [availableSites, cloudId]);
|
|
135
|
-
const
|
|
136
|
+
const analyticsPayload = useMemo(() => {
|
|
136
137
|
return {
|
|
137
138
|
extensionKey: extensionKey,
|
|
138
139
|
destinationObjectTypes: destinationObjectTypes
|
|
@@ -142,6 +143,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
142
143
|
const jqlUrl = selectedJiraSite && jql && `${selectedJiraSite.url}/issues/?jql=${encodeURI(jql)}`;
|
|
143
144
|
const isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading' || resolvedWithNoResults;
|
|
144
145
|
const shouldShowIssueCount = !!totalCount && totalCount !== 1 && currentViewMode === 'issue';
|
|
146
|
+
const isDataReady = (visibleColumnKeys || []).length > 0;
|
|
145
147
|
useEffect(() => {
|
|
146
148
|
const shouldStartUfoExperience = status === 'loading';
|
|
147
149
|
if (shouldStartUfoExperience) {
|
|
@@ -162,6 +164,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
162
164
|
}, [fireEvent]);
|
|
163
165
|
useEffect(() => {
|
|
164
166
|
const newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
|
|
167
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
165
168
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
166
169
|
}, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
|
|
167
170
|
useEffect(() => {
|
|
@@ -181,31 +184,50 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
181
184
|
}, [cloudId, selectedJiraSite]);
|
|
182
185
|
const fireSingleItemViewedEvent = useCallback(() => {
|
|
183
186
|
fireEvent('ui.link.viewed.singleItem', {
|
|
184
|
-
|
|
185
|
-
searchMethod: mapSearchMethod(lastSearchMethodRef.current)
|
|
186
|
-
extensionKey: extensionKey
|
|
187
|
+
...analyticsPayload,
|
|
188
|
+
searchMethod: mapSearchMethod(lastSearchMethodRef.current)
|
|
187
189
|
});
|
|
188
|
-
}, [
|
|
190
|
+
}, [analyticsPayload, fireEvent]);
|
|
189
191
|
const fireCountViewedEvent = useCallback(() => {
|
|
190
192
|
fireEvent('ui.link.viewed.count', {
|
|
191
|
-
|
|
193
|
+
...analyticsPayload,
|
|
192
194
|
searchMethod: mapSearchMethod(lastSearchMethodRef.current),
|
|
193
|
-
extensionKey: extensionKey,
|
|
194
195
|
totalItemCount: totalCount || 0
|
|
195
196
|
});
|
|
196
|
-
}, [
|
|
197
|
+
}, [analyticsPayload, fireEvent, totalCount]);
|
|
198
|
+
const fireTableViewedEvent = useCallback(() => {
|
|
199
|
+
if (isDataReady) {
|
|
200
|
+
fireEvent('ui.table.viewed.datasourceConfigModal', {
|
|
201
|
+
...analyticsPayload,
|
|
202
|
+
totalItemCount: totalCount || 0,
|
|
203
|
+
searchMethod: mapSearchMethod(lastSearchMethodRef.current),
|
|
204
|
+
displayedColumnCount: visibleColumnCount.current
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}, [analyticsPayload, fireEvent, totalCount, isDataReady]);
|
|
208
|
+
const fireIssueViewAnalytics = useCallback(() => {
|
|
209
|
+
if (!totalCount) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (totalCount > 1) {
|
|
213
|
+
fireTableViewedEvent();
|
|
214
|
+
} else if (totalCount === 1) {
|
|
215
|
+
fireSingleItemViewedEvent();
|
|
216
|
+
}
|
|
217
|
+
}, [fireSingleItemViewedEvent, fireTableViewedEvent, totalCount]);
|
|
197
218
|
useEffect(() => {
|
|
198
219
|
const isResolved = status === 'resolved';
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
if (isResolved) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
220
|
+
const isIssueViewMode = currentViewMode === 'issue';
|
|
221
|
+
const isCountViewMode = currentViewMode === 'count';
|
|
222
|
+
if (!isResolved) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (isIssueViewMode) {
|
|
226
|
+
fireIssueViewAnalytics();
|
|
227
|
+
} else if (isCountViewMode) {
|
|
228
|
+
fireCountViewedEvent();
|
|
207
229
|
}
|
|
208
|
-
}, [currentViewMode,
|
|
230
|
+
}, [currentViewMode, status, fireIssueViewAnalytics, fireCountViewedEvent]);
|
|
209
231
|
const onSearch = useCallback((newParameters, searchMethod) => {
|
|
210
232
|
searchCount.current++;
|
|
211
233
|
lastSearchMethodRef.current = searchMethod;
|
|
@@ -222,13 +244,13 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
222
244
|
eventType: 'ui',
|
|
223
245
|
actionSubjectId: 'cancel',
|
|
224
246
|
attributes: {
|
|
225
|
-
...
|
|
226
|
-
|
|
227
|
-
|
|
247
|
+
...analyticsPayload,
|
|
248
|
+
searchCount: searchCount.current,
|
|
249
|
+
actions: Array.from(userInteractionActions.current)
|
|
228
250
|
}
|
|
229
251
|
}).fire(EVENT_CHANNEL);
|
|
230
252
|
onCancel();
|
|
231
|
-
}, [
|
|
253
|
+
}, [analyticsPayload, onCancel]);
|
|
232
254
|
const onSiteSelection = useCallback(site => {
|
|
233
255
|
userInteractionActions.current.add(DatasourceAction.INSTANCE_UPDATED);
|
|
234
256
|
setCloudId(site.cloudId);
|
|
@@ -250,13 +272,13 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
250
272
|
const insertButtonClickedEvent = analyticsEvent.update({
|
|
251
273
|
actionSubjectId: 'insert',
|
|
252
274
|
attributes: {
|
|
253
|
-
...
|
|
254
|
-
actions: Array.from(userInteractionActions.current),
|
|
275
|
+
...analyticsPayload,
|
|
255
276
|
totalItemCount: totalCount || 0,
|
|
256
|
-
displayedColumnCount:
|
|
277
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
257
278
|
display: getDisplayValue(currentViewMode, totalCount || 0),
|
|
258
279
|
searchCount: searchCount.current,
|
|
259
|
-
searchMethod: mapSearchMethod(lastSearchMethodRef.current)
|
|
280
|
+
searchMethod: mapSearchMethod(lastSearchMethodRef.current),
|
|
281
|
+
actions: Array.from(userInteractionActions.current)
|
|
260
282
|
},
|
|
261
283
|
eventType: 'ui'
|
|
262
284
|
});
|
|
@@ -301,7 +323,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
301
323
|
}
|
|
302
324
|
}, consumerEvent);
|
|
303
325
|
}
|
|
304
|
-
}, [isParametersSet, jql, selectedJiraSite,
|
|
326
|
+
}, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId]);
|
|
305
327
|
const handleViewModeChange = selectedMode => {
|
|
306
328
|
userInteractionActions.current.add(DatasourceAction.DISPLAY_VIEW_CHANGED);
|
|
307
329
|
setCurrentViewMode(selectedMode);
|
|
@@ -313,6 +335,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
313
335
|
const handleVisibleColumnKeysChange = useCallback((newVisibleColumnKeys = []) => {
|
|
314
336
|
const columnAction = getColumnAction(visibleColumnKeys || [], newVisibleColumnKeys);
|
|
315
337
|
userInteractionActions.current.add(columnAction);
|
|
338
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
316
339
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
317
340
|
}, [visibleColumnKeys]);
|
|
318
341
|
const issueLikeDataTableView = useMemo(() => jsx("div", {
|
|
@@ -60,7 +60,7 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
60
60
|
getDatasourceData = _useDatasourceClientE.getDatasourceData,
|
|
61
61
|
getDatasourceDetails = _useDatasourceClientE.getDatasourceDetails;
|
|
62
62
|
var loadDatasourceDetails = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
63
|
-
var _yield$getDatasourceD,
|
|
63
|
+
var _yield$getDatasourceD, access, schema, isColumnNotPresentInCurrentColumnsList, allColumns, newColumns;
|
|
64
64
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
65
65
|
while (1) switch (_context.prev = _context.next) {
|
|
66
66
|
case 0:
|
|
@@ -77,20 +77,15 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
77
77
|
});
|
|
78
78
|
case 5:
|
|
79
79
|
_yield$getDatasourceD = _context.sent;
|
|
80
|
-
|
|
81
|
-
access = _yield$getDatasourceD2.access;
|
|
82
|
-
_destinationObjectTypes = _yield$getDatasourceD2.destinationObjectTypes;
|
|
83
|
-
_extensionKey = _yield$getDatasourceD2.extensionKey;
|
|
80
|
+
access = _yield$getDatasourceD.meta.access;
|
|
84
81
|
schema = _yield$getDatasourceD.data.schema;
|
|
85
82
|
if (!(access === 'forbidden' || access === 'unauthorized')) {
|
|
86
|
-
_context.next =
|
|
83
|
+
_context.next = 11;
|
|
87
84
|
break;
|
|
88
85
|
}
|
|
89
86
|
setStatus('unauthorized');
|
|
90
87
|
return _context.abrupt("return");
|
|
91
|
-
case
|
|
92
|
-
setExtensionKey(_extensionKey);
|
|
93
|
-
setDestinationObjectTypes(_destinationObjectTypes);
|
|
88
|
+
case 11:
|
|
94
89
|
isColumnNotPresentInCurrentColumnsList = function isColumnNotPresentInCurrentColumnsList(col) {
|
|
95
90
|
return !columns.find(function (column) {
|
|
96
91
|
return column.key === col.key;
|
|
@@ -99,17 +94,17 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
99
94
|
allColumns = schema.properties;
|
|
100
95
|
newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
|
|
101
96
|
newColumns.length > 0 && setColumns([].concat(_toConsumableArray(columns), _toConsumableArray(newColumns)));
|
|
102
|
-
_context.next =
|
|
97
|
+
_context.next = 20;
|
|
103
98
|
break;
|
|
104
|
-
case
|
|
105
|
-
_context.prev =
|
|
99
|
+
case 17:
|
|
100
|
+
_context.prev = 17;
|
|
106
101
|
_context.t0 = _context["catch"](2);
|
|
107
102
|
setStatus('rejected');
|
|
108
|
-
case
|
|
103
|
+
case 20:
|
|
109
104
|
case "end":
|
|
110
105
|
return _context.stop();
|
|
111
106
|
}
|
|
112
|
-
}, _callee, null, [[2,
|
|
107
|
+
}, _callee, null, [[2, 17]]);
|
|
113
108
|
})), [columns, datasourceId, getDatasourceDetails, parameters]);
|
|
114
109
|
var applySchemaProperties = useCallback(function (properties) {
|
|
115
110
|
if (columns.length === 0) {
|
|
@@ -137,12 +132,12 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
137
132
|
shouldForceRequest,
|
|
138
133
|
sortedFieldKeys,
|
|
139
134
|
datasourceDataRequest,
|
|
135
|
+
_yield$getDatasourceD2,
|
|
140
136
|
_yield$getDatasourceD3,
|
|
141
|
-
_yield$getDatasourceD4,
|
|
142
137
|
access,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
_yield$
|
|
138
|
+
_destinationObjectTypes,
|
|
139
|
+
_extensionKey,
|
|
140
|
+
_yield$getDatasourceD4,
|
|
146
141
|
items,
|
|
147
142
|
nextPageCursor,
|
|
148
143
|
_totalCount,
|
|
@@ -176,16 +171,16 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
176
171
|
_context2.next = 11;
|
|
177
172
|
return getDatasourceData(datasourceId, datasourceDataRequest, shouldForceRequest);
|
|
178
173
|
case 11:
|
|
179
|
-
_yield$
|
|
180
|
-
_yield$
|
|
181
|
-
access = _yield$
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
_yield$
|
|
185
|
-
items = _yield$
|
|
186
|
-
nextPageCursor = _yield$
|
|
187
|
-
_totalCount = _yield$
|
|
188
|
-
schema = _yield$
|
|
174
|
+
_yield$getDatasourceD2 = _context2.sent;
|
|
175
|
+
_yield$getDatasourceD3 = _yield$getDatasourceD2.meta;
|
|
176
|
+
access = _yield$getDatasourceD3.access;
|
|
177
|
+
_destinationObjectTypes = _yield$getDatasourceD3.destinationObjectTypes;
|
|
178
|
+
_extensionKey = _yield$getDatasourceD3.extensionKey;
|
|
179
|
+
_yield$getDatasourceD4 = _yield$getDatasourceD2.data;
|
|
180
|
+
items = _yield$getDatasourceD4.items;
|
|
181
|
+
nextPageCursor = _yield$getDatasourceD4.nextPageCursor;
|
|
182
|
+
_totalCount = _yield$getDatasourceD4.totalCount;
|
|
183
|
+
schema = _yield$getDatasourceD4.schema;
|
|
189
184
|
if (!(access === 'forbidden' || access === 'unauthorized')) {
|
|
190
185
|
_context2.next = 24;
|
|
191
186
|
break;
|
|
@@ -193,8 +188,8 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
193
188
|
setStatus('unauthorized');
|
|
194
189
|
return _context2.abrupt("return");
|
|
195
190
|
case 24:
|
|
196
|
-
setExtensionKey(
|
|
197
|
-
setDestinationObjectTypes(
|
|
191
|
+
setExtensionKey(_extensionKey);
|
|
192
|
+
setDestinationObjectTypes(_destinationObjectTypes);
|
|
198
193
|
setTotalCount(_totalCount);
|
|
199
194
|
setNextCursor(nextPageCursor);
|
|
200
195
|
setResponseItems(function (currentResponseItems) {
|
|
@@ -203,7 +198,6 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
203
198
|
}
|
|
204
199
|
return [].concat(_toConsumableArray(currentResponseItems), _toConsumableArray(items));
|
|
205
200
|
});
|
|
206
|
-
setStatus('resolved');
|
|
207
201
|
setHasNextPage(Boolean(nextPageCursor));
|
|
208
202
|
if (fieldKeys.length > 0) {
|
|
209
203
|
setLastRequestedFieldKeys(fieldKeys);
|
|
@@ -216,11 +210,12 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
|
|
|
216
210
|
currentLoadedItemCount = (responseItems === null || responseItems === void 0 ? void 0 : responseItems.length) || 0;
|
|
217
211
|
newlyLoadedItemCount = (items === null || items === void 0 ? void 0 : items.length) || 0;
|
|
218
212
|
fireEvent('track.nextItem.loaded', {
|
|
219
|
-
extensionKey:
|
|
220
|
-
destinationObjectTypes:
|
|
213
|
+
extensionKey: _extensionKey,
|
|
214
|
+
destinationObjectTypes: _destinationObjectTypes,
|
|
221
215
|
loadedItemCount: currentLoadedItemCount + newlyLoadedItemCount
|
|
222
216
|
});
|
|
223
217
|
}
|
|
218
|
+
setStatus('resolved');
|
|
224
219
|
_context2.next = 40;
|
|
225
220
|
break;
|
|
226
221
|
case 37:
|
|
@@ -222,7 +222,7 @@ var analyticsContextAttributes = {
|
|
|
222
222
|
};
|
|
223
223
|
var analyticsContextData = {
|
|
224
224
|
packageName: "@atlaskit/link-datasource",
|
|
225
|
-
packageVersion: "1.2.
|
|
225
|
+
packageVersion: "1.2.3",
|
|
226
226
|
source: 'datasourceConfigModal'
|
|
227
227
|
};
|
|
228
228
|
var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
|
|
@@ -40,12 +40,15 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
40
40
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
41
41
|
var _useRef = useRef(uuidv4()),
|
|
42
42
|
tableRenderInstanceId = _useRef.current;
|
|
43
|
+
var visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
43
44
|
|
|
44
45
|
/* Need this to make sure that the datasource in the editor gets updated new info if any edits are made in the modal
|
|
45
46
|
But we don't want to call it on initial load. This screws up useDatasourceTableState's internal
|
|
46
47
|
mechanism of initial loading. Use of ref here makes it basically work as a `componentDidUpdate` but not `componentDidMount`
|
|
47
48
|
*/
|
|
48
49
|
var isInitialRender = useRef(true);
|
|
50
|
+
var isDataReady = columns.length > 0 && responseItems.length > 0 && totalCount && totalCount > 0;
|
|
51
|
+
visibleColumnCount.current = (visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0;
|
|
49
52
|
useEffect(function () {
|
|
50
53
|
if (!isInitialRender.current) {
|
|
51
54
|
reset();
|
|
@@ -57,6 +60,18 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
57
60
|
onVisibleColumnKeysChange(defaultVisibleColumnKeys);
|
|
58
61
|
}
|
|
59
62
|
}, [visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange]);
|
|
63
|
+
useEffect(function () {
|
|
64
|
+
var isTableViewRenderedWithData = status === 'resolved' && isDataReady;
|
|
65
|
+
if (isTableViewRenderedWithData) {
|
|
66
|
+
fireEvent('ui.datasource.renderSuccess', {
|
|
67
|
+
extensionKey: extensionKey,
|
|
68
|
+
destinationObjectTypes: destinationObjectTypes,
|
|
69
|
+
totalItemCount: totalCount,
|
|
70
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
71
|
+
display: 'table'
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}, [totalCount, fireEvent, status, extensionKey, destinationObjectTypes, isDataReady]);
|
|
60
75
|
useEffect(function () {
|
|
61
76
|
var shouldStartUfoExperience = datasourceId && parameters && visibleColumnKeys && status === 'loading';
|
|
62
77
|
if (shouldStartUfoExperience) {
|
|
@@ -93,7 +108,6 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
93
108
|
onRefresh: reset
|
|
94
109
|
});
|
|
95
110
|
}
|
|
96
|
-
var isDataReady = columns.length > 0;
|
|
97
111
|
return (
|
|
98
112
|
// datasource-table classname is to exclude all children from being commentable - exclude list is in CFE
|
|
99
113
|
jsx("div", {
|
|
@@ -110,6 +110,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
110
110
|
var searchCount = useRef(0);
|
|
111
111
|
var userInteractionActions = useRef(new Set());
|
|
112
112
|
var lastSearchMethodRef = useRef(null);
|
|
113
|
+
var visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
113
114
|
var parameters = useMemo(function () {
|
|
114
115
|
return !!cloudId ? {
|
|
115
116
|
cloudId: cloudId,
|
|
@@ -154,7 +155,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
154
155
|
}) || availableSites[0];
|
|
155
156
|
}
|
|
156
157
|
}, [availableSites, cloudId]);
|
|
157
|
-
var
|
|
158
|
+
var analyticsPayload = useMemo(function () {
|
|
158
159
|
return {
|
|
159
160
|
extensionKey: extensionKey,
|
|
160
161
|
destinationObjectTypes: destinationObjectTypes
|
|
@@ -164,6 +165,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
164
165
|
var jqlUrl = selectedJiraSite && jql && "".concat(selectedJiraSite.url, "/issues/?jql=").concat(encodeURI(jql));
|
|
165
166
|
var isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading' || resolvedWithNoResults;
|
|
166
167
|
var shouldShowIssueCount = !!totalCount && totalCount !== 1 && currentViewMode === 'issue';
|
|
168
|
+
var isDataReady = (visibleColumnKeys || []).length > 0;
|
|
167
169
|
useEffect(function () {
|
|
168
170
|
var shouldStartUfoExperience = status === 'loading';
|
|
169
171
|
if (shouldStartUfoExperience) {
|
|
@@ -184,6 +186,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
184
186
|
}, [fireEvent]);
|
|
185
187
|
useEffect(function () {
|
|
186
188
|
var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
|
|
189
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
187
190
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
188
191
|
}, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
|
|
189
192
|
useEffect(function () {
|
|
@@ -219,32 +222,48 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
219
222
|
}
|
|
220
223
|
}, [cloudId, selectedJiraSite]);
|
|
221
224
|
var fireSingleItemViewedEvent = useCallback(function () {
|
|
222
|
-
fireEvent('ui.link.viewed.singleItem', {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
});
|
|
227
|
-
}, [extensionKey, fireEvent, destinationObjectTypes]);
|
|
225
|
+
fireEvent('ui.link.viewed.singleItem', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
226
|
+
searchMethod: mapSearchMethod(lastSearchMethodRef.current)
|
|
227
|
+
}));
|
|
228
|
+
}, [analyticsPayload, fireEvent]);
|
|
228
229
|
var fireCountViewedEvent = useCallback(function () {
|
|
229
|
-
fireEvent('ui.link.viewed.count', {
|
|
230
|
-
destinationObjectTypes: destinationObjectTypes,
|
|
230
|
+
fireEvent('ui.link.viewed.count', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
231
231
|
searchMethod: mapSearchMethod(lastSearchMethodRef.current),
|
|
232
|
-
extensionKey: extensionKey,
|
|
233
232
|
totalItemCount: totalCount || 0
|
|
234
|
-
});
|
|
235
|
-
}, [
|
|
233
|
+
}));
|
|
234
|
+
}, [analyticsPayload, fireEvent, totalCount]);
|
|
235
|
+
var fireTableViewedEvent = useCallback(function () {
|
|
236
|
+
if (isDataReady) {
|
|
237
|
+
fireEvent('ui.table.viewed.datasourceConfigModal', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
238
|
+
totalItemCount: totalCount || 0,
|
|
239
|
+
searchMethod: mapSearchMethod(lastSearchMethodRef.current),
|
|
240
|
+
displayedColumnCount: visibleColumnCount.current
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
}, [analyticsPayload, fireEvent, totalCount, isDataReady]);
|
|
244
|
+
var fireIssueViewAnalytics = useCallback(function () {
|
|
245
|
+
if (!totalCount) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (totalCount > 1) {
|
|
249
|
+
fireTableViewedEvent();
|
|
250
|
+
} else if (totalCount === 1) {
|
|
251
|
+
fireSingleItemViewedEvent();
|
|
252
|
+
}
|
|
253
|
+
}, [fireSingleItemViewedEvent, fireTableViewedEvent, totalCount]);
|
|
236
254
|
useEffect(function () {
|
|
237
255
|
var isResolved = status === 'resolved';
|
|
238
|
-
var
|
|
239
|
-
var
|
|
240
|
-
if (isResolved) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
256
|
+
var isIssueViewMode = currentViewMode === 'issue';
|
|
257
|
+
var isCountViewMode = currentViewMode === 'count';
|
|
258
|
+
if (!isResolved) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (isIssueViewMode) {
|
|
262
|
+
fireIssueViewAnalytics();
|
|
263
|
+
} else if (isCountViewMode) {
|
|
264
|
+
fireCountViewedEvent();
|
|
246
265
|
}
|
|
247
|
-
}, [currentViewMode,
|
|
266
|
+
}, [currentViewMode, status, fireIssueViewAnalytics, fireCountViewedEvent]);
|
|
248
267
|
var onSearch = useCallback(function (newParameters, searchMethod) {
|
|
249
268
|
searchCount.current++;
|
|
250
269
|
lastSearchMethodRef.current = searchMethod;
|
|
@@ -260,13 +279,13 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
260
279
|
analyticEvent.update({
|
|
261
280
|
eventType: 'ui',
|
|
262
281
|
actionSubjectId: 'cancel',
|
|
263
|
-
attributes: _objectSpread(_objectSpread({},
|
|
264
|
-
|
|
265
|
-
|
|
282
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
283
|
+
searchCount: searchCount.current,
|
|
284
|
+
actions: Array.from(userInteractionActions.current)
|
|
266
285
|
})
|
|
267
286
|
}).fire(EVENT_CHANNEL);
|
|
268
287
|
onCancel();
|
|
269
|
-
}, [
|
|
288
|
+
}, [analyticsPayload, onCancel]);
|
|
270
289
|
var onSiteSelection = useCallback(function (site) {
|
|
271
290
|
userInteractionActions.current.add(DatasourceAction.INSTANCE_UPDATED);
|
|
272
291
|
setCloudId(site.cloudId);
|
|
@@ -288,13 +307,13 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
288
307
|
}
|
|
289
308
|
var insertButtonClickedEvent = analyticsEvent.update({
|
|
290
309
|
actionSubjectId: 'insert',
|
|
291
|
-
attributes: _objectSpread(_objectSpread({},
|
|
292
|
-
actions: Array.from(userInteractionActions.current),
|
|
310
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
293
311
|
totalItemCount: totalCount || 0,
|
|
294
|
-
displayedColumnCount:
|
|
312
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
295
313
|
display: getDisplayValue(currentViewMode, totalCount || 0),
|
|
296
314
|
searchCount: searchCount.current,
|
|
297
|
-
searchMethod: mapSearchMethod(lastSearchMethodRef.current)
|
|
315
|
+
searchMethod: mapSearchMethod(lastSearchMethodRef.current),
|
|
316
|
+
actions: Array.from(userInteractionActions.current)
|
|
298
317
|
}),
|
|
299
318
|
eventType: 'ui'
|
|
300
319
|
});
|
|
@@ -341,7 +360,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
341
360
|
}
|
|
342
361
|
}, consumerEvent);
|
|
343
362
|
}
|
|
344
|
-
}, [isParametersSet, jql, selectedJiraSite,
|
|
363
|
+
}, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId]);
|
|
345
364
|
var handleViewModeChange = function handleViewModeChange(selectedMode) {
|
|
346
365
|
userInteractionActions.current.add(DatasourceAction.DISPLAY_VIEW_CHANGED);
|
|
347
366
|
setCurrentViewMode(selectedMode);
|
|
@@ -354,6 +373,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
354
373
|
var newVisibleColumnKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
355
374
|
var columnAction = getColumnAction(visibleColumnKeys || [], newVisibleColumnKeys);
|
|
356
375
|
userInteractionActions.current.add(columnAction);
|
|
376
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
357
377
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
358
378
|
}, [visibleColumnKeys]);
|
|
359
379
|
var issueLikeDataTableView = useMemo(function () {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::0262ba66242472aeffce99eacc538f23>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen link-datasource
|
|
8
8
|
*/
|
|
9
9
|
export type PackageMetaDataType = {
|
|
@@ -50,24 +50,24 @@ export type LinkClickedSingleItemAttributesType = {
|
|
|
50
50
|
extensionKey: string | null;
|
|
51
51
|
destinationObjectTypes: unknown[];
|
|
52
52
|
};
|
|
53
|
-
export type
|
|
53
|
+
export type DatasourceRenderSuccessAttributesType = {
|
|
54
54
|
totalItemCount: number;
|
|
55
55
|
destinationObjectTypes: unknown[];
|
|
56
56
|
displayedColumnCount: number | null;
|
|
57
57
|
extensionKey: string | null;
|
|
58
|
-
display: '
|
|
59
|
-
status: 'resolved' | 'unauthorized' | 'forbidden' | 'not_found' | 'errored';
|
|
58
|
+
display: 'table';
|
|
60
59
|
};
|
|
61
60
|
export type NextItemLoadedAttributesType = {
|
|
62
61
|
destinationObjectTypes: unknown[];
|
|
63
62
|
extensionKey: string | null;
|
|
64
63
|
loadedItemCount: number;
|
|
65
64
|
};
|
|
66
|
-
export type
|
|
65
|
+
export type TableViewedDatasourceConfigModalAttributesType = {
|
|
67
66
|
destinationObjectTypes: unknown[];
|
|
68
67
|
totalItemCount: number;
|
|
69
68
|
displayedColumnCount: number | null;
|
|
70
69
|
searchMethod: 'datasource_search_query' | 'datasource_basic_filter' | 'datasource_saved_filter' | null;
|
|
70
|
+
extensionKey: string | null;
|
|
71
71
|
};
|
|
72
72
|
export type LinkViewedSingleItemAttributesType = {
|
|
73
73
|
destinationObjectTypes: unknown[];
|
|
@@ -113,13 +113,13 @@ export type AnalyticsEventAttributes = {
|
|
|
113
113
|
'ui.link.clicked.singleItem': LinkClickedSingleItemAttributesType;
|
|
114
114
|
/**
|
|
115
115
|
* Fired when an inserted datasource resolves / renders. */
|
|
116
|
-
'ui.datasource.
|
|
116
|
+
'ui.datasource.renderSuccess': DatasourceRenderSuccessAttributesType;
|
|
117
117
|
/**
|
|
118
118
|
* Fired when user scrolls to the next page/list of the objects */
|
|
119
119
|
'track.nextItem.loaded': NextItemLoadedAttributesType;
|
|
120
120
|
/**
|
|
121
|
-
* Fired when the datasource results are displayed as table */
|
|
122
|
-
'ui.table.viewed.
|
|
121
|
+
* Fired when the datasource results are displayed as table inside of datasource configuration modal */
|
|
122
|
+
'ui.table.viewed.datasourceConfigModal': TableViewedDatasourceConfigModalAttributesType;
|
|
123
123
|
/**
|
|
124
124
|
* Fired when the datasource results are displayed as link(may be smart-link) for a single item */
|
|
125
125
|
'ui.link.viewed.singleItem': LinkViewedSingleItemAttributesType;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::0262ba66242472aeffce99eacc538f23>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen link-datasource
|
|
8
8
|
*/
|
|
9
9
|
export type PackageMetaDataType = {
|
|
@@ -50,24 +50,24 @@ export type LinkClickedSingleItemAttributesType = {
|
|
|
50
50
|
extensionKey: string | null;
|
|
51
51
|
destinationObjectTypes: unknown[];
|
|
52
52
|
};
|
|
53
|
-
export type
|
|
53
|
+
export type DatasourceRenderSuccessAttributesType = {
|
|
54
54
|
totalItemCount: number;
|
|
55
55
|
destinationObjectTypes: unknown[];
|
|
56
56
|
displayedColumnCount: number | null;
|
|
57
57
|
extensionKey: string | null;
|
|
58
|
-
display: '
|
|
59
|
-
status: 'resolved' | 'unauthorized' | 'forbidden' | 'not_found' | 'errored';
|
|
58
|
+
display: 'table';
|
|
60
59
|
};
|
|
61
60
|
export type NextItemLoadedAttributesType = {
|
|
62
61
|
destinationObjectTypes: unknown[];
|
|
63
62
|
extensionKey: string | null;
|
|
64
63
|
loadedItemCount: number;
|
|
65
64
|
};
|
|
66
|
-
export type
|
|
65
|
+
export type TableViewedDatasourceConfigModalAttributesType = {
|
|
67
66
|
destinationObjectTypes: unknown[];
|
|
68
67
|
totalItemCount: number;
|
|
69
68
|
displayedColumnCount: number | null;
|
|
70
69
|
searchMethod: 'datasource_search_query' | 'datasource_basic_filter' | 'datasource_saved_filter' | null;
|
|
70
|
+
extensionKey: string | null;
|
|
71
71
|
};
|
|
72
72
|
export type LinkViewedSingleItemAttributesType = {
|
|
73
73
|
destinationObjectTypes: unknown[];
|
|
@@ -113,13 +113,13 @@ export type AnalyticsEventAttributes = {
|
|
|
113
113
|
'ui.link.clicked.singleItem': LinkClickedSingleItemAttributesType;
|
|
114
114
|
/**
|
|
115
115
|
* Fired when an inserted datasource resolves / renders. */
|
|
116
|
-
'ui.datasource.
|
|
116
|
+
'ui.datasource.renderSuccess': DatasourceRenderSuccessAttributesType;
|
|
117
117
|
/**
|
|
118
118
|
* Fired when user scrolls to the next page/list of the objects */
|
|
119
119
|
'track.nextItem.loaded': NextItemLoadedAttributesType;
|
|
120
120
|
/**
|
|
121
|
-
* Fired when the datasource results are displayed as table */
|
|
122
|
-
'ui.table.viewed.
|
|
121
|
+
* Fired when the datasource results are displayed as table inside of datasource configuration modal */
|
|
122
|
+
'ui.table.viewed.datasourceConfigModal': TableViewedDatasourceConfigModalAttributesType;
|
|
123
123
|
/**
|
|
124
124
|
* Fired when the datasource results are displayed as link(may be smart-link) for a single item */
|
|
125
125
|
'ui.link.viewed.singleItem': LinkViewedSingleItemAttributesType;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/link-datasource",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "UI Components to support linking platform dataset feature",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@atlaskit/image": "^1.1.0",
|
|
45
45
|
"@atlaskit/jql-editor-autocomplete-rest": "^2.0.0",
|
|
46
46
|
"@atlaskit/link-client-extension": "^1.7.0",
|
|
47
|
-
"@atlaskit/linking-common": "^4.
|
|
47
|
+
"@atlaskit/linking-common": "^4.10.0",
|
|
48
48
|
"@atlaskit/linking-types": "^8.3.0",
|
|
49
49
|
"@atlaskit/lozenge": "^11.4.0",
|
|
50
50
|
"@atlaskit/modal-dialog": "^12.6.0",
|
|
@@ -53,12 +53,12 @@
|
|
|
53
53
|
"@atlaskit/pragmatic-drag-and-drop-react-beautiful-dnd-autoscroll": "^0.6.0",
|
|
54
54
|
"@atlaskit/pragmatic-drag-and-drop-react-indicator": "^0.16.0",
|
|
55
55
|
"@atlaskit/select": "^16.7.0",
|
|
56
|
-
"@atlaskit/smart-card": "^26.
|
|
56
|
+
"@atlaskit/smart-card": "^26.27.0",
|
|
57
57
|
"@atlaskit/spinner": "^15.5.0",
|
|
58
58
|
"@atlaskit/tag": "^11.6.0",
|
|
59
59
|
"@atlaskit/textfield": "5.6.7",
|
|
60
60
|
"@atlaskit/theme": "^12.6.0",
|
|
61
|
-
"@atlaskit/tokens": "^1.
|
|
61
|
+
"@atlaskit/tokens": "^1.24.0",
|
|
62
62
|
"@atlaskit/tooltip": "^17.8.0",
|
|
63
63
|
"@atlaskit/ufo": "^0.2.4",
|
|
64
64
|
"@atlassianlabs/jql-editor": "^2.0.1",
|