@atlaskit/link-datasource 1.25.0 → 1.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +7 -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 +39 -9
  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 +42 -8
  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 +38 -8
  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 +3 -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 +3 -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,12 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.25.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#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.
8
+ - Updated dependencies
9
+
3
10
  ## 1.25.0
4
11
 
5
12
  ### 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.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,8 @@ 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 _constants = require("../../../analytics/constants");
28
+ var _types = require("../../../analytics/types");
26
29
  var _adf = require("../../../common/utils/adf");
27
30
  var _fetchMessagesForLocale = require("../../../common/utils/locale/fetch-messages-for-locale");
28
31
  var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
@@ -33,6 +36,7 @@ var _modalLoadingError = require("../../common/error-state/modal-loading-error")
33
36
  var _noInstances = require("../../common/error-state/no-instances");
34
37
  var _noResults = require("../../common/error-state/no-results");
35
38
  var _initialStateView = require("../../common/initial-state-view");
39
+ var _cancelButton = require("../../common/modal/cancel-button");
36
40
  var _contentContainer = require("../../common/modal/content-container");
37
41
  var _siteSelector = require("../../common/modal/site-selector");
38
42
  var _issueLikeTable = require("../../issue-like-table");
@@ -52,7 +56,7 @@ var searchCountStyles = (0, _primitives.xcss)({
52
56
  flex: 1,
53
57
  fontWeight: 600
54
58
  });
55
- var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(props) {
59
+ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConfigModal(props) {
56
60
  var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
57
61
  modalRenderInstanceId = _useRef.current;
58
62
  var datasourceId = props.datasourceId,
@@ -80,6 +84,10 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
80
84
  visibleColumnKeys = _useState8[0],
81
85
  setVisibleColumnKeys = _useState8[1];
82
86
 
87
+ // analytics related parameters
88
+ var searchCount = (0, _react.useRef)(0);
89
+ var userInteractionActions = (0, _react.useRef)(new Set());
90
+
83
91
  // TODO: further refactoring in EDM-9573
84
92
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
85
93
  var parameters = (0, _react.useMemo)(function () {
@@ -106,9 +114,10 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
106
114
  columns = _useDatasourceTableSt.columns,
107
115
  defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
108
116
  loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails,
117
+ totalCount = _useDatasourceTableSt.totalCount,
109
118
  _useDatasourceTableSt2 = _useDatasourceTableSt.extensionKey,
110
119
  extensionKey = _useDatasourceTableSt2 === void 0 ? null : _useDatasourceTableSt2,
111
- totalCount = _useDatasourceTableSt.totalCount;
120
+ destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes;
112
121
  var hasNoConfluenceSites = availableSites && availableSites.length === 0;
113
122
  var selectedConfluenceSite = (0, _react.useMemo)(function () {
114
123
  if (cloudId) {
@@ -270,14 +279,24 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
270
279
  }
271
280
  }]
272
281
  }));
273
- }, [cloudId, isParametersSet, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
282
+ }, [isParametersSet, cloudId, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
274
283
  var onSearch = (0, _react.useCallback)(function (newSearchString) {
284
+ searchCount.current++;
285
+ userInteractionActions.current.add(_types.DatasourceAction.QUERY_UPDATED);
275
286
  setSearchString(newSearchString);
276
287
  reset({
277
288
  shouldForceRequest: true
278
289
  });
279
290
  }, [reset]);
280
291
  var isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
292
+ var getCancelButtonAnalyticsPayload = (0, _react.useCallback)(function () {
293
+ return {
294
+ extensionKey: extensionKey,
295
+ destinationObjectTypes: destinationObjectTypes,
296
+ searchCount: searchCount.current,
297
+ actions: Array.from(userInteractionActions.current)
298
+ };
299
+ }, [destinationObjectTypes, extensionKey]);
281
300
  return (0, _react2.jsx)(_intlMessagesProvider.IntlMessagesProvider, {
282
301
  defaultMessages: _en.default,
283
302
  loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
@@ -319,13 +338,24 @@ var ConfluenceSearchConfigModal = exports.ConfluenceSearchConfigModal = function
319
338
  values: {
320
339
  totalCount: totalCount
321
340
  }
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, {
341
+ })))), (0, _react2.jsx)(_cancelButton.CancelButton, {
342
+ onCancel: onCancel,
343
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
344
+ testId: "confluence-search-modal--cancel-button"
345
+ }), !hasNoConfluenceSites && (0, _react2.jsx)(_standardButton.default, {
326
346
  appearance: "primary",
327
347
  onClick: onInsertPressed,
328
348
  isDisabled: isInsertDisabled,
329
349
  testId: "confluence-search-datasource-modal--insert-button"
330
350
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.confluenceSearchModalMessages.insertResultsButtonText)))));
331
- };
351
+ };
352
+ var analyticsContextAttributes = {
353
+ dataProvider: 'confluence-search'
354
+ };
355
+ var analyticsContextData = _objectSpread(_objectSpread({}, _constants.componentMetadata.configModal), {}, {
356
+ source: 'datasourceConfigModal'
357
+ });
358
+ var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
359
+ attributes: _objectSpread({}, analyticsContextAttributes)
360
+ });
361
+ 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
+ });
@@ -4,6 +4,7 @@ import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'rea
4
4
  import { jsx } from '@emotion/react';
5
5
  import { FormattedMessage, FormattedNumber } from 'react-intl-next';
6
6
  import { v4 as uuidv4 } from 'uuid';
7
+ import { withAnalyticsContext } from '@atlaskit/analytics-next';
7
8
  import Button from '@atlaskit/button/standard-button';
8
9
  import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
9
10
  import Modal, { ModalBody, ModalFooter, ModalHeader, ModalTitle } from '@atlaskit/modal-dialog';
@@ -11,6 +12,8 @@ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
11
12
  import { Box, xcss } from '@atlaskit/primitives';
12
13
  import LinkUrl from '@atlaskit/smart-card/link-url';
13
14
  import { N800 } from '@atlaskit/theme/colors';
15
+ import { componentMetadata } from '../../../analytics/constants';
16
+ import { DatasourceAction } from '../../../analytics/types';
14
17
  import { buildDatasourceAdf } from '../../../common/utils/adf';
15
18
  import { fetchMessagesForLocale } from '../../../common/utils/locale/fetch-messages-for-locale';
16
19
  import { useDatasourceTableState } from '../../../hooks/useDatasourceTableState';
@@ -21,6 +24,7 @@ import { ModalLoadingError } from '../../common/error-state/modal-loading-error'
21
24
  import { NoInstancesView } from '../../common/error-state/no-instances';
22
25
  import { NoResults } from '../../common/error-state/no-results';
23
26
  import { InitialStateView } from '../../common/initial-state-view';
27
+ import { CancelButton } from '../../common/modal/cancel-button';
24
28
  import { ContentContainer } from '../../common/modal/content-container';
25
29
  import { SiteSelector } from '../../common/modal/site-selector';
26
30
  import { EmptyState, IssueLikeDataTableView } from '../../issue-like-table';
@@ -36,7 +40,7 @@ const searchCountStyles = xcss({
36
40
  flex: 1,
37
41
  fontWeight: 600
38
42
  });
39
- export const ConfluenceSearchConfigModal = props => {
43
+ export const PlainConfluenceSearchConfigModal = props => {
40
44
  const {
41
45
  current: modalRenderInstanceId
42
46
  } = useRef(uuidv4());
@@ -55,6 +59,10 @@ export const ConfluenceSearchConfigModal = props => {
55
59
  const [searchString, setSearchString] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.searchString);
56
60
  const [visibleColumnKeys, setVisibleColumnKeys] = useState(initialVisibleColumnKeys);
57
61
 
62
+ // analytics related parameters
63
+ const searchCount = useRef(0);
64
+ const userInteractionActions = useRef(new Set());
65
+
58
66
  // TODO: further refactoring in EDM-9573
59
67
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
60
68
  const parameters = useMemo(() => ({
@@ -72,8 +80,9 @@ export const ConfluenceSearchConfigModal = props => {
72
80
  columns,
73
81
  defaultVisibleColumnKeys,
74
82
  loadDatasourceDetails,
83
+ totalCount,
75
84
  extensionKey = null,
76
- totalCount
85
+ destinationObjectTypes
77
86
  } = useDatasourceTableState({
78
87
  datasourceId,
79
88
  parameters: isParametersSet ? parameters : undefined,
@@ -215,14 +224,24 @@ export const ConfluenceSearchConfigModal = props => {
215
224
  }
216
225
  }]
217
226
  }));
218
- }, [cloudId, isParametersSet, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
227
+ }, [isParametersSet, cloudId, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
219
228
  const onSearch = useCallback(newSearchString => {
229
+ searchCount.current++;
230
+ userInteractionActions.current.add(DatasourceAction.QUERY_UPDATED);
220
231
  setSearchString(newSearchString);
221
232
  reset({
222
233
  shouldForceRequest: true
223
234
  });
224
235
  }, [reset]);
225
236
  const isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
237
+ const getCancelButtonAnalyticsPayload = useCallback(() => {
238
+ return {
239
+ extensionKey,
240
+ destinationObjectTypes,
241
+ searchCount: searchCount.current,
242
+ actions: Array.from(userInteractionActions.current)
243
+ };
244
+ }, [destinationObjectTypes, extensionKey]);
226
245
  return jsx(IntlMessagesProvider, {
227
246
  defaultMessages: i18nEN,
228
247
  loaderFn: fetchMessagesForLocale
@@ -264,13 +283,28 @@ export const ConfluenceSearchConfigModal = props => {
264
283
  values: {
265
284
  totalCount
266
285
  }
267
- })))), jsx(Button, {
268
- appearance: "default",
269
- onClick: onCancel
270
- }, jsx(FormattedMessage, confluenceSearchModalMessages.cancelButtonText)), !hasNoConfluenceSites && jsx(Button, {
286
+ })))), jsx(CancelButton, {
287
+ onCancel: onCancel,
288
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
289
+ testId: "confluence-search-modal--cancel-button"
290
+ }), !hasNoConfluenceSites && jsx(Button, {
271
291
  appearance: "primary",
272
292
  onClick: onInsertPressed,
273
293
  isDisabled: isInsertDisabled,
274
294
  testId: "confluence-search-datasource-modal--insert-button"
275
295
  }, jsx(FormattedMessage, confluenceSearchModalMessages.insertResultsButtonText)))));
276
- };
296
+ };
297
+ const analyticsContextAttributes = {
298
+ dataProvider: 'confluence-search'
299
+ };
300
+ const analyticsContextData = {
301
+ ...componentMetadata.configModal,
302
+ source: 'datasourceConfigModal'
303
+ };
304
+ const contextData = {
305
+ ...analyticsContextData,
306
+ attributes: {
307
+ ...analyticsContextAttributes
308
+ }
309
+ };
310
+ export const ConfluenceSearchConfigModal = withAnalyticsContext(contextData)(PlainConfluenceSearchConfigModal);
@@ -30,6 +30,7 @@ import { NoInstancesView } from '../../common/error-state/no-instances';
30
30
  import { NoResults } from '../../common/error-state/no-results';
31
31
  import { InitialStateView } from '../../common/initial-state-view';
32
32
  import { initialStateViewMessages } from '../../common/initial-state-view/messages';
33
+ import { CancelButton } from '../../common/modal/cancel-button';
33
34
  import { ContentContainer } from '../../common/modal/content-container';
34
35
  import { SiteSelector } from '../../common/modal/site-selector';
35
36
  import { EmptyState, IssueLikeDataTableView } from '../../issue-like-table';
@@ -161,12 +162,10 @@ export const PlainJiraIssuesConfigModal = props => {
161
162
  return (availableSites === null || availableSites === void 0 ? void 0 : availableSites.find(jiraSite => jiraSite.url === currentlyLoggedInSiteUrl)) || (availableSites === null || availableSites === void 0 ? void 0 : availableSites[0]);
162
163
  }
163
164
  }, [availableSites, cloudId]);
164
- const analyticsPayload = useMemo(() => {
165
- return {
166
- extensionKey: extensionKey,
167
- destinationObjectTypes: destinationObjectTypes
168
- };
169
- }, [destinationObjectTypes, extensionKey]);
165
+ const analyticsPayload = useMemo(() => ({
166
+ extensionKey,
167
+ destinationObjectTypes
168
+ }), [destinationObjectTypes, extensionKey]);
170
169
  const resolvedWithNoResults = status === 'resolved' && !responseItems.length;
171
170
  const jqlUrl = selectedJiraSite && jql && `${selectedJiraSite.url}/issues/?jql=${encodeURI(jql)}`;
172
171
  const isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
@@ -277,18 +276,6 @@ export const PlainJiraIssuesConfigModal = props => {
277
276
  shouldForceRequest: true
278
277
  });
279
278
  }, [jql, reset]);
280
- const onCancelClick = useCallback((e, analyticEvent) => {
281
- analyticEvent.update({
282
- eventType: 'ui',
283
- actionSubjectId: 'cancel',
284
- attributes: {
285
- ...analyticsPayload,
286
- searchCount: searchCount.current,
287
- actions: Array.from(userInteractionActions.current)
288
- }
289
- }).fire(EVENT_CHANNEL);
290
- onCancel();
291
- }, [analyticsPayload, onCancel]);
292
279
  const onSiteSelection = useCallback(site => {
293
280
  userInteractionActions.current.add(DatasourceAction.INSTANCE_UPDATED);
294
281
  setJql('');
@@ -493,6 +480,13 @@ export const PlainJiraIssuesConfigModal = props => {
493
480
  return issueLikeDataTableView;
494
481
  }, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
495
482
  const siteSelectorLabel = availableSites && availableSites.length > 1 ? modalMessages.insertIssuesTitleManySites : modalMessages.insertIssuesTitle;
483
+ const getCancelButtonAnalyticsPayload = useCallback(() => {
484
+ return {
485
+ ...analyticsPayload,
486
+ searchCount: searchCount.current,
487
+ actions: Array.from(userInteractionActions.current)
488
+ };
489
+ }, [analyticsPayload]);
496
490
  return jsx(IntlMessagesProvider, {
497
491
  defaultMessages: i18nEN,
498
492
  loaderFn: fetchMessagesForLocale
@@ -539,10 +533,11 @@ export const PlainJiraIssuesConfigModal = props => {
539
533
  values: {
540
534
  totalCount
541
535
  }
542
- })))), jsx(Button, {
543
- appearance: "default",
544
- onClick: onCancelClick
545
- }, jsx(FormattedMessage, modalMessages.cancelButtonText)), !hasNoJiraSites && jsx(Button, {
536
+ })))), jsx(CancelButton, {
537
+ onCancel: onCancel,
538
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
539
+ testId: "jira-datasource-modal--cancel-button"
540
+ }), !hasNoJiraSites && jsx(Button, {
546
541
  appearance: "primary",
547
542
  onClick: onInsertPressed,
548
543
  isDisabled: isInsertDisabled,
@@ -1,10 +1,5 @@
1
1
  import { defineMessages } from 'react-intl-next';
2
2
  export const modalMessages = defineMessages({
3
- cancelButtonText: {
4
- id: 'linkDataSource.jira-issues.configmodal.cancelButtonText',
5
- description: 'Button text to close the modal with no changes being made',
6
- defaultMessage: 'Cancel'
7
- },
8
3
  insertIssuesButtonText: {
9
4
  id: 'linkDataSource.jira-issues.configmodal.insertIssuesButtonText',
10
5
  description: 'Button text to insert the displayed content',
@@ -26,6 +26,7 @@ import i18nEN from '../../../i18n/en';
26
26
  import { PermissionError } from '../../../services/cmdbService.utils';
27
27
  import { AccessRequired } from '../../../ui/common/error-state/access-required';
28
28
  import { ModalLoadingError } from '../../common/error-state/modal-loading-error';
29
+ import { CancelButton } from '../../common/modal/cancel-button';
29
30
  import { AssetsSearchContainer } from '../search-container';
30
31
  import { AssetsSearchContainerLoading } from '../search-container/loading-state';
31
32
  import { modalMessages } from './messages';
@@ -263,17 +264,6 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
263
264
  }), consumerEvent);
264
265
  }
265
266
  }, [aql, schemaId, workspaceId, analyticsPayload, totalCount, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
266
- var onCancelClick = useCallback(function (e, analyticEvent) {
267
- analyticEvent.update({
268
- eventType: 'ui',
269
- actionSubjectId: 'cancel',
270
- attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
271
- searchCount: searchCount.current,
272
- actions: Array.from(userInteractionActions.current)
273
- })
274
- }).fire(EVENT_CHANNEL);
275
- onCancel();
276
- }, [analyticsPayload, onCancel]);
277
267
  var handleOnSearch = useCallback(function (searchAql, searchSchemaId) {
278
268
  if (schemaId !== searchSchemaId || aql !== searchAql || status === 'rejected') {
279
269
  searchCount.current++;
@@ -327,6 +317,12 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
327
317
  });
328
318
  }
329
319
  }, [errorState, workspaceId, assetsClientLoading, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql, existingObjectSchema, objectSchemas, handleOnSearch, status]);
320
+ var getCancelButtonAnalyticsPayload = useCallback(function () {
321
+ return _objectSpread(_objectSpread({}, analyticsPayload), {}, {
322
+ searchCount: searchCount.current,
323
+ actions: Array.from(userInteractionActions.current)
324
+ });
325
+ }, [analyticsPayload]);
330
326
  return jsx(IntlMessagesProvider, {
331
327
  defaultMessages: i18nEN,
332
328
  loaderFn: fetchMessagesForLocale
@@ -353,11 +349,11 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
353
349
  columns: columns,
354
350
  defaultVisibleColumnKeys: defaultVisibleColumnKeys,
355
351
  modalRenderInstanceId: modalRenderInstanceId
356
- })), jsx(ModalFooter, null, jsx(Button, {
357
- appearance: "default",
358
- onClick: onCancelClick,
352
+ })), jsx(ModalFooter, null, jsx(CancelButton, {
353
+ onCancel: onCancel,
354
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
359
355
  testId: 'asset-datasource-modal--cancel-button'
360
- }, jsx(FormattedMessage, modalMessages.cancelButtonText)), jsx(Button, {
356
+ }), jsx(Button, {
361
357
  appearance: "primary",
362
358
  onClick: onInsertPressed,
363
359
  isDisabled: isDisabled,
@@ -1,10 +1,5 @@
1
1
  import { defineMessages } from 'react-intl-next';
2
2
  export var 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,23 @@
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 var CancelButton = function CancelButton(_ref) {
9
+ var getAnalyticsPayload = _ref.getAnalyticsPayload,
10
+ onCancel = _ref.onCancel,
11
+ testId = _ref.testId;
12
+ var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
13
+ fireEvent = _useDatasourceAnalyti.fireEvent;
14
+ var onCancelClick = useCallback(function () {
15
+ fireEvent('ui.button.clicked.cancel', getAnalyticsPayload());
16
+ onCancel();
17
+ }, [getAnalyticsPayload, fireEvent, onCancel]);
18
+ return jsx(Button, {
19
+ appearance: "default",
20
+ onClick: onCancelClick,
21
+ testId: testId
22
+ }, jsx(FormattedMessage, cancelButtonMessages.cancelButtonText));
23
+ };
@@ -0,0 +1,8 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export var 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
+ });
@@ -11,6 +11,7 @@ import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'rea
11
11
  import { jsx } from '@emotion/react';
12
12
  import { FormattedMessage, FormattedNumber } from 'react-intl-next';
13
13
  import { v4 as uuidv4 } from 'uuid';
14
+ import { withAnalyticsContext } from '@atlaskit/analytics-next';
14
15
  import Button from '@atlaskit/button/standard-button';
15
16
  import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
16
17
  import Modal, { ModalBody, ModalFooter, ModalHeader, ModalTitle } from '@atlaskit/modal-dialog';
@@ -18,6 +19,8 @@ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
18
19
  import { Box, xcss } from '@atlaskit/primitives';
19
20
  import LinkUrl from '@atlaskit/smart-card/link-url';
20
21
  import { N800 } from '@atlaskit/theme/colors';
22
+ import { componentMetadata } from '../../../analytics/constants';
23
+ import { DatasourceAction } from '../../../analytics/types';
21
24
  import { buildDatasourceAdf } from '../../../common/utils/adf';
22
25
  import { fetchMessagesForLocale } from '../../../common/utils/locale/fetch-messages-for-locale';
23
26
  import { useDatasourceTableState } from '../../../hooks/useDatasourceTableState';
@@ -28,6 +31,7 @@ import { ModalLoadingError } from '../../common/error-state/modal-loading-error'
28
31
  import { NoInstancesView } from '../../common/error-state/no-instances';
29
32
  import { NoResults } from '../../common/error-state/no-results';
30
33
  import { InitialStateView } from '../../common/initial-state-view';
34
+ import { CancelButton } from '../../common/modal/cancel-button';
31
35
  import { ContentContainer } from '../../common/modal/content-container';
32
36
  import { SiteSelector } from '../../common/modal/site-selector';
33
37
  import { EmptyState, IssueLikeDataTableView } from '../../issue-like-table';
@@ -43,7 +47,7 @@ var searchCountStyles = xcss({
43
47
  flex: 1,
44
48
  fontWeight: 600
45
49
  });
46
- export var ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(props) {
50
+ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConfigModal(props) {
47
51
  var _useRef = useRef(uuidv4()),
48
52
  modalRenderInstanceId = _useRef.current;
49
53
  var datasourceId = props.datasourceId,
@@ -71,6 +75,10 @@ export var ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(pr
71
75
  visibleColumnKeys = _useState8[0],
72
76
  setVisibleColumnKeys = _useState8[1];
73
77
 
78
+ // analytics related parameters
79
+ var searchCount = useRef(0);
80
+ var userInteractionActions = useRef(new Set());
81
+
74
82
  // TODO: further refactoring in EDM-9573
75
83
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
76
84
  var parameters = useMemo(function () {
@@ -97,9 +105,10 @@ export var ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(pr
97
105
  columns = _useDatasourceTableSt.columns,
98
106
  defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
99
107
  loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails,
108
+ totalCount = _useDatasourceTableSt.totalCount,
100
109
  _useDatasourceTableSt2 = _useDatasourceTableSt.extensionKey,
101
110
  extensionKey = _useDatasourceTableSt2 === void 0 ? null : _useDatasourceTableSt2,
102
- totalCount = _useDatasourceTableSt.totalCount;
111
+ destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes;
103
112
  var hasNoConfluenceSites = availableSites && availableSites.length === 0;
104
113
  var selectedConfluenceSite = useMemo(function () {
105
114
  if (cloudId) {
@@ -261,14 +270,24 @@ export var ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(pr
261
270
  }
262
271
  }]
263
272
  }));
264
- }, [cloudId, isParametersSet, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
273
+ }, [isParametersSet, cloudId, onInsert, datasourceId, parameters, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys]);
265
274
  var onSearch = useCallback(function (newSearchString) {
275
+ searchCount.current++;
276
+ userInteractionActions.current.add(DatasourceAction.QUERY_UPDATED);
266
277
  setSearchString(newSearchString);
267
278
  reset({
268
279
  shouldForceRequest: true
269
280
  });
270
281
  }, [reset]);
271
282
  var isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
283
+ var getCancelButtonAnalyticsPayload = useCallback(function () {
284
+ return {
285
+ extensionKey: extensionKey,
286
+ destinationObjectTypes: destinationObjectTypes,
287
+ searchCount: searchCount.current,
288
+ actions: Array.from(userInteractionActions.current)
289
+ };
290
+ }, [destinationObjectTypes, extensionKey]);
272
291
  return jsx(IntlMessagesProvider, {
273
292
  defaultMessages: i18nEN,
274
293
  loaderFn: fetchMessagesForLocale
@@ -310,13 +329,24 @@ export var ConfluenceSearchConfigModal = function ConfluenceSearchConfigModal(pr
310
329
  values: {
311
330
  totalCount: totalCount
312
331
  }
313
- })))), jsx(Button, {
314
- appearance: "default",
315
- onClick: onCancel
316
- }, jsx(FormattedMessage, confluenceSearchModalMessages.cancelButtonText)), !hasNoConfluenceSites && jsx(Button, {
332
+ })))), jsx(CancelButton, {
333
+ onCancel: onCancel,
334
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
335
+ testId: "confluence-search-modal--cancel-button"
336
+ }), !hasNoConfluenceSites && jsx(Button, {
317
337
  appearance: "primary",
318
338
  onClick: onInsertPressed,
319
339
  isDisabled: isInsertDisabled,
320
340
  testId: "confluence-search-datasource-modal--insert-button"
321
341
  }, jsx(FormattedMessage, confluenceSearchModalMessages.insertResultsButtonText)))));
322
- };
342
+ };
343
+ var analyticsContextAttributes = {
344
+ dataProvider: 'confluence-search'
345
+ };
346
+ var analyticsContextData = _objectSpread(_objectSpread({}, componentMetadata.configModal), {}, {
347
+ source: 'datasourceConfigModal'
348
+ });
349
+ var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
350
+ attributes: _objectSpread({}, analyticsContextAttributes)
351
+ });
352
+ export var ConfluenceSearchConfigModal = withAnalyticsContext(contextData)(PlainConfluenceSearchConfigModal);
@@ -37,6 +37,7 @@ import { NoInstancesView } from '../../common/error-state/no-instances';
37
37
  import { NoResults } from '../../common/error-state/no-results';
38
38
  import { InitialStateView } from '../../common/initial-state-view';
39
39
  import { initialStateViewMessages } from '../../common/initial-state-view/messages';
40
+ import { CancelButton } from '../../common/modal/cancel-button';
40
41
  import { ContentContainer } from '../../common/modal/content-container';
41
42
  import { SiteSelector } from '../../common/modal/site-selector';
42
43
  import { EmptyState, IssueLikeDataTableView } from '../../issue-like-table';
@@ -326,17 +327,6 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
326
327
  shouldForceRequest: true
327
328
  });
328
329
  }, [jql, reset]);
329
- var onCancelClick = useCallback(function (e, analyticEvent) {
330
- analyticEvent.update({
331
- eventType: 'ui',
332
- actionSubjectId: 'cancel',
333
- attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
334
- searchCount: searchCount.current,
335
- actions: Array.from(userInteractionActions.current)
336
- })
337
- }).fire(EVENT_CHANNEL);
338
- onCancel();
339
- }, [analyticsPayload, onCancel]);
340
330
  var onSiteSelection = useCallback(function (site) {
341
331
  userInteractionActions.current.add(DatasourceAction.INSTANCE_UPDATED);
342
332
  setJql('');
@@ -538,6 +528,12 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
538
528
  return issueLikeDataTableView;
539
529
  }, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
540
530
  var siteSelectorLabel = availableSites && availableSites.length > 1 ? modalMessages.insertIssuesTitleManySites : modalMessages.insertIssuesTitle;
531
+ var getCancelButtonAnalyticsPayload = useCallback(function () {
532
+ return _objectSpread(_objectSpread({}, analyticsPayload), {}, {
533
+ searchCount: searchCount.current,
534
+ actions: Array.from(userInteractionActions.current)
535
+ });
536
+ }, [analyticsPayload]);
541
537
  return jsx(IntlMessagesProvider, {
542
538
  defaultMessages: i18nEN,
543
539
  loaderFn: fetchMessagesForLocale
@@ -584,10 +580,11 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
584
580
  values: {
585
581
  totalCount: totalCount
586
582
  }
587
- })))), jsx(Button, {
588
- appearance: "default",
589
- onClick: onCancelClick
590
- }, jsx(FormattedMessage, modalMessages.cancelButtonText)), !hasNoJiraSites && jsx(Button, {
583
+ })))), jsx(CancelButton, {
584
+ onCancel: onCancel,
585
+ getAnalyticsPayload: getCancelButtonAnalyticsPayload,
586
+ testId: "jira-datasource-modal--cancel-button"
587
+ }), !hasNoJiraSites && jsx(Button, {
591
588
  appearance: "primary",
592
589
  onClick: onInsertPressed,
593
590
  isDisabled: isInsertDisabled,
@@ -1,10 +1,5 @@
1
1
  import { defineMessages } from 'react-intl-next';
2
2
  export var modalMessages = defineMessages({
3
- cancelButtonText: {
4
- id: 'linkDataSource.jira-issues.configmodal.cancelButtonText',
5
- description: 'Button text to close the modal with no changes being made',
6
- defaultMessage: 'Cancel'
7
- },
8
3
  insertIssuesButtonText: {
9
4
  id: 'linkDataSource.jira-issues.configmodal.insertIssuesButtonText',
10
5
  description: 'Button text to insert the displayed content',
@@ -13,7 +13,7 @@ export type AnalyticsContextType = {
13
13
  source: 'datasourceConfigModal';
14
14
  };
15
15
  export type AnalyticsContextAttributesType = {
16
- dataProvider: 'jira-issues' | 'jsm-assets';
16
+ dataProvider: 'jira-issues' | 'jsm-assets' | 'confluence-search';
17
17
  };
18
18
  export type DatasourceModalDialogViewedAttributesType = {};
19
19
  export type ModalReadyDatasourceAttributesType = {
@@ -1,9 +1,4 @@
1
1
  export declare const modalMessages: {
2
- cancelButtonText: {
3
- id: string;
4
- description: string;
5
- defaultMessage: string;
6
- };
7
2
  updateObjectsButtonText: {
8
3
  id: string;
9
4
  description: string;
@@ -0,0 +1,8 @@
1
+ import { jsx } from '@emotion/react';
2
+ import { ButtonClickedCancelAttributesType } from '../../../../analytics/generated/analytics.types';
3
+ export interface CancelButtonProps {
4
+ getAnalyticsPayload: () => ButtonClickedCancelAttributesType;
5
+ onCancel: () => void;
6
+ testId: string;
7
+ }
8
+ export declare const CancelButton: ({ getAnalyticsPayload, onCancel, testId, }: CancelButtonProps) => jsx.JSX.Element;
@@ -0,0 +1,7 @@
1
+ export declare const cancelButtonMessages: {
2
+ cancelButtonText: {
3
+ id: string;
4
+ description: string;
5
+ defaultMessage: string;
6
+ };
7
+ };
@@ -1,3 +1,5 @@
1
+ /// <reference types="react" />
1
2
  import { jsx } from '@emotion/react';
2
3
  import { ConfluenceSearchConfigModalProps } from '../types';
3
- export declare const ConfluenceSearchConfigModal: (props: ConfluenceSearchConfigModalProps) => jsx.JSX.Element;
4
+ export declare const PlainConfluenceSearchConfigModal: (props: ConfluenceSearchConfigModalProps) => jsx.JSX.Element;
5
+ export declare const ConfluenceSearchConfigModal: import("react").ForwardRefExoticComponent<ConfluenceSearchConfigModalProps & import("@atlaskit/analytics-next").WithContextProps & import("react").RefAttributes<any>>;
@@ -1,9 +1,4 @@
1
1
  export declare const modalMessages: {
2
- cancelButtonText: {
3
- id: string;
4
- description: string;
5
- defaultMessage: string;
6
- };
7
2
  insertIssuesButtonText: {
8
3
  id: string;
9
4
  description: string;
@@ -13,7 +13,7 @@ export type AnalyticsContextType = {
13
13
  source: 'datasourceConfigModal';
14
14
  };
15
15
  export type AnalyticsContextAttributesType = {
16
- dataProvider: 'jira-issues' | 'jsm-assets';
16
+ dataProvider: 'jira-issues' | 'jsm-assets' | 'confluence-search';
17
17
  };
18
18
  export type DatasourceModalDialogViewedAttributesType = {};
19
19
  export type ModalReadyDatasourceAttributesType = {
@@ -1,9 +1,4 @@
1
1
  export declare const modalMessages: {
2
- cancelButtonText: {
3
- id: string;
4
- description: string;
5
- defaultMessage: string;
6
- };
7
2
  updateObjectsButtonText: {
8
3
  id: string;
9
4
  description: string;
@@ -0,0 +1,8 @@
1
+ import { jsx } from '@emotion/react';
2
+ import { ButtonClickedCancelAttributesType } from '../../../../analytics/generated/analytics.types';
3
+ export interface CancelButtonProps {
4
+ getAnalyticsPayload: () => ButtonClickedCancelAttributesType;
5
+ onCancel: () => void;
6
+ testId: string;
7
+ }
8
+ export declare const CancelButton: ({ getAnalyticsPayload, onCancel, testId, }: CancelButtonProps) => jsx.JSX.Element;
@@ -0,0 +1,7 @@
1
+ export declare const cancelButtonMessages: {
2
+ cancelButtonText: {
3
+ id: string;
4
+ description: string;
5
+ defaultMessage: string;
6
+ };
7
+ };
@@ -1,3 +1,5 @@
1
+ /// <reference types="react" />
1
2
  import { jsx } from '@emotion/react';
2
3
  import { ConfluenceSearchConfigModalProps } from '../types';
3
- export declare const ConfluenceSearchConfigModal: (props: ConfluenceSearchConfigModalProps) => jsx.JSX.Element;
4
+ export declare const PlainConfluenceSearchConfigModal: (props: ConfluenceSearchConfigModalProps) => jsx.JSX.Element;
5
+ export declare const ConfluenceSearchConfigModal: import("react").ForwardRefExoticComponent<ConfluenceSearchConfigModalProps & import("@atlaskit/analytics-next").WithContextProps & import("react").RefAttributes<any>>;
@@ -1,9 +1,4 @@
1
1
  export declare const modalMessages: {
2
- cancelButtonText: {
3
- id: string;
4
- description: string;
5
- defaultMessage: string;
6
- };
7
2
  insertIssuesButtonText: {
8
3
  id: string;
9
4
  description: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "1.25.0",
3
+ "version": "1.25.1",
4
4
  "description": "UI Components to support linking platform dataset feature",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -36,7 +36,7 @@
36
36
  "@atlaskit/avatar": "^21.5.0",
37
37
  "@atlaskit/avatar-group": "^9.5.0",
38
38
  "@atlaskit/badge": "^15.3.0",
39
- "@atlaskit/button": "^17.8.0",
39
+ "@atlaskit/button": "^17.9.0",
40
40
  "@atlaskit/dropdown-menu": "^12.8.0",
41
41
  "@atlaskit/editor-prosemirror": "3.0.0",
42
42
  "@atlaskit/empty-state": "^7.7.0",
@@ -58,8 +58,8 @@
58
58
  "@atlaskit/platform-feature-flags": "^0.2.4",
59
59
  "@atlaskit/pragmatic-drag-and-drop": "^1.1.0",
60
60
  "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.0",
61
- "@atlaskit/pragmatic-drag-and-drop-react-beautiful-dnd-autoscroll": "^1.0.0",
62
- "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^1.0.0",
61
+ "@atlaskit/pragmatic-drag-and-drop-react-beautiful-dnd-autoscroll": "^1.1.0",
62
+ "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^1.1.0",
63
63
  "@atlaskit/primitives": "^5.5.0",
64
64
  "@atlaskit/select": "^17.5.0",
65
65
  "@atlaskit/smart-card": "^26.52.0",