@atlaskit/link-datasource 1.25.0 → 1.25.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/ui/assets-modal/modal/index.js +11 -15
  3. package/dist/cjs/ui/assets-modal/modal/messages.js +0 -5
  4. package/dist/cjs/ui/common/modal/cancel-button/index.js +31 -0
  5. package/dist/cjs/ui/common/modal/cancel-button/messages.js +14 -0
  6. package/dist/cjs/ui/confluence-search-modal/modal/index.js +95 -13
  7. package/dist/cjs/ui/jira-issues-modal/modal/index.js +12 -15
  8. package/dist/cjs/ui/jira-issues-modal/modal/messages.js +0 -5
  9. package/dist/es2019/ui/assets-modal/modal/index.js +12 -16
  10. package/dist/es2019/ui/assets-modal/modal/messages.js +0 -5
  11. package/dist/es2019/ui/common/modal/cancel-button/index.js +25 -0
  12. package/dist/es2019/ui/common/modal/cancel-button/messages.js +8 -0
  13. package/dist/es2019/ui/confluence-search-modal/modal/index.js +96 -12
  14. package/dist/es2019/ui/jira-issues-modal/modal/index.js +17 -22
  15. package/dist/es2019/ui/jira-issues-modal/modal/messages.js +0 -5
  16. package/dist/esm/ui/assets-modal/modal/index.js +11 -15
  17. package/dist/esm/ui/assets-modal/modal/messages.js +0 -5
  18. package/dist/esm/ui/common/modal/cancel-button/index.js +23 -0
  19. package/dist/esm/ui/common/modal/cancel-button/messages.js +8 -0
  20. package/dist/esm/ui/confluence-search-modal/modal/index.js +94 -12
  21. package/dist/esm/ui/jira-issues-modal/modal/index.js +12 -15
  22. package/dist/esm/ui/jira-issues-modal/modal/messages.js +0 -5
  23. package/dist/types/analytics/generated/analytics.types.d.ts +1 -1
  24. package/dist/types/ui/assets-modal/modal/messages.d.ts +0 -5
  25. package/dist/types/ui/common/modal/cancel-button/index.d.ts +8 -0
  26. package/dist/types/ui/common/modal/cancel-button/messages.d.ts +7 -0
  27. package/dist/types/ui/confluence-search-modal/modal/index.d.ts +5 -1
  28. package/dist/types/ui/jira-issues-modal/modal/messages.d.ts +0 -5
  29. package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +1 -1
  30. package/dist/types-ts4.5/ui/assets-modal/modal/messages.d.ts +0 -5
  31. package/dist/types-ts4.5/ui/common/modal/cancel-button/index.d.ts +8 -0
  32. package/dist/types-ts4.5/ui/common/modal/cancel-button/messages.d.ts +7 -0
  33. package/dist/types-ts4.5/ui/confluence-search-modal/modal/index.d.ts +5 -1
  34. package/dist/types-ts4.5/ui/jira-issues-modal/modal/messages.d.ts +0 -5
  35. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.25.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#87128](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/87128) [`2b6b715884a0`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/2b6b715884a0) - Adds Insert button click analytics event and tests to confluence-search config modal.
8
+ - Updated dependencies
9
+
10
+ ## 1.25.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [#86770](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/86770) [`67209c8f2921`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/67209c8f2921) - Adds cancel button click analytics event and tests to confluence-search config modal.
15
+ - Updated dependencies
16
+
3
17
  ## 1.25.0
4
18
 
5
19
  ### Minor Changes
@@ -31,6 +31,7 @@ var _en = _interopRequireDefault(require("../../../i18n/en"));
31
31
  var _cmdbService = require("../../../services/cmdbService.utils");
32
32
  var _accessRequired = require("../../../ui/common/error-state/access-required");
33
33
  var _modalLoadingError = require("../../common/error-state/modal-loading-error");
34
+ var _cancelButton = require("../../common/modal/cancel-button");
34
35
  var _searchContainer = require("../search-container");
35
36
  var _loadingState = require("../search-container/loading-state");
36
37
  var _messages = require("./messages");
@@ -272,17 +273,6 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
272
273
  }), consumerEvent);
273
274
  }
274
275
  }, [aql, schemaId, workspaceId, analyticsPayload, totalCount, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
275
- var onCancelClick = (0, _react.useCallback)(function (e, analyticEvent) {
276
- analyticEvent.update({
277
- eventType: 'ui',
278
- actionSubjectId: 'cancel',
279
- attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
280
- searchCount: searchCount.current,
281
- actions: Array.from(userInteractionActions.current)
282
- })
283
- }).fire(_analytics.EVENT_CHANNEL);
284
- onCancel();
285
- }, [analyticsPayload, onCancel]);
286
276
  var handleOnSearch = (0, _react.useCallback)(function (searchAql, searchSchemaId) {
287
277
  if (schemaId !== searchSchemaId || aql !== searchAql || status === 'rejected') {
288
278
  searchCount.current++;
@@ -336,6 +326,12 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
336
326
  });
337
327
  }
338
328
  }, [errorState, workspaceId, assetsClientLoading, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql, existingObjectSchema, objectSchemas, handleOnSearch, status]);
329
+ var getCancelButtonAnalyticsPayload = (0, _react.useCallback)(function () {
330
+ return _objectSpread(_objectSpread({}, analyticsPayload), {}, {
331
+ searchCount: searchCount.current,
332
+ actions: Array.from(userInteractionActions.current)
333
+ });
334
+ }, [analyticsPayload]);
339
335
  return (0, _react2.jsx)(_intlMessagesProvider.IntlMessagesProvider, {
340
336
  defaultMessages: _en.default,
341
337
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
@@ -362,11 +358,11 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
362
358
  columns: columns,
363
359
  defaultVisibleColumnKeys: defaultVisibleColumnKeys,
364
360
  modalRenderInstanceId: modalRenderInstanceId
365
- })), (0, _react2.jsx)(_modalDialog.ModalFooter, null, (0, _react2.jsx)(_standardButton.default, {
366
- appearance: "default",
367
- onClick: onCancelClick,
361
+ })), (0, _react2.jsx)(_modalDialog.ModalFooter, null, (0, _react2.jsx)(_cancelButton.CancelButton, {
362
+ onCancel: onCancel,
363
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
368
364
  testId: 'asset-datasource-modal--cancel-button'
369
- }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.cancelButtonText)), (0, _react2.jsx)(_standardButton.default, {
365
+ }), (0, _react2.jsx)(_standardButton.default, {
370
366
  appearance: "primary",
371
367
  onClick: onInsertPressed,
372
368
  isDisabled: isDisabled,
@@ -6,11 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.modalMessages = void 0;
7
7
  var _reactIntlNext = require("react-intl-next");
8
8
  var modalMessages = exports.modalMessages = (0, _reactIntlNext.defineMessages)({
9
- cancelButtonText: {
10
- id: 'linkDataSource.assets.configmodal.cancelButtonText',
11
- description: 'Button text to close the modal with no changes being made',
12
- defaultMessage: 'Cancel'
13
- },
14
9
  updateObjectsButtonText: {
15
10
  id: 'linkDataSource.assets.configmodal.updateObjectsButtonText',
16
11
  description: 'Button text to update the displayed content',
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.CancelButton = void 0;
8
+ var _react = require("react");
9
+ var _react2 = require("@emotion/react");
10
+ var _reactIntlNext = require("react-intl-next");
11
+ var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
12
+ var _analytics = require("../../../../analytics");
13
+ var _messages = require("./messages");
14
+ /** @jsx jsx */
15
+
16
+ var CancelButton = exports.CancelButton = function CancelButton(_ref) {
17
+ var getAnalyticsPayload = _ref.getAnalyticsPayload,
18
+ onCancel = _ref.onCancel,
19
+ testId = _ref.testId;
20
+ var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
21
+ fireEvent = _useDatasourceAnalyti.fireEvent;
22
+ var onCancelClick = (0, _react.useCallback)(function () {
23
+ fireEvent('ui.button.clicked.cancel', getAnalyticsPayload());
24
+ onCancel();
25
+ }, [getAnalyticsPayload, fireEvent, onCancel]);
26
+ return (0, _react2.jsx)(_standardButton.default, {
27
+ appearance: "default",
28
+ onClick: onCancelClick,
29
+ testId: testId
30
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.cancelButtonMessages.cancelButtonText));
31
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cancelButtonMessages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var cancelButtonMessages = exports.cancelButtonMessages = (0, _reactIntlNext.defineMessages)({
9
+ cancelButtonText: {
10
+ id: 'linkDataSource.configmodal.cancelButtonText',
11
+ description: 'Button text to close the modal with no changes being made',
12
+ defaultMessage: 'Cancel'
13
+ }
14
+ });
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.ConfluenceSearchConfigModal = void 0;
8
+ exports.getColumnAction = exports.PlainConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
@@ -16,6 +16,7 @@ var _react = require("react");
16
16
  var _react2 = require("@emotion/react");
17
17
  var _reactIntlNext = require("react-intl-next");
18
18
  var _uuid = require("uuid");
19
+ var _analyticsNext = require("@atlaskit/analytics-next");
19
20
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
20
21
  var _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
21
22
  var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
@@ -23,6 +24,9 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
23
24
  var _primitives = require("@atlaskit/primitives");
24
25
  var _linkUrl = _interopRequireDefault(require("@atlaskit/smart-card/link-url"));
25
26
  var _colors = require("@atlaskit/theme/colors");
27
+ var _analytics = require("../../../analytics");
28
+ var _constants = require("../../../analytics/constants");
29
+ var _types = require("../../../analytics/types");
26
30
  var _adf = require("../../../common/utils/adf");
27
31
  var _fetchMessagesForLocale = require("../../../common/utils/locale/fetch-messages-for-locale");
28
32
  var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
@@ -33,6 +37,7 @@ var _modalLoadingError = require("../../common/error-state/modal-loading-error")
33
37
  var _noInstances = require("../../common/error-state/no-instances");
34
38
  var _noResults = require("../../common/error-state/no-results");
35
39
  var _initialStateView = require("../../common/initial-state-view");
40
+ var _cancelButton = require("../../common/modal/cancel-button");
36
41
  var _contentContainer = require("../../common/modal/content-container");
37
42
  var _siteSelector = require("../../common/modal/site-selector");
38
43
  var _issueLikeTable = require("../../issue-like-table");
@@ -52,7 +57,20 @@ var searchCountStyles = (0, _primitives.xcss)({
52
57
  flex: 1,
53
58
  fontWeight: 600
54
59
  });
55
- var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(props) {
60
+
61
+ // TODO: common functionality of all modals refactor in EDM-9573
62
+ var getColumnAction = exports.getColumnAction = function getColumnAction(oldVisibleColumnKeys, newVisibleColumnKeys) {
63
+ var newColumnSize = newVisibleColumnKeys.length;
64
+ var oldColumnSize = oldVisibleColumnKeys.length;
65
+ if (newColumnSize > oldColumnSize) {
66
+ return _types.DatasourceAction.COLUMN_ADDED;
67
+ } else if (newColumnSize < oldColumnSize) {
68
+ return _types.DatasourceAction.COLUMN_REMOVED;
69
+ } else {
70
+ return _types.DatasourceAction.COLUMN_REORDERED;
71
+ }
72
+ };
73
+ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConfigModal(props) {
56
74
  var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
57
75
  modalRenderInstanceId = _useRef.current;
58
76
  var datasourceId = props.datasourceId,
@@ -80,6 +98,11 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
80
98
  visibleColumnKeys = _useState8[0],
81
99
  setVisibleColumnKeys = _useState8[1];
82
100
 
101
+ // analytics related parameters
102
+ var searchCount = (0, _react.useRef)(0);
103
+ var userInteractionActions = (0, _react.useRef)(new Set());
104
+ var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
105
+
83
106
  // TODO: further refactoring in EDM-9573
84
107
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
85
108
  var parameters = (0, _react.useMemo)(function () {
@@ -106,9 +129,10 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
106
129
  columns = _useDatasourceTableSt.columns,
107
130
  defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
108
131
  loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails,
132
+ totalCount = _useDatasourceTableSt.totalCount,
109
133
  _useDatasourceTableSt2 = _useDatasourceTableSt.extensionKey,
110
134
  extensionKey = _useDatasourceTableSt2 === void 0 ? null : _useDatasourceTableSt2,
111
- totalCount = _useDatasourceTableSt.totalCount;
135
+ destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes;
112
136
  var hasNoConfluenceSites = availableSites && availableSites.length === 0;
113
137
  var selectedConfluenceSite = (0, _react.useMemo)(function () {
114
138
  if (cloudId) {
@@ -170,6 +194,11 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
170
194
  }();
171
195
  void fetchSiteDisplayNames();
172
196
  }, []);
197
+ (0, _react.useEffect)(function () {
198
+ var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
199
+ visibleColumnCount.current = newVisibleColumnKeys.length;
200
+ setVisibleColumnKeys(newVisibleColumnKeys);
201
+ }, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
173
202
  var siteSelectorLabel = availableSites && availableSites.length > 1 ? _messages.confluenceSearchModalMessages.insertIssuesTitleManySites : _messages.confluenceSearchModalMessages.insertIssuesTitle;
174
203
  var _useState9 = (0, _react.useState)(initialColumnCustomSizes),
175
204
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
@@ -192,6 +221,15 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
192
221
  setWrappedColumnKeys(Array.from(set));
193
222
  }, [wrappedColumnKeys]);
194
223
 
224
+ // TODO: common functionality of all modals refactor in EDM-9573
225
+ var handleVisibleColumnKeysChange = (0, _react.useCallback)(function () {
226
+ var newVisibleColumnKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
227
+ var columnAction = getColumnAction(visibleColumnKeys || [], newVisibleColumnKeys);
228
+ userInteractionActions.current.add(columnAction);
229
+ visibleColumnCount.current = newVisibleColumnKeys.length;
230
+ setVisibleColumnKeys(newVisibleColumnKeys);
231
+ }, [visibleColumnKeys]);
232
+
195
233
  // TODO: further refactoring in EDM-9573
196
234
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6798258
197
235
  var confluenceSearchTable = (0, _react.useMemo)(function () {
@@ -206,7 +244,7 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
206
244
  visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
207
245
  onNextPage: onNextPage,
208
246
  onLoadDatasourceDetails: loadDatasourceDetails,
209
- onVisibleColumnKeysChange: setVisibleColumnKeys,
247
+ onVisibleColumnKeysChange: handleVisibleColumnKeysChange,
210
248
  parentContainerRenderInstanceId: modalRenderInstanceId,
211
249
  extensionKey: extensionKey,
212
250
  columnCustomSizes: columnCustomSizes,
@@ -214,11 +252,19 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
214
252
  wrappedColumnKeys: wrappedColumnKeys,
215
253
  onWrappedColumnChange: (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.datasource-word_wrap') ? onWrappedColumnChange : undefined
216
254
  }));
217
- }, [status, columns, responseItems, hasNextPage, visibleColumnKeys, defaultVisibleColumnKeys, onNextPage, loadDatasourceDetails, setVisibleColumnKeys, modalRenderInstanceId, extensionKey, columnCustomSizes, onColumnResize, wrappedColumnKeys, onWrappedColumnChange]);
255
+ }, [status, columns, responseItems, hasNextPage, visibleColumnKeys, defaultVisibleColumnKeys, onNextPage, loadDatasourceDetails, handleVisibleColumnKeysChange, modalRenderInstanceId, extensionKey, columnCustomSizes, onColumnResize, wrappedColumnKeys, onWrappedColumnChange]);
218
256
  var resolvedWithNoResults = status === 'resolved' && !responseItems.length;
219
257
  var hasConfluenceSearchParams = selectedConfluenceSite && searchString;
220
258
  var selectedConfluenceSiteUrl = selectedConfluenceSite === null || selectedConfluenceSite === void 0 ? void 0 : selectedConfluenceSite.url;
221
259
  var confluenceSearchUrl = selectedConfluenceSiteUrl && searchString !== undefined && "".concat(selectedConfluenceSiteUrl, "/wiki/search/?text=").concat(encodeURI(searchString));
260
+ var analyticsPayload = (0, _react.useMemo)(function () {
261
+ return {
262
+ extensionKey: extensionKey,
263
+ destinationObjectTypes: destinationObjectTypes,
264
+ searchCount: searchCount.current,
265
+ actions: Array.from(userInteractionActions.current)
266
+ };
267
+ }, [destinationObjectTypes, extensionKey]);
222
268
  var renderModalContent = (0, _react.useCallback)(function () {
223
269
  if (status === 'rejected') {
224
270
  return (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, null);
@@ -244,10 +290,25 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
244
290
  return confluenceSearchTable;
245
291
  }, [columns.length, selectedConfluenceSiteUrl, confluenceSearchTable, resolvedWithNoResults, status, urlBeingEdited, hasConfluenceSearchParams]);
246
292
  var shouldShowResultsCount = !!totalCount && totalCount !== 1;
247
- var onInsertPressed = (0, _react.useCallback)(function () {
293
+ var onInsertPressed = (0, _react.useCallback)(function (e, analyticsEvent) {
294
+ var _insertButtonClickedE;
248
295
  if (!isParametersSet || !cloudId) {
249
296
  return;
250
297
  }
298
+ var insertButtonClickedEvent = analyticsEvent.update({
299
+ actionSubjectId: 'insert',
300
+ attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
301
+ totalItemCount: totalCount || 0,
302
+ displayedColumnCount: visibleColumnCount.current,
303
+ display: _types.DatasourceDisplay.DATASOURCE_TABLE,
304
+ searchCount: searchCount.current,
305
+ searchMethod: _types.DatasourceSearchMethod.DATASOURCE_SEARCH_QUERY,
306
+ actions: Array.from(userInteractionActions.current)
307
+ }),
308
+ eventType: 'ui'
309
+ });
310
+ var consumerEvent = (_insertButtonClickedE = insertButtonClickedEvent.clone()) !== null && _insertButtonClickedE !== void 0 ? _insertButtonClickedE : undefined;
311
+ insertButtonClickedEvent.fire(_analytics.EVENT_CHANNEL);
251
312
  onInsert((0, _adf.buildDatasourceAdf)({
252
313
  id: datasourceId,
253
314
  parameters: _objectSpread(_objectSpread({}, parameters), {}, {
@@ -269,15 +330,25 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
269
330
  })
270
331
  }
271
332
  }]
272
- }));
273
- }, [cloudId, isParametersSet, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
333
+ }), consumerEvent);
334
+ }, [isParametersSet, cloudId, analyticsPayload, totalCount, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
274
335
  var onSearch = (0, _react.useCallback)(function (newSearchString) {
336
+ searchCount.current++;
337
+ userInteractionActions.current.add(_types.DatasourceAction.QUERY_UPDATED);
275
338
  setSearchString(newSearchString);
276
339
  reset({
277
340
  shouldForceRequest: true
278
341
  });
279
342
  }, [reset]);
280
343
  var isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
344
+ var getCancelButtonAnalyticsPayload = (0, _react.useCallback)(function () {
345
+ return {
346
+ extensionKey: extensionKey,
347
+ destinationObjectTypes: destinationObjectTypes,
348
+ searchCount: searchCount.current,
349
+ actions: Array.from(userInteractionActions.current)
350
+ };
351
+ }, [destinationObjectTypes, extensionKey]);
281
352
  return (0, _react2.jsx)(_intlMessagesProvider.IntlMessagesProvider, {
282
353
  defaultMessages: _en.default,
283
354
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
@@ -319,13 +390,24 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
319
390
  values: {
320
391
  totalCount: totalCount
321
392
  }
322
- })))), (0, _react2.jsx)(_standardButton.default, {
323
- appearance: "default",
324
- onClick: onCancel
325
- }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.confluenceSearchModalMessages.cancelButtonText)), !hasNoConfluenceSites && (0, _react2.jsx)(_standardButton.default, {
393
+ })))), (0, _react2.jsx)(_cancelButton.CancelButton, {
394
+ onCancel: onCancel,
395
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
396
+ testId: "confluence-search-modal--cancel-button"
397
+ }), !hasNoConfluenceSites && (0, _react2.jsx)(_standardButton.default, {
326
398
  appearance: "primary",
327
399
  onClick: onInsertPressed,
328
400
  isDisabled: isInsertDisabled,
329
401
  testId: "confluence-search-datasource-modal--insert-button"
330
402
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.confluenceSearchModalMessages.insertResultsButtonText)))));
331
- };
403
+ };
404
+ var analyticsContextAttributes = {
405
+ dataProvider: 'confluence-search'
406
+ };
407
+ var analyticsContextData = _objectSpread(_objectSpread({}, _constants.componentMetadata.configModal), {}, {
408
+ source: 'datasourceConfigModal'
409
+ });
410
+ var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
411
+ attributes: _objectSpread({}, analyticsContextAttributes)
412
+ });
413
+ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = (0, _analyticsNext.withAnalyticsContext)(contextData)(PlainConfluenceSearchConfigModal);
@@ -42,6 +42,7 @@ var _noInstances = require("../../common/error-state/no-instances");
42
42
  var _noResults = require("../../common/error-state/no-results");
43
43
  var _initialStateView = require("../../common/initial-state-view");
44
44
  var _messages2 = require("../../common/initial-state-view/messages");
45
+ var _cancelButton = require("../../common/modal/cancel-button");
45
46
  var _contentContainer = require("../../common/modal/content-container");
46
47
  var _siteSelector = require("../../common/modal/site-selector");
47
48
  var _issueLikeTable = require("../../issue-like-table");
@@ -335,17 +336,6 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
335
336
  shouldForceRequest: true
336
337
  });
337
338
  }, [jql, reset]);
338
- var onCancelClick = (0, _react.useCallback)(function (e, analyticEvent) {
339
- analyticEvent.update({
340
- eventType: 'ui',
341
- actionSubjectId: 'cancel',
342
- attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
343
- searchCount: searchCount.current,
344
- actions: Array.from(userInteractionActions.current)
345
- })
346
- }).fire(_analytics.EVENT_CHANNEL);
347
- onCancel();
348
- }, [analyticsPayload, onCancel]);
349
339
  var onSiteSelection = (0, _react.useCallback)(function (site) {
350
340
  userInteractionActions.current.add(_types.DatasourceAction.INSTANCE_UPDATED);
351
341
  setJql('');
@@ -547,6 +537,12 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
547
537
  return issueLikeDataTableView;
548
538
  }, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
549
539
  var siteSelectorLabel = availableSites && availableSites.length > 1 ? _messages3.modalMessages.insertIssuesTitleManySites : _messages3.modalMessages.insertIssuesTitle;
540
+ var getCancelButtonAnalyticsPayload = (0, _react.useCallback)(function () {
541
+ return _objectSpread(_objectSpread({}, analyticsPayload), {}, {
542
+ searchCount: searchCount.current,
543
+ actions: Array.from(userInteractionActions.current)
544
+ });
545
+ }, [analyticsPayload]);
550
546
  return (0, _react2.jsx)(_intlMessagesProvider.IntlMessagesProvider, {
551
547
  defaultMessages: _en.default,
552
548
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
@@ -593,10 +589,11 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
593
589
  values: {
594
590
  totalCount: totalCount
595
591
  }
596
- })))), (0, _react2.jsx)(_standardButton.default, {
597
- appearance: "default",
598
- onClick: onCancelClick
599
- }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages3.modalMessages.cancelButtonText)), !hasNoJiraSites && (0, _react2.jsx)(_standardButton.default, {
592
+ })))), (0, _react2.jsx)(_cancelButton.CancelButton, {
593
+ onCancel: onCancel,
594
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
595
+ testId: "jira-datasource-modal--cancel-button"
596
+ }), !hasNoJiraSites && (0, _react2.jsx)(_standardButton.default, {
600
597
  appearance: "primary",
601
598
  onClick: onInsertPressed,
602
599
  isDisabled: isInsertDisabled,
@@ -6,11 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.modalMessages = void 0;
7
7
  var _reactIntlNext = require("react-intl-next");
8
8
  var modalMessages = exports.modalMessages = (0, _reactIntlNext.defineMessages)({
9
- cancelButtonText: {
10
- id: 'linkDataSource.jira-issues.configmodal.cancelButtonText',
11
- description: 'Button text to close the modal with no changes being made',
12
- defaultMessage: 'Cancel'
13
- },
14
9
  insertIssuesButtonText: {
15
10
  id: 'linkDataSource.jira-issues.configmodal.insertIssuesButtonText',
16
11
  description: 'Button text to insert the displayed content',
@@ -22,6 +22,7 @@ import i18nEN from '../../../i18n/en';
22
22
  import { PermissionError } from '../../../services/cmdbService.utils';
23
23
  import { AccessRequired } from '../../../ui/common/error-state/access-required';
24
24
  import { ModalLoadingError } from '../../common/error-state/modal-loading-error';
25
+ import { CancelButton } from '../../common/modal/cancel-button';
25
26
  import { AssetsSearchContainer } from '../search-container';
26
27
  import { AssetsSearchContainerLoading } from '../search-container/loading-state';
27
28
  import { modalMessages } from './messages';
@@ -246,18 +247,6 @@ const PlainAssetsConfigModal = props => {
246
247
  }), consumerEvent);
247
248
  }
248
249
  }, [aql, schemaId, workspaceId, analyticsPayload, totalCount, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
249
- const onCancelClick = useCallback((e, analyticEvent) => {
250
- analyticEvent.update({
251
- eventType: 'ui',
252
- actionSubjectId: 'cancel',
253
- attributes: {
254
- ...analyticsPayload,
255
- searchCount: searchCount.current,
256
- actions: Array.from(userInteractionActions.current)
257
- }
258
- }).fire(EVENT_CHANNEL);
259
- onCancel();
260
- }, [analyticsPayload, onCancel]);
261
250
  const handleOnSearch = useCallback((searchAql, searchSchemaId) => {
262
251
  if (schemaId !== searchSchemaId || aql !== searchAql || status === 'rejected') {
263
252
  searchCount.current++;
@@ -311,6 +300,13 @@ const PlainAssetsConfigModal = props => {
311
300
  });
312
301
  }
313
302
  }, [errorState, workspaceId, assetsClientLoading, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql, existingObjectSchema, objectSchemas, handleOnSearch, status]);
303
+ const getCancelButtonAnalyticsPayload = useCallback(() => {
304
+ return {
305
+ ...analyticsPayload,
306
+ searchCount: searchCount.current,
307
+ actions: Array.from(userInteractionActions.current)
308
+ };
309
+ }, [analyticsPayload]);
314
310
  return jsx(IntlMessagesProvider, {
315
311
  defaultMessages: i18nEN,
316
312
  loaderFn: fetchMessagesForLocale
@@ -337,11 +333,11 @@ const PlainAssetsConfigModal = props => {
337
333
  columns: columns,
338
334
  defaultVisibleColumnKeys: defaultVisibleColumnKeys,
339
335
  modalRenderInstanceId: modalRenderInstanceId
340
- })), jsx(ModalFooter, null, jsx(Button, {
341
- appearance: "default",
342
- onClick: onCancelClick,
336
+ })), jsx(ModalFooter, null, jsx(CancelButton, {
337
+ onCancel: onCancel,
338
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
343
339
  testId: 'asset-datasource-modal--cancel-button'
344
- }, jsx(FormattedMessage, modalMessages.cancelButtonText)), jsx(Button, {
340
+ }), jsx(Button, {
345
341
  appearance: "primary",
346
342
  onClick: onInsertPressed,
347
343
  isDisabled: isDisabled,
@@ -1,10 +1,5 @@
1
1
  import { defineMessages } from 'react-intl-next';
2
2
  export const modalMessages = defineMessages({
3
- cancelButtonText: {
4
- id: 'linkDataSource.assets.configmodal.cancelButtonText',
5
- description: 'Button text to close the modal with no changes being made',
6
- defaultMessage: 'Cancel'
7
- },
8
3
  updateObjectsButtonText: {
9
4
  id: 'linkDataSource.assets.configmodal.updateObjectsButtonText',
10
5
  description: 'Button text to update the displayed content',
@@ -0,0 +1,25 @@
1
+ /** @jsx jsx */
2
+ import { useCallback } from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import { FormattedMessage } from 'react-intl-next';
5
+ import Button from '@atlaskit/button/standard-button';
6
+ import { useDatasourceAnalyticsEvents } from '../../../../analytics';
7
+ import { cancelButtonMessages } from './messages';
8
+ export const CancelButton = ({
9
+ getAnalyticsPayload,
10
+ onCancel,
11
+ testId
12
+ }) => {
13
+ const {
14
+ fireEvent
15
+ } = useDatasourceAnalyticsEvents();
16
+ const onCancelClick = useCallback(() => {
17
+ fireEvent('ui.button.clicked.cancel', getAnalyticsPayload());
18
+ onCancel();
19
+ }, [getAnalyticsPayload, fireEvent, onCancel]);
20
+ return jsx(Button, {
21
+ appearance: "default",
22
+ onClick: onCancelClick,
23
+ testId: testId
24
+ }, jsx(FormattedMessage, cancelButtonMessages.cancelButtonText));
25
+ };
@@ -0,0 +1,8 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const cancelButtonMessages = defineMessages({
3
+ cancelButtonText: {
4
+ id: 'linkDataSource.configmodal.cancelButtonText',
5
+ description: 'Button text to close the modal with no changes being made',
6
+ defaultMessage: 'Cancel'
7
+ }
8
+ });