@atlaskit/link-datasource 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/analytics/ufoExperiences/index.js +51 -0
- package/dist/cjs/analytics/ufoExperiences/types.js +5 -0
- package/dist/cjs/analytics/ufoExperiences/useDataRenderedUfoExperience.js +52 -0
- 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 +21 -1
- package/dist/cjs/ui/issue-like-table/index.js +10 -1
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +73 -32
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/analytics/ufoExperiences/index.js +45 -0
- package/dist/es2019/analytics/ufoExperiences/types.js +1 -0
- package/dist/es2019/analytics/ufoExperiences/useDataRenderedUfoExperience.js +46 -0
- 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 +22 -1
- package/dist/es2019/ui/issue-like-table/index.js +10 -1
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +73 -28
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/analytics/ufoExperiences/index.js +41 -0
- package/dist/esm/analytics/ufoExperiences/types.js +1 -0
- package/dist/esm/analytics/ufoExperiences/useDataRenderedUfoExperience.js +45 -0
- 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 +21 -1
- package/dist/esm/ui/issue-like-table/index.js +10 -1
- package/dist/esm/ui/jira-issues-modal/modal/index.js +73 -32
- package/dist/types/analytics/generated/analytics.types.d.ts +5 -4
- package/dist/types/analytics/ufoExperiences/index.d.ts +5 -0
- package/dist/types/analytics/ufoExperiences/types.d.ts +8 -0
- package/dist/types/analytics/ufoExperiences/useDataRenderedUfoExperience.d.ts +22 -0
- package/dist/types/ui/issue-like-table/index.d.ts +1 -1
- package/dist/types/ui/issue-like-table/types.d.ts +4 -0
- package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +5 -4
- package/dist/types-ts4.5/analytics/ufoExperiences/index.d.ts +5 -0
- package/dist/types-ts4.5/analytics/ufoExperiences/types.d.ts +8 -0
- package/dist/types-ts4.5/analytics/ufoExperiences/useDataRenderedUfoExperience.d.ts +22 -0
- package/dist/types-ts4.5/ui/issue-like-table/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/issue-like-table/types.d.ts +4 -0
- package/package.json +8 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.2.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`ce3de76af77`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ce3de76af77) - Added ui.table.viewed event
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
|
|
10
|
+
## 1.2.1
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- [`103618b094f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/103618b094f) - Add UFO metrics to measure datasource rendering performance.
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
|
|
3
17
|
## 1.2.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.succeedUfoExperience = exports.startUfoExperience = exports.failUfoExperience = exports.addMetadataToExperience = void 0;
|
|
7
|
+
var _ufo = require("@atlaskit/ufo");
|
|
8
|
+
var datasourcePageSegmentLoadExperienceConfig = {
|
|
9
|
+
platform: {
|
|
10
|
+
component: 'datasource'
|
|
11
|
+
},
|
|
12
|
+
type: _ufo.ExperienceTypes.Load,
|
|
13
|
+
performanceType: _ufo.ExperiencePerformanceTypes.PageSegmentLoad
|
|
14
|
+
};
|
|
15
|
+
var ufoExperiences = {
|
|
16
|
+
'datasource-rendered': new _ufo.ConcurrentExperience('datasource-rendered', datasourcePageSegmentLoadExperienceConfig)
|
|
17
|
+
};
|
|
18
|
+
var startUfoExperience = function startUfoExperience(_ref, id) {
|
|
19
|
+
var name = _ref.name,
|
|
20
|
+
metadata = _ref.metadata;
|
|
21
|
+
var experienceInstance = ufoExperiences[name].getInstance(id);
|
|
22
|
+
experienceInstance.start();
|
|
23
|
+
if (metadata) {
|
|
24
|
+
experienceInstance.addMetadata(metadata);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.startUfoExperience = startUfoExperience;
|
|
28
|
+
var succeedUfoExperience = function succeedUfoExperience(_ref2, id) {
|
|
29
|
+
var name = _ref2.name,
|
|
30
|
+
metadata = _ref2.metadata;
|
|
31
|
+
var experienceInstance = ufoExperiences[name].getInstance(id);
|
|
32
|
+
experienceInstance.success({
|
|
33
|
+
metadata: metadata
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
exports.succeedUfoExperience = succeedUfoExperience;
|
|
37
|
+
var failUfoExperience = function failUfoExperience(_ref3, id) {
|
|
38
|
+
var name = _ref3.name,
|
|
39
|
+
metadata = _ref3.metadata;
|
|
40
|
+
var experienceInstance = ufoExperiences[name].getInstance(id);
|
|
41
|
+
experienceInstance.failure({
|
|
42
|
+
metadata: metadata
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
exports.failUfoExperience = failUfoExperience;
|
|
46
|
+
var addMetadataToExperience = function addMetadataToExperience(_ref4, id) {
|
|
47
|
+
var name = _ref4.name,
|
|
48
|
+
metadata = _ref4.metadata;
|
|
49
|
+
ufoExperiences[name].getInstance(id).addMetadata(metadata);
|
|
50
|
+
};
|
|
51
|
+
exports.addMetadataToExperience = addMetadataToExperience;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useDataRenderedUfoExperience = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _index = require("./index");
|
|
9
|
+
/**
|
|
10
|
+
* Hook to mark DataRendered UFO experience as either Success or Failure
|
|
11
|
+
* 1. Success when
|
|
12
|
+
* * its rendered as a link
|
|
13
|
+
* * it returns empty results
|
|
14
|
+
* * the request is unauthorized
|
|
15
|
+
* 2. Fail when
|
|
16
|
+
* * request is rejected
|
|
17
|
+
*
|
|
18
|
+
* Note:
|
|
19
|
+
* * When the request is resolved as a datasource table, it will be marked success in the table component, every other success case is marked by this hook
|
|
20
|
+
*/
|
|
21
|
+
var useDataRenderedUfoExperience = function useDataRenderedUfoExperience(_ref) {
|
|
22
|
+
var status = _ref.status,
|
|
23
|
+
experienceId = _ref.experienceId,
|
|
24
|
+
itemCount = _ref.itemCount,
|
|
25
|
+
canBeLink = _ref.canBeLink,
|
|
26
|
+
extensionKey = _ref.extensionKey;
|
|
27
|
+
(0, _react.useEffect)(function () {
|
|
28
|
+
var isEmptyResult = status === 'resolved' && itemCount === 0;
|
|
29
|
+
var isLink = status === 'resolved' && (itemCount === 1 || canBeLink); // this will take care of count-mode/single-item smart-link rendering
|
|
30
|
+
var isUnauthorized = status === 'unauthorized';
|
|
31
|
+
var shouldSucceedUfoExperience = isEmptyResult || isLink || isUnauthorized;
|
|
32
|
+
var shouldFailUfoExperience = status === 'rejected';
|
|
33
|
+
if (extensionKey) {
|
|
34
|
+
(0, _index.addMetadataToExperience)({
|
|
35
|
+
name: 'datasource-rendered',
|
|
36
|
+
metadata: {
|
|
37
|
+
extensionKey: extensionKey
|
|
38
|
+
}
|
|
39
|
+
}, experienceId);
|
|
40
|
+
}
|
|
41
|
+
if (shouldFailUfoExperience) {
|
|
42
|
+
(0, _index.failUfoExperience)({
|
|
43
|
+
name: 'datasource-rendered'
|
|
44
|
+
}, experienceId);
|
|
45
|
+
} else if (shouldSucceedUfoExperience) {
|
|
46
|
+
(0, _index.succeedUfoExperience)({
|
|
47
|
+
name: 'datasource-rendered'
|
|
48
|
+
}, experienceId);
|
|
49
|
+
}
|
|
50
|
+
}, [canBeLink, experienceId, extensionKey, itemCount, status]);
|
|
51
|
+
};
|
|
52
|
+
exports.useDataRenderedUfoExperience = useDataRenderedUfoExperience;
|
|
@@ -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.2",
|
|
235
235
|
source: 'datasourceConfigModal'
|
|
236
236
|
};
|
|
237
237
|
var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
|
|
@@ -7,9 +7,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.DatasourceTableView = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _react2 = require("@emotion/react");
|
|
10
|
+
var _uuid = require("uuid");
|
|
10
11
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
11
12
|
var _analytics = require("../../analytics");
|
|
12
13
|
var _constants = require("../../analytics/constants");
|
|
14
|
+
var _ufoExperiences = require("../../analytics/ufoExperiences");
|
|
15
|
+
var _useDataRenderedUfoExperience = require("../../analytics/ufoExperiences/useDataRenderedUfoExperience");
|
|
13
16
|
var _useDatasourceTableState = require("../../hooks/useDatasourceTableState");
|
|
14
17
|
var _accessRequired = require("../common/error-state/access-required");
|
|
15
18
|
var _loadingError = require("../common/error-state/loading-error");
|
|
@@ -43,6 +46,8 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
43
46
|
destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes;
|
|
44
47
|
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
45
48
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
49
|
+
var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
|
|
50
|
+
tableRenderInstanceId = _useRef.current;
|
|
46
51
|
|
|
47
52
|
/* Need this to make sure that the datasource in the editor gets updated new info if any edits are made in the modal
|
|
48
53
|
But we don't want to call it on initial load. This screws up useDatasourceTableState's internal
|
|
@@ -60,6 +65,20 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
60
65
|
onVisibleColumnKeysChange(defaultVisibleColumnKeys);
|
|
61
66
|
}
|
|
62
67
|
}, [visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange]);
|
|
68
|
+
(0, _react.useEffect)(function () {
|
|
69
|
+
var shouldStartUfoExperience = datasourceId && parameters && visibleColumnKeys && status === 'loading';
|
|
70
|
+
if (shouldStartUfoExperience) {
|
|
71
|
+
(0, _ufoExperiences.startUfoExperience)({
|
|
72
|
+
name: 'datasource-rendered'
|
|
73
|
+
}, tableRenderInstanceId);
|
|
74
|
+
}
|
|
75
|
+
}, [datasourceId, parameters, status, tableRenderInstanceId, visibleColumnKeys]);
|
|
76
|
+
(0, _useDataRenderedUfoExperience.useDataRenderedUfoExperience)({
|
|
77
|
+
status: status,
|
|
78
|
+
experienceId: tableRenderInstanceId,
|
|
79
|
+
itemCount: responseItems.length,
|
|
80
|
+
extensionKey: extensionKey
|
|
81
|
+
});
|
|
63
82
|
var forcedReset = (0, _react.useCallback)(function () {
|
|
64
83
|
fireEvent('ui.button.clicked.sync', {
|
|
65
84
|
extensionKey: extensionKey,
|
|
@@ -97,7 +116,8 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
97
116
|
columns: columns,
|
|
98
117
|
visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
|
|
99
118
|
onVisibleColumnKeysChange: onVisibleColumnKeysChange,
|
|
100
|
-
scrollableContainerHeight: 590
|
|
119
|
+
scrollableContainerHeight: 590,
|
|
120
|
+
parentContainerRenderInstanceId: tableRenderInstanceId
|
|
101
121
|
}) : (0, _react2.jsx)(_emptyState.default, {
|
|
102
122
|
testId: "datasource-table-view-skeleton",
|
|
103
123
|
isCompact: true,
|
|
@@ -24,6 +24,7 @@ var _element = require("@atlaskit/pragmatic-drag-and-drop/adapter/element");
|
|
|
24
24
|
var _combine = require("@atlaskit/pragmatic-drag-and-drop/util/combine");
|
|
25
25
|
var _colors = require("@atlaskit/theme/colors");
|
|
26
26
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
27
|
+
var _ufoExperiences = require("../../analytics/ufoExperiences");
|
|
27
28
|
var _columnPicker = require("./column-picker");
|
|
28
29
|
var _dragColumnPreview = require("./drag-column-preview");
|
|
29
30
|
var _draggableTableHeading = require("./draggable-table-heading");
|
|
@@ -122,7 +123,8 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
|
|
|
122
123
|
onVisibleColumnKeysChange = _ref2.onVisibleColumnKeysChange,
|
|
123
124
|
status = _ref2.status,
|
|
124
125
|
hasNextPage = _ref2.hasNextPage,
|
|
125
|
-
scrollableContainerHeight = _ref2.scrollableContainerHeight
|
|
126
|
+
scrollableContainerHeight = _ref2.scrollableContainerHeight,
|
|
127
|
+
parentContainerRenderInstanceId = _ref2.parentContainerRenderInstanceId;
|
|
126
128
|
var tableId = (0, _react.useMemo)(function () {
|
|
127
129
|
return Symbol('unique-id');
|
|
128
130
|
}, []);
|
|
@@ -145,6 +147,13 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
|
|
|
145
147
|
(0, _react.useEffect)(function () {
|
|
146
148
|
setOrderedColumns(orderColumns((0, _toConsumableArray2.default)(columns), (0, _toConsumableArray2.default)(visibleColumnKeys)));
|
|
147
149
|
}, [columns, visibleColumnKeys]);
|
|
150
|
+
(0, _react.useEffect)(function () {
|
|
151
|
+
if (parentContainerRenderInstanceId && status === 'resolved') {
|
|
152
|
+
(0, _ufoExperiences.succeedUfoExperience)({
|
|
153
|
+
name: 'datasource-rendered'
|
|
154
|
+
}, parentContainerRenderInstanceId);
|
|
155
|
+
}
|
|
156
|
+
}, [parentContainerRenderInstanceId, status]);
|
|
148
157
|
var visibleSortedColumns = (0, _react.useMemo)(function () {
|
|
149
158
|
return visibleColumnKeys.map(function (visibleKey) {
|
|
150
159
|
return orderedColumns.find(function (_ref3) {
|
|
@@ -14,6 +14,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
14
14
|
var _react = require("react");
|
|
15
15
|
var _react2 = require("@emotion/react");
|
|
16
16
|
var _reactIntlNext = require("react-intl-next");
|
|
17
|
+
var _uuid = require("uuid");
|
|
17
18
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
18
19
|
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
19
20
|
var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
|
|
@@ -21,6 +22,8 @@ var _colors = require("@atlaskit/theme/colors");
|
|
|
21
22
|
var _analytics = require("../../../analytics");
|
|
22
23
|
var _constants = require("../../../analytics/constants");
|
|
23
24
|
var _types = require("../../../analytics/types");
|
|
25
|
+
var _ufoExperiences = require("../../../analytics/ufoExperiences");
|
|
26
|
+
var _useDataRenderedUfoExperience = require("../../../analytics/ufoExperiences/useDataRenderedUfoExperience");
|
|
24
27
|
var _utils = require("../../../analytics/utils");
|
|
25
28
|
var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
|
|
26
29
|
var _getAvailableJiraSites = require("../../../services/getAvailableJiraSites");
|
|
@@ -117,6 +120,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
117
120
|
var searchCount = (0, _react.useRef)(0);
|
|
118
121
|
var userInteractionActions = (0, _react.useRef)(new Set());
|
|
119
122
|
var lastSearchMethodRef = (0, _react.useRef)(null);
|
|
123
|
+
var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
120
124
|
var parameters = (0, _react.useMemo)(function () {
|
|
121
125
|
return !!cloudId ? {
|
|
122
126
|
cloudId: cloudId,
|
|
@@ -145,6 +149,8 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
145
149
|
formatMessage = _useIntl.formatMessage;
|
|
146
150
|
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
147
151
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
152
|
+
var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
|
|
153
|
+
modalRenderInstanceId = _useRef.current;
|
|
148
154
|
var selectedJiraSite = (0, _react.useMemo)(function () {
|
|
149
155
|
if (cloudId) {
|
|
150
156
|
// if the cloud id we're editing isn't in available sites then user is likely unauthorized for that site
|
|
@@ -159,7 +165,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
159
165
|
}) || availableSites[0];
|
|
160
166
|
}
|
|
161
167
|
}, [availableSites, cloudId]);
|
|
162
|
-
var
|
|
168
|
+
var analyticsPayload = (0, _react.useMemo)(function () {
|
|
163
169
|
return {
|
|
164
170
|
extensionKey: extensionKey,
|
|
165
171
|
destinationObjectTypes: destinationObjectTypes
|
|
@@ -169,11 +175,28 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
169
175
|
var jqlUrl = selectedJiraSite && jql && "".concat(selectedJiraSite.url, "/issues/?jql=").concat(encodeURI(jql));
|
|
170
176
|
var isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading' || resolvedWithNoResults;
|
|
171
177
|
var shouldShowIssueCount = !!totalCount && totalCount !== 1 && currentViewMode === 'issue';
|
|
178
|
+
var isDataReady = (visibleColumnKeys || []).length > 0;
|
|
179
|
+
(0, _react.useEffect)(function () {
|
|
180
|
+
var shouldStartUfoExperience = status === 'loading';
|
|
181
|
+
if (shouldStartUfoExperience) {
|
|
182
|
+
(0, _ufoExperiences.startUfoExperience)({
|
|
183
|
+
name: 'datasource-rendered'
|
|
184
|
+
}, modalRenderInstanceId);
|
|
185
|
+
}
|
|
186
|
+
}, [modalRenderInstanceId, status]);
|
|
187
|
+
(0, _useDataRenderedUfoExperience.useDataRenderedUfoExperience)({
|
|
188
|
+
status: status,
|
|
189
|
+
experienceId: modalRenderInstanceId,
|
|
190
|
+
itemCount: responseItems.length,
|
|
191
|
+
canBeLink: currentViewMode === 'count',
|
|
192
|
+
extensionKey: extensionKey
|
|
193
|
+
});
|
|
172
194
|
(0, _react.useEffect)(function () {
|
|
173
195
|
fireEvent('screen.datasourceModalDialog.viewed', {});
|
|
174
196
|
}, [fireEvent]);
|
|
175
197
|
(0, _react.useEffect)(function () {
|
|
176
198
|
var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
|
|
199
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
177
200
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
178
201
|
}, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
|
|
179
202
|
(0, _react.useEffect)(function () {
|
|
@@ -209,32 +232,48 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
209
232
|
}
|
|
210
233
|
}, [cloudId, selectedJiraSite]);
|
|
211
234
|
var fireSingleItemViewedEvent = (0, _react.useCallback)(function () {
|
|
212
|
-
fireEvent('ui.link.viewed.singleItem', {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
});
|
|
217
|
-
}, [extensionKey, fireEvent, destinationObjectTypes]);
|
|
235
|
+
fireEvent('ui.link.viewed.singleItem', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
236
|
+
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current)
|
|
237
|
+
}));
|
|
238
|
+
}, [analyticsPayload, fireEvent]);
|
|
218
239
|
var fireCountViewedEvent = (0, _react.useCallback)(function () {
|
|
219
|
-
fireEvent('ui.link.viewed.count', {
|
|
220
|
-
destinationObjectTypes: destinationObjectTypes,
|
|
240
|
+
fireEvent('ui.link.viewed.count', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
221
241
|
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current),
|
|
222
|
-
extensionKey: extensionKey,
|
|
223
242
|
totalItemCount: totalCount || 0
|
|
224
|
-
});
|
|
225
|
-
}, [
|
|
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]);
|
|
226
264
|
(0, _react.useEffect)(function () {
|
|
227
265
|
var isResolved = status === 'resolved';
|
|
228
|
-
var
|
|
229
|
-
var
|
|
230
|
-
if (isResolved) {
|
|
231
|
-
|
|
232
|
-
fireSingleItemViewedEvent();
|
|
233
|
-
} else if (isCountViewed && totalCount) {
|
|
234
|
-
fireCountViewedEvent();
|
|
235
|
-
}
|
|
266
|
+
var isIssueViewMode = currentViewMode === 'issue';
|
|
267
|
+
var isCountViewMode = currentViewMode === 'count';
|
|
268
|
+
if (!isResolved) {
|
|
269
|
+
return;
|
|
236
270
|
}
|
|
237
|
-
|
|
271
|
+
if (isIssueViewMode) {
|
|
272
|
+
fireIssueViewAnalytics();
|
|
273
|
+
} else if (isCountViewMode) {
|
|
274
|
+
fireCountViewedEvent();
|
|
275
|
+
}
|
|
276
|
+
}, [currentViewMode, status, fireIssueViewAnalytics, fireCountViewedEvent]);
|
|
238
277
|
var onSearch = (0, _react.useCallback)(function (newParameters, searchMethod) {
|
|
239
278
|
searchCount.current++;
|
|
240
279
|
lastSearchMethodRef.current = searchMethod;
|
|
@@ -250,13 +289,13 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
250
289
|
analyticEvent.update({
|
|
251
290
|
eventType: 'ui',
|
|
252
291
|
actionSubjectId: 'cancel',
|
|
253
|
-
attributes: _objectSpread(_objectSpread({},
|
|
254
|
-
|
|
255
|
-
|
|
292
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
293
|
+
searchCount: searchCount.current,
|
|
294
|
+
actions: Array.from(userInteractionActions.current)
|
|
256
295
|
})
|
|
257
296
|
}).fire(_analytics.EVENT_CHANNEL);
|
|
258
297
|
onCancel();
|
|
259
|
-
}, [
|
|
298
|
+
}, [analyticsPayload, onCancel]);
|
|
260
299
|
var onSiteSelection = (0, _react.useCallback)(function (site) {
|
|
261
300
|
userInteractionActions.current.add(_types.DatasourceAction.INSTANCE_UPDATED);
|
|
262
301
|
setCloudId(site.cloudId);
|
|
@@ -278,13 +317,13 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
278
317
|
}
|
|
279
318
|
var insertButtonClickedEvent = analyticsEvent.update({
|
|
280
319
|
actionSubjectId: 'insert',
|
|
281
|
-
attributes: _objectSpread(_objectSpread({},
|
|
282
|
-
actions: Array.from(userInteractionActions.current),
|
|
320
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
283
321
|
totalItemCount: totalCount || 0,
|
|
284
|
-
displayedColumnCount:
|
|
322
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
285
323
|
display: getDisplayValue(currentViewMode, totalCount || 0),
|
|
286
324
|
searchCount: searchCount.current,
|
|
287
|
-
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current)
|
|
325
|
+
searchMethod: (0, _utils.mapSearchMethod)(lastSearchMethodRef.current),
|
|
326
|
+
actions: Array.from(userInteractionActions.current)
|
|
288
327
|
}),
|
|
289
328
|
eventType: 'ui'
|
|
290
329
|
});
|
|
@@ -331,7 +370,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
331
370
|
}
|
|
332
371
|
}, consumerEvent);
|
|
333
372
|
}
|
|
334
|
-
}, [isParametersSet, jql, selectedJiraSite,
|
|
373
|
+
}, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId]);
|
|
335
374
|
var handleViewModeChange = function handleViewModeChange(selectedMode) {
|
|
336
375
|
userInteractionActions.current.add(_types.DatasourceAction.DISPLAY_VIEW_CHANGED);
|
|
337
376
|
setCurrentViewMode(selectedMode);
|
|
@@ -344,6 +383,7 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
344
383
|
var newVisibleColumnKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
345
384
|
var columnAction = getColumnAction(visibleColumnKeys || [], newVisibleColumnKeys);
|
|
346
385
|
userInteractionActions.current.add(columnAction);
|
|
386
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
347
387
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
348
388
|
}, [visibleColumnKeys]);
|
|
349
389
|
var issueLikeDataTableView = (0, _react.useMemo)(function () {
|
|
@@ -358,9 +398,10 @@ var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
|
358
398
|
visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
|
|
359
399
|
onNextPage: handleOnNextPage,
|
|
360
400
|
onLoadDatasourceDetails: loadDatasourceDetails,
|
|
361
|
-
onVisibleColumnKeysChange: handleVisibleColumnKeysChange
|
|
401
|
+
onVisibleColumnKeysChange: handleVisibleColumnKeysChange,
|
|
402
|
+
parentContainerRenderInstanceId: modalRenderInstanceId
|
|
362
403
|
}));
|
|
363
|
-
}, [columns, defaultVisibleColumnKeys,
|
|
404
|
+
}, [columns, defaultVisibleColumnKeys, handleOnNextPage, handleVisibleColumnKeysChange, hasNextPage, loadDatasourceDetails, modalRenderInstanceId, responseItems, status, visibleColumnKeys]);
|
|
364
405
|
var renderCountModeContent = (0, _react.useCallback)(function () {
|
|
365
406
|
var url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
366
407
|
if (status === 'unauthorized') {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ConcurrentExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
|
|
2
|
+
const datasourcePageSegmentLoadExperienceConfig = {
|
|
3
|
+
platform: {
|
|
4
|
+
component: 'datasource'
|
|
5
|
+
},
|
|
6
|
+
type: ExperienceTypes.Load,
|
|
7
|
+
performanceType: ExperiencePerformanceTypes.PageSegmentLoad
|
|
8
|
+
};
|
|
9
|
+
const ufoExperiences = {
|
|
10
|
+
'datasource-rendered': new ConcurrentExperience('datasource-rendered', datasourcePageSegmentLoadExperienceConfig)
|
|
11
|
+
};
|
|
12
|
+
export const startUfoExperience = ({
|
|
13
|
+
name,
|
|
14
|
+
metadata
|
|
15
|
+
}, id) => {
|
|
16
|
+
const experienceInstance = ufoExperiences[name].getInstance(id);
|
|
17
|
+
experienceInstance.start();
|
|
18
|
+
if (metadata) {
|
|
19
|
+
experienceInstance.addMetadata(metadata);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
export const succeedUfoExperience = ({
|
|
23
|
+
name,
|
|
24
|
+
metadata
|
|
25
|
+
}, id) => {
|
|
26
|
+
const experienceInstance = ufoExperiences[name].getInstance(id);
|
|
27
|
+
experienceInstance.success({
|
|
28
|
+
metadata
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
export const failUfoExperience = ({
|
|
32
|
+
name,
|
|
33
|
+
metadata
|
|
34
|
+
}, id) => {
|
|
35
|
+
const experienceInstance = ufoExperiences[name].getInstance(id);
|
|
36
|
+
experienceInstance.failure({
|
|
37
|
+
metadata
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
export const addMetadataToExperience = ({
|
|
41
|
+
name,
|
|
42
|
+
metadata
|
|
43
|
+
}, id) => {
|
|
44
|
+
ufoExperiences[name].getInstance(id).addMetadata(metadata);
|
|
45
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|