@atlaskit/link-datasource 1.10.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/analytics/types.js +1 -0
  4. package/dist/cjs/hooks/useObjectSchemas.js +23 -13
  5. package/dist/cjs/ui/assets-modal/modal/index.js +109 -16
  6. package/dist/cjs/ui/assets-modal/modal/render-assets-content/index.js +5 -3
  7. package/dist/cjs/ui/assets-modal/search-container/index.js +4 -0
  8. package/dist/cjs/ui/assets-modal/search-container/object-schema-select/index.js +68 -23
  9. package/dist/cjs/ui/issue-like-table/render-type/link/index.js +5 -0
  10. package/dist/cjs/ui/jira-issues-modal/modal/index.js +2 -1
  11. package/dist/es2019/analytics/constants.js +1 -1
  12. package/dist/es2019/analytics/types.js +1 -0
  13. package/dist/es2019/hooks/useObjectSchemas.js +9 -1
  14. package/dist/es2019/ui/assets-modal/modal/index.js +112 -15
  15. package/dist/es2019/ui/assets-modal/modal/render-assets-content/index.js +5 -3
  16. package/dist/es2019/ui/assets-modal/search-container/index.js +5 -0
  17. package/dist/es2019/ui/assets-modal/search-container/object-schema-select/index.js +32 -5
  18. package/dist/es2019/ui/issue-like-table/render-type/link/index.js +13 -6
  19. package/dist/es2019/ui/jira-issues-modal/modal/index.js +2 -1
  20. package/dist/esm/analytics/constants.js +1 -1
  21. package/dist/esm/analytics/types.js +1 -0
  22. package/dist/esm/hooks/useObjectSchemas.js +23 -13
  23. package/dist/esm/ui/assets-modal/modal/index.js +112 -19
  24. package/dist/esm/ui/assets-modal/modal/render-assets-content/index.js +5 -3
  25. package/dist/esm/ui/assets-modal/search-container/index.js +4 -0
  26. package/dist/esm/ui/assets-modal/search-container/object-schema-select/index.js +65 -20
  27. package/dist/esm/ui/issue-like-table/render-type/link/index.js +5 -0
  28. package/dist/esm/ui/jira-issues-modal/modal/index.js +2 -1
  29. package/dist/types/analytics/generated/analytics.types.d.ts +7 -2
  30. package/dist/types/analytics/types.d.ts +2 -1
  31. package/dist/types/hooks/useObjectSchemas.d.ts +3 -1
  32. package/dist/types/ui/assets-modal/modal/render-assets-content/index.d.ts +1 -0
  33. package/dist/types/ui/assets-modal/search-container/index.d.ts +1 -2
  34. package/dist/types/ui/assets-modal/types.d.ts +2 -1
  35. package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +7 -2
  36. package/dist/types-ts4.5/analytics/types.d.ts +2 -1
  37. package/dist/types-ts4.5/hooks/useObjectSchemas.d.ts +3 -1
  38. package/dist/types-ts4.5/ui/assets-modal/modal/render-assets-content/index.d.ts +1 -0
  39. package/dist/types-ts4.5/ui/assets-modal/search-container/index.d.ts +1 -2
  40. package/dist/types-ts4.5/ui/assets-modal/types.d.ts +2 -1
  41. package/package.json +3 -3
  42. package/report.api.md +4 -1
  43. package/tmp/api-report-tmp.d.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#42245](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42245) [`7b328d1b1b2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7b328d1b1b2) - Added Datasource Analytics and UFO metrics to Assets Config Modal.
8
+ Added additional analyticsEvent param to onInsert of AssetsConfigModal.
9
+
10
+ ## 1.10.3
11
+
12
+ ### Patch Changes
13
+
14
+ - [#42390](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42390) [`d1aa333bfce`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d1aa333bfce) - [ux] Enabled count view smart link preview in jira config modal to open in new tab on click
15
+
3
16
  ## 1.10.2
4
17
 
5
18
  ### Patch Changes
@@ -7,5 +7,5 @@ exports.packageMetaData = exports.EVENT_CHANNEL = void 0;
7
7
  var EVENT_CHANNEL = exports.EVENT_CHANNEL = 'media';
8
8
  var packageMetaData = exports.packageMetaData = {
9
9
  packageName: "@atlaskit/link-datasource",
10
- packageVersion: "1.10.2"
10
+ packageVersion: "1.11.0"
11
11
  };
@@ -12,6 +12,7 @@ var DatasourceAction = exports.DatasourceAction = /*#__PURE__*/function (Datasou
12
12
  DatasourceAction["QUERY_UPDATED"] = "query updated";
13
13
  DatasourceAction["DISPLAY_VIEW_CHANGED"] = "display view changed";
14
14
  DatasourceAction["NEXT_PAGE_SCROLLED"] = "next page scrolled";
15
+ DatasourceAction["SCHEMA_UPDATED"] = "schema updated";
15
16
  return DatasourceAction;
16
17
  }({});
17
18
  var DatasourceDisplay = exports.DatasourceDisplay = /*#__PURE__*/function (DatasourceDisplay) {
@@ -21,11 +21,15 @@ var useObjectSchemas = exports.useObjectSchemas = function useObjectSchemas(work
21
21
  setObjectSchemas = _useState4[1];
22
22
  var _useState5 = (0, _react.useState)(),
23
23
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
24
- error = _useState6[0],
25
- setError = _useState6[1];
24
+ totalObjectSchemas = _useState6[0],
25
+ setTotalObjectSchemas = _useState6[1];
26
+ var _useState7 = (0, _react.useState)(),
27
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
28
+ error = _useState8[0],
29
+ setError = _useState8[1];
26
30
  var request = (0, _react.useCallback)( /*#__PURE__*/function () {
27
31
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query) {
28
- var fetchedObjectSchemas, fetchedObjectSchemasResponse;
32
+ var fetchedObjectSchemas, fetchTotalObjectSchemas, fetchedObjectSchemasResponse;
29
33
  return _regenerator.default.wrap(function _callee$(_context) {
30
34
  while (1) switch (_context.prev = _context.next) {
31
35
  case 0:
@@ -37,28 +41,33 @@ var useObjectSchemas = exports.useObjectSchemas = function useObjectSchemas(work
37
41
  case 5:
38
42
  fetchedObjectSchemasResponse = _context.sent;
39
43
  setObjectSchemas(fetchedObjectSchemasResponse.values);
44
+ setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
40
45
  fetchedObjectSchemas = fetchedObjectSchemasResponse.values;
41
- _context.next = 13;
46
+ fetchTotalObjectSchemas = fetchedObjectSchemasResponse.total;
47
+ _context.next = 15;
42
48
  break;
43
- case 10:
44
- _context.prev = 10;
49
+ case 12:
50
+ _context.prev = 12;
45
51
  _context.t0 = _context["catch"](2);
46
52
  if (_context.t0 instanceof Error) {
47
53
  setError(_context.t0);
48
54
  } else {
49
55
  setError(new Error('Unexpected error occured'));
50
56
  }
51
- case 13:
52
- _context.prev = 13;
57
+ case 15:
58
+ _context.prev = 15;
53
59
  setLoading(false);
54
- return _context.finish(13);
55
- case 16:
56
- return _context.abrupt("return", fetchedObjectSchemas);
57
- case 17:
60
+ return _context.finish(15);
61
+ case 18:
62
+ return _context.abrupt("return", {
63
+ objectSchemas: fetchedObjectSchemas,
64
+ totalObjectSchemas: fetchTotalObjectSchemas
65
+ });
66
+ case 19:
58
67
  case "end":
59
68
  return _context.stop();
60
69
  }
61
- }, _callee, null, [[2, 10, 13, 16]]);
70
+ }, _callee, null, [[2, 12, 15, 18]]);
62
71
  }));
63
72
  return function (_x) {
64
73
  return _ref.apply(this, arguments);
@@ -68,6 +77,7 @@ var useObjectSchemas = exports.useObjectSchemas = function useObjectSchemas(work
68
77
  objectSchemasLoading: loading,
69
78
  objectSchemasError: error,
70
79
  objectSchemas: objectSchemas,
80
+ totalObjectSchemas: totalObjectSchemas,
71
81
  fetchObjectSchemas: request
72
82
  };
73
83
  };
@@ -7,18 +7,24 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.AssetsConfigModal = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
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 _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
20
21
  var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
21
22
  var _analytics = require("../../../analytics");
23
+ var _constants = require("../../../analytics/constants");
24
+ var _types = require("../../../analytics/types");
25
+ var _ufoExperiences = require("../../../analytics/ufoExperiences");
26
+ var _useColumnPickerRenderedFailedUfoExperience = require("../../../analytics/ufoExperiences/hooks/useColumnPickerRenderedFailedUfoExperience");
27
+ var _useDataRenderedUfoExperience = require("../../../analytics/ufoExperiences/hooks/useDataRenderedUfoExperience");
22
28
  var _fetchMessagesForLocale = require("../../../common/utils/locale/fetch-messages-for-locale");
23
29
  var _useAssetsClient2 = require("../../../hooks/useAssetsClient");
24
30
  var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
@@ -62,6 +68,8 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
62
68
  setIsNewSearch = _useState8[1];
63
69
  var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
64
70
  fireEvent = _useDatasourceAnalyti.fireEvent;
71
+ var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
72
+ modalRenderInstanceId = _useRef.current;
65
73
 
66
74
  // If a workspaceError occurs this is a critical error
67
75
  var _useAssetsClient = (0, _useAssetsClient2.useAssetsClient)(initialParameters),
@@ -89,13 +97,69 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
89
97
  loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails,
90
98
  hasNextPage = _useDatasourceTableSt.hasNextPage,
91
99
  columns = _useDatasourceTableSt.columns,
92
- defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys;
100
+ defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
101
+ _useDatasourceTableSt2 = _useDatasourceTableSt.extensionKey,
102
+ extensionKey = _useDatasourceTableSt2 === void 0 ? null : _useDatasourceTableSt2,
103
+ destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes,
104
+ totalCount = _useDatasourceTableSt.totalCount;
105
+
106
+ /* ------------------------------ OBSERVABILITY ------------------------------ */
107
+ var searchCount = (0, _react.useRef)(0);
108
+ var userInteractionActions = (0, _react.useRef)(new Set());
109
+ var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
110
+ var isDataReady = (visibleColumnKeys || []).length > 0;
111
+ var analyticsPayload = (0, _react.useMemo)(function () {
112
+ return {
113
+ extensionKey: extensionKey,
114
+ destinationObjectTypes: destinationObjectTypes
115
+ };
116
+ }, [destinationObjectTypes, extensionKey]);
117
+ (0, _react.useEffect)(function () {
118
+ fireEvent('screen.datasourceModalDialog.viewed', {});
119
+ }, [fireEvent]);
120
+ var fireTableViewedEvent = (0, _react.useCallback)(function () {
121
+ if (isDataReady) {
122
+ fireEvent('ui.table.viewed.datasourceConfigModal', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
123
+ totalItemCount: totalCount || 0,
124
+ searchMethod: _types.DatasourceSearchMethod.DATASOURCE_SEARCH_QUERY,
125
+ displayedColumnCount: visibleColumnCount.current
126
+ }));
127
+ }
128
+ }, [analyticsPayload, fireEvent, totalCount, isDataReady]);
129
+ (0, _react.useEffect)(function () {
130
+ var isResolved = status === 'resolved';
131
+ if (!isResolved || !totalCount) {
132
+ return;
133
+ }
134
+ if (totalCount > 1) {
135
+ fireTableViewedEvent();
136
+ }
137
+ }, [fireTableViewedEvent, status, totalCount]);
138
+ (0, _react.useEffect)(function () {
139
+ var shouldStartUfoExperience = status === 'loading';
140
+ if (shouldStartUfoExperience) {
141
+ (0, _ufoExperiences.startUfoExperience)({
142
+ name: 'datasource-rendered'
143
+ }, modalRenderInstanceId);
144
+ }
145
+ }, [modalRenderInstanceId, status]);
146
+ (0, _useDataRenderedUfoExperience.useDataRenderedUfoExperience)({
147
+ status: status,
148
+ experienceId: modalRenderInstanceId,
149
+ itemCount: responseItems.length,
150
+ canBeLink: false,
151
+ extensionKey: extensionKey
152
+ });
153
+ (0, _useColumnPickerRenderedFailedUfoExperience.useColumnPickerRenderedFailedUfoExperience)(status, modalRenderInstanceId);
154
+ /* ------------------------------ END OBSERVABILITY ------------------------------ */
155
+
93
156
  var onVisibleColumnKeysChange = (0, _react.useCallback)(function (visibleColumnKeys) {
94
157
  setVisibleColumnKeys(visibleColumnKeys);
95
158
  setIsNewSearch(false);
96
159
  }, []);
97
160
  (0, _react.useEffect)(function () {
98
161
  var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
162
+ visibleColumnCount.current = newVisibleColumnKeys.length;
99
163
  setVisibleColumnKeys(newVisibleColumnKeys);
100
164
  }, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
101
165
  (0, _react.useEffect)(function () {
@@ -103,10 +167,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
103
167
  setVisibleColumnKeys(defaultVisibleColumnKeys);
104
168
  }
105
169
  }, [defaultVisibleColumnKeys, isNewSearch]);
106
- (0, _react.useEffect)(function () {
107
- fireEvent('screen.datasourceModalDialog.viewed', {});
108
- }, [fireEvent]);
109
- var isDisabled = !!workspaceError || status === 'rejected' || status === 'loading' || status === 'empty' || !!workspaceError || assetsClientLoading || !aql || !schemaId;
170
+ var isDisabled = !!workspaceError || status === 'rejected' || status === 'loading' || status === 'empty' || assetsClientLoading || !aql || !schemaId;
110
171
  var retrieveUrlForSmartCardRender = (0, _react.useCallback)(function () {
111
172
  var _data$key;
112
173
  var _responseItems = (0, _slicedToArray2.default)(responseItems, 1),
@@ -114,10 +175,25 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
114
175
  // agreement with BE that we will use `key` for rendering smartlink
115
176
  return data === null || data === void 0 || (_data$key = data.key) === null || _data$key === void 0 || (_data$key = _data$key.data) === null || _data$key === void 0 ? void 0 : _data$key.url;
116
177
  }, [responseItems]);
117
- var onInsertPressed = (0, _react.useCallback)(function () {
178
+ var onInsertPressed = (0, _react.useCallback)(function (e, analyticsEvent) {
179
+ var _insertButtonClickedE;
118
180
  if (!aql || !schemaId || !workspaceId) {
119
181
  return;
120
182
  }
183
+ var insertButtonClickedEvent = analyticsEvent.update({
184
+ actionSubjectId: 'insert',
185
+ attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
186
+ totalItemCount: totalCount || 0,
187
+ displayedColumnCount: visibleColumnCount.current,
188
+ display: _types.DatasourceDisplay.DATASOURCE_TABLE,
189
+ searchCount: searchCount.current,
190
+ searchMethod: _types.DatasourceSearchMethod.DATASOURCE_SEARCH_QUERY,
191
+ actions: Array.from(userInteractionActions.current)
192
+ }),
193
+ eventType: 'ui'
194
+ });
195
+ var consumerEvent = (_insertButtonClickedE = insertButtonClickedEvent.clone()) !== null && _insertButtonClickedE !== void 0 ? _insertButtonClickedE : undefined;
196
+ insertButtonClickedEvent.fire(_analytics.EVENT_CHANNEL);
121
197
  var firstAssetUrl = retrieveUrlForSmartCardRender();
122
198
  if (responseItems.length === 1 && firstAssetUrl) {
123
199
  onInsert({
@@ -125,7 +201,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
125
201
  attrs: {
126
202
  url: firstAssetUrl
127
203
  }
128
- });
204
+ }, consumerEvent);
129
205
  } else {
130
206
  onInsert({
131
207
  type: 'blockCard',
@@ -149,15 +225,33 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
149
225
  }]
150
226
  }
151
227
  }
152
- });
228
+ }, consumerEvent);
153
229
  }
154
- }, [aql, schemaId, workspaceId, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
230
+ }, [aql, schemaId, workspaceId, analyticsPayload, totalCount, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
231
+ var onCancelClick = (0, _react.useCallback)(function (e, analyticEvent) {
232
+ analyticEvent.update({
233
+ eventType: 'ui',
234
+ actionSubjectId: 'cancel',
235
+ attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
236
+ searchCount: searchCount.current,
237
+ actions: Array.from(userInteractionActions.current)
238
+ })
239
+ }).fire(_analytics.EVENT_CHANNEL);
240
+ onCancel();
241
+ }, [analyticsPayload, onCancel]);
155
242
  var handleOnSearch = (0, _react.useCallback)( /*#__PURE__*/function () {
156
243
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(searchAql, searchSchemaId) {
157
244
  return _regenerator.default.wrap(function _callee$(_context) {
158
245
  while (1) switch (_context.prev = _context.next) {
159
246
  case 0:
160
247
  if (schemaId !== searchSchemaId || aql !== searchAql) {
248
+ searchCount.current++;
249
+ if (schemaId !== searchSchemaId) {
250
+ userInteractionActions.current.add(_types.DatasourceAction.SCHEMA_UPDATED);
251
+ }
252
+ if (aql !== searchAql) {
253
+ userInteractionActions.current.add(_types.DatasourceAction.QUERY_UPDATED);
254
+ }
161
255
  reset({
162
256
  shouldResetColumns: true
163
257
  });
@@ -219,10 +313,11 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
219
313
  hasNextPage: hasNextPage,
220
314
  loadDatasourceDetails: loadDatasourceDetails,
221
315
  columns: columns,
222
- defaultVisibleColumnKeys: defaultVisibleColumnKeys
316
+ defaultVisibleColumnKeys: defaultVisibleColumnKeys,
317
+ modalRenderInstanceId: modalRenderInstanceId
223
318
  }))), (0, _react2.jsx)(_modalDialog.ModalFooter, null, (0, _react2.jsx)(_standardButton.default, {
224
319
  appearance: "default",
225
- onClick: onCancel,
320
+ onClick: onCancelClick,
226
321
  testId: 'asset-datasource-modal--cancel-button'
227
322
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.cancelButtonText)), (0, _react2.jsx)(_standardButton.default, {
228
323
  appearance: "primary",
@@ -238,11 +333,9 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
238
333
  var analyticsContextAttributes = {
239
334
  dataProvider: 'jsm-assets'
240
335
  };
241
- var analyticsContextData = {
242
- packageName: "@atlaskit/link-datasource",
243
- packageVersion: "1.10.2",
336
+ var analyticsContextData = _objectSpread(_objectSpread({}, _constants.packageMetaData), {}, {
244
337
  source: 'datasourceConfigModal'
245
- };
338
+ });
246
339
  var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
247
340
  attributes: _objectSpread({}, analyticsContextAttributes)
248
341
  });
@@ -21,7 +21,8 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
21
21
  loadDatasourceDetails = props.loadDatasourceDetails,
22
22
  columns = props.columns,
23
23
  defaultVisibleColumnKeys = props.defaultVisibleColumnKeys,
24
- onVisibleColumnKeysChange = props.onVisibleColumnKeysChange;
24
+ onVisibleColumnKeysChange = props.onVisibleColumnKeysChange,
25
+ modalRenderInstanceId = props.modalRenderInstanceId;
25
26
  var resolvedWithNoResults = status === 'resolved' && !responseItems.length;
26
27
  var issueLikeDataTableView = (0, _react.useMemo)(function () {
27
28
  return /*#__PURE__*/_react.default.createElement(_issueLikeTable.IssueLikeDataTableView, {
@@ -33,9 +34,10 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
33
34
  visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
34
35
  onNextPage: onNextPage,
35
36
  onLoadDatasourceDetails: loadDatasourceDetails,
36
- onVisibleColumnKeysChange: onVisibleColumnKeysChange
37
+ onVisibleColumnKeysChange: onVisibleColumnKeysChange,
38
+ parentContainerRenderInstanceId: modalRenderInstanceId
37
39
  });
38
- }, [columns, defaultVisibleColumnKeys, hasNextPage, loadDatasourceDetails, onNextPage, onVisibleColumnKeysChange, responseItems, status, visibleColumnKeys]);
40
+ }, [columns, defaultVisibleColumnKeys, hasNextPage, loadDatasourceDetails, onNextPage, onVisibleColumnKeysChange, responseItems, status, visibleColumnKeys, modalRenderInstanceId]);
39
41
  if (status === 'rejected') {
40
42
  return /*#__PURE__*/_react.default.createElement(_modalLoadingError.ModalLoadingError, null);
41
43
  } else if (status === 'empty') {
@@ -8,6 +8,7 @@ exports.AssetsSearchContainer = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _react = require("@emotion/react");
10
10
  var _form = _interopRequireDefault(require("@atlaskit/form"));
11
+ var _analytics = require("../../../analytics");
11
12
  var _aqlSearchInput = require("./aql-search-input");
12
13
  var _objectSchemaSelect = require("./object-schema-select");
13
14
  var _styled = require("./styled");
@@ -21,10 +22,13 @@ var AssetsSearchContainer = exports.AssetsSearchContainer = function AssetsSearc
21
22
  initialSearchData = props.initialSearchData,
22
23
  modalTitle = props.modalTitle,
23
24
  isSearching = props.isSearching;
25
+ var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
26
+ fireEvent = _useDatasourceAnalyti.fireEvent;
24
27
  var onFormSubmit = function onFormSubmit(searchFormValues) {
25
28
  var aql = searchFormValues.aql,
26
29
  objectSchema = searchFormValues.objectSchema;
27
30
  if (objectSchema) {
31
+ fireEvent('ui.aqlEditor.searched', {});
28
32
  // Pass the validated aql and object schema back to modal
29
33
  onSearch(aql, objectSchema.value);
30
34
  }
@@ -9,13 +9,16 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
- var _react = require("@emotion/react");
14
+ var _react = require("react");
15
+ var _react2 = require("@emotion/react");
14
16
  var _debouncePromise = _interopRequireDefault(require("debounce-promise"));
15
17
  var _reactIntlNext = require("react-intl-next");
16
18
  var _form = require("@atlaskit/form");
17
19
  var _select = require("@atlaskit/select");
18
20
  var _constants = require("@atlaskit/theme/constants");
21
+ var _analytics = require("../../../../analytics");
19
22
  var _useObjectSchemas2 = require("../../../../hooks/useObjectSchemas");
20
23
  var _types = require("../../../../types/assets/types");
21
24
  var _styled = require("../styled");
@@ -25,6 +28,11 @@ var _excluded = ["onChange", "onFocus"];
25
28
  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; }
26
29
  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; } /** @jsx jsx */
27
30
  var SEARCH_DEBOUNCE_MS = exports.SEARCH_DEBOUNCE_MS = 350;
31
+ var mapObjectSchemasToOptions = function mapObjectSchemasToOptions(objectSchemas) {
32
+ return objectSchemas ? objectSchemas.map(function (objectSchema) {
33
+ return (0, _utils.objectSchemaToSelectOption)(objectSchema);
34
+ }) : [];
35
+ };
28
36
 
29
37
  /**
30
38
  * Rendering a `<Select>` in a `<Modal>` results in the select options getting cut off by the bottom of the modal and
@@ -45,34 +53,72 @@ var AssetsObjectSchemaSelect = exports.AssetsObjectSchemaSelect = function Asset
45
53
  workspaceId = _ref.workspaceId,
46
54
  _ref$classNamePrefix = _ref.classNamePrefix,
47
55
  classNamePrefix = _ref$classNamePrefix === void 0 ? 'assets-datasource-modal--object-schema-select' : _ref$classNamePrefix;
56
+ var _useState = (0, _react.useState)(null),
57
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
+ defaultOptions = _useState2[0],
59
+ setDefaultOptions = _useState2[1];
60
+ var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
61
+ fireEvent = _useDatasourceAnalyti.fireEvent;
48
62
  var _useIntl = (0, _reactIntlNext.useIntl)(),
49
63
  formatMessage = _useIntl.formatMessage;
50
64
  var _useObjectSchemas = (0, _useObjectSchemas2.useObjectSchemas)(workspaceId),
51
65
  fetchObjectSchemas = _useObjectSchemas.fetchObjectSchemas,
52
66
  objectSchemasLoading = _useObjectSchemas.objectSchemasLoading;
53
67
  var selectedObjectSchema = value ? (0, _utils.objectSchemaToSelectOption)(value) : undefined;
68
+ (0, _react.useEffect)(function () {
69
+ var fetchInitialData = /*#__PURE__*/function () {
70
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
71
+ var _yield$fetchObjectSch, objectSchemas, totalObjectSchemas;
72
+ return _regenerator.default.wrap(function _callee$(_context) {
73
+ while (1) switch (_context.prev = _context.next) {
74
+ case 0:
75
+ _context.next = 2;
76
+ return fetchObjectSchemas('');
77
+ case 2:
78
+ _yield$fetchObjectSch = _context.sent;
79
+ objectSchemas = _yield$fetchObjectSch.objectSchemas;
80
+ totalObjectSchemas = _yield$fetchObjectSch.totalObjectSchemas;
81
+ // We only want to send modal ready event once after we've fetched the schema count
82
+ fireEvent('ui.modal.ready.datasource', {
83
+ schemasCount: totalObjectSchemas !== null && totalObjectSchemas !== void 0 ? totalObjectSchemas : 0,
84
+ instancesCount: null
85
+ });
86
+ setDefaultOptions(mapObjectSchemasToOptions(objectSchemas));
87
+ case 7:
88
+ case "end":
89
+ return _context.stop();
90
+ }
91
+ }, _callee);
92
+ }));
93
+ return function fetchInitialData() {
94
+ return _ref2.apply(this, arguments);
95
+ };
96
+ }();
97
+ if (defaultOptions === null) {
98
+ fetchInitialData();
99
+ }
100
+ // eslint-disable-next-line react-hooks/exhaustive-deps
101
+ }, []);
54
102
  var loadOptions = /*#__PURE__*/function () {
55
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(inputValue) {
56
- var objectSchemas, options;
57
- return _regenerator.default.wrap(function _callee$(_context) {
58
- while (1) switch (_context.prev = _context.next) {
103
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(inputValue) {
104
+ var _yield$fetchObjectSch2, objectSchemas;
105
+ return _regenerator.default.wrap(function _callee2$(_context2) {
106
+ while (1) switch (_context2.prev = _context2.next) {
59
107
  case 0:
60
- _context.next = 2;
108
+ _context2.next = 2;
61
109
  return fetchObjectSchemas(inputValue);
62
110
  case 2:
63
- objectSchemas = _context.sent;
64
- options = objectSchemas ? objectSchemas.map(function (objectSchema) {
65
- return (0, _utils.objectSchemaToSelectOption)(objectSchema);
66
- }) : [];
67
- return _context.abrupt("return", options);
111
+ _yield$fetchObjectSch2 = _context2.sent;
112
+ objectSchemas = _yield$fetchObjectSch2.objectSchemas;
113
+ return _context2.abrupt("return", mapObjectSchemasToOptions(objectSchemas));
68
114
  case 5:
69
115
  case "end":
70
- return _context.stop();
116
+ return _context2.stop();
71
117
  }
72
- }, _callee);
118
+ }, _callee2);
73
119
  }));
74
120
  return function loadOptions(_x) {
75
- return _ref2.apply(this, arguments);
121
+ return _ref3.apply(this, arguments);
76
122
  };
77
123
  }();
78
124
  var debouncedLoadOptions = (0, _debouncePromise.default)(loadOptions, SEARCH_DEBOUNCE_MS);
@@ -82,23 +128,22 @@ var AssetsObjectSchemaSelect = exports.AssetsObjectSchemaSelect = function Asset
82
128
  }
83
129
  return undefined;
84
130
  };
85
- return (0, _react.jsx)(_styled.FieldContainer, null, (0, _react.jsx)(_form.Field, {
131
+ return (0, _react2.jsx)(_styled.FieldContainer, null, (0, _react2.jsx)(_form.Field, {
86
132
  name: _types.objectSchemaKey,
87
133
  defaultValue: selectedObjectSchema,
88
134
  validate: function validate(value) {
89
135
  return validateSchema(value);
90
136
  }
91
- }, function (_ref3) {
92
- var _ref3$fieldProps = _ref3.fieldProps,
93
- _onChange = _ref3$fieldProps.onChange,
94
- onFocus = _ref3$fieldProps.onFocus,
95
- restFieldProps = (0, _objectWithoutProperties2.default)(_ref3$fieldProps, _excluded);
96
- return (0, _react.jsx)(_select.AsyncSelect, (0, _extends2.default)({
137
+ }, function (_ref4) {
138
+ var _ref4$fieldProps = _ref4.fieldProps,
139
+ _onChange = _ref4$fieldProps.onChange,
140
+ onFocus = _ref4$fieldProps.onFocus,
141
+ restFieldProps = (0, _objectWithoutProperties2.default)(_ref4$fieldProps, _excluded);
142
+ return (0, _react2.jsx)(_select.AsyncSelect, (0, _extends2.default)({
97
143
  autoFocus: true,
98
144
  classNamePrefix: classNamePrefix,
99
145
  isLoading: objectSchemasLoading,
100
- defaultOptions: true // setting to true causes the loadOptions to be called on mount
101
- ,
146
+ defaultOptions: defaultOptions !== null && defaultOptions !== void 0 ? defaultOptions : [],
102
147
  isSearchable: true,
103
148
  loadOptions: debouncedLoadOptions,
104
149
  placeholder: formatMessage(_messages.objectSchemaSelectMessages.placeholder),
@@ -49,8 +49,13 @@ var LinkRenderType = function LinkRenderType(_ref) {
49
49
  }, text || url));
50
50
  }, [linkStyle, url, text, testId]);
51
51
  var SmartCard = function SmartCard() {
52
+ var handleClick = function handleClick(e) {
53
+ e.preventDefault();
54
+ window.open(url, '_blank', 'noopener, noreferrer');
55
+ };
52
56
  return /*#__PURE__*/_react.default.createElement(_smartCard.Card, {
53
57
  appearance: "inline",
58
+ onClick: handleClick,
54
59
  url: url,
55
60
  testId: testId,
56
61
  fallbackComponent: function fallbackComponent() {
@@ -225,7 +225,8 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
225
225
  });
226
226
  setAvailableSites(sortedAvailableSites);
227
227
  fireEvent('ui.modal.ready.datasource', {
228
- instancesCount: sortedAvailableSites.length
228
+ instancesCount: sortedAvailableSites.length,
229
+ schemasCount: null
229
230
  });
230
231
  case 6:
231
232
  case "end":
@@ -1,5 +1,5 @@
1
1
  export const EVENT_CHANNEL = 'media';
2
2
  export const packageMetaData = {
3
3
  packageName: "@atlaskit/link-datasource",
4
- packageVersion: "1.10.2"
4
+ packageVersion: "1.11.0"
5
5
  };
@@ -6,6 +6,7 @@ export let DatasourceAction = /*#__PURE__*/function (DatasourceAction) {
6
6
  DatasourceAction["QUERY_UPDATED"] = "query updated";
7
7
  DatasourceAction["DISPLAY_VIEW_CHANGED"] = "display view changed";
8
8
  DatasourceAction["NEXT_PAGE_SCROLLED"] = "next page scrolled";
9
+ DatasourceAction["SCHEMA_UPDATED"] = "schema updated";
9
10
  return DatasourceAction;
10
11
  }({});
11
12
  export let DatasourceDisplay = /*#__PURE__*/function (DatasourceDisplay) {
@@ -3,15 +3,19 @@ import { fetchObjectSchemas } from '../services/cmdbService';
3
3
  export const useObjectSchemas = workspaceId => {
4
4
  const [loading, setLoading] = useState(false);
5
5
  const [objectSchemas, setObjectSchemas] = useState();
6
+ const [totalObjectSchemas, setTotalObjectSchemas] = useState();
6
7
  const [error, setError] = useState();
7
8
  const request = useCallback(async query => {
8
9
  setLoading(true);
9
10
  setError(undefined);
10
11
  let fetchedObjectSchemas;
12
+ let fetchTotalObjectSchemas;
11
13
  try {
12
14
  const fetchedObjectSchemasResponse = await fetchObjectSchemas(workspaceId, query);
13
15
  setObjectSchemas(fetchedObjectSchemasResponse.values);
16
+ setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
14
17
  fetchedObjectSchemas = fetchedObjectSchemasResponse.values;
18
+ fetchTotalObjectSchemas = fetchedObjectSchemasResponse.total;
15
19
  } catch (err) {
16
20
  if (err instanceof Error) {
17
21
  setError(err);
@@ -21,12 +25,16 @@ export const useObjectSchemas = workspaceId => {
21
25
  } finally {
22
26
  setLoading(false);
23
27
  }
24
- return fetchedObjectSchemas;
28
+ return {
29
+ objectSchemas: fetchedObjectSchemas,
30
+ totalObjectSchemas: fetchTotalObjectSchemas
31
+ };
25
32
  }, [workspaceId]);
26
33
  return {
27
34
  objectSchemasLoading: loading,
28
35
  objectSchemasError: error,
29
36
  objectSchemas,
37
+ totalObjectSchemas,
30
38
  fetchObjectSchemas: request
31
39
  };
32
40
  };