@atlaskit/link-datasource 1.26.1 → 1.26.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/ui/common/modal/basic-search-input/index.js +9 -18
  3. package/dist/cjs/ui/common/modal/popup-select/index.js +217 -0
  4. package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/errorMessage.js +3 -3
  5. package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/index.js +6 -5
  6. package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/messages.js +5 -0
  7. package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/noOptionsMessage.js +3 -3
  8. package/dist/cjs/ui/common/modal/popup-select/menu-list/showMoreButton.js +36 -0
  9. package/dist/cjs/ui/common/modal/popup-select/messages.js +19 -0
  10. package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/trigger.js +12 -13
  11. package/dist/cjs/ui/common/modal/popup-select/types.js +5 -0
  12. package/dist/cjs/ui/confluence-search-modal/basic-filters/index.js +22 -0
  13. package/dist/cjs/ui/confluence-search-modal/confluence-search-container/index.js +18 -3
  14. package/dist/cjs/ui/confluence-search-modal/modal/index.js +11 -2
  15. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +27 -163
  16. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +0 -15
  17. package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +2 -1
  18. package/dist/es2019/ui/common/modal/basic-search-input/index.js +2 -10
  19. package/dist/es2019/ui/common/modal/popup-select/index.js +170 -0
  20. package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/errorMessage.js +3 -3
  21. package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/index.js +6 -5
  22. package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/messages.js +5 -0
  23. package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/noOptionsMessage.js +3 -3
  24. package/dist/es2019/ui/common/modal/popup-select/menu-list/showMoreButton.js +29 -0
  25. package/dist/es2019/ui/common/modal/popup-select/messages.js +13 -0
  26. package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/trigger.js +10 -11
  27. package/dist/es2019/ui/common/modal/popup-select/types.js +1 -0
  28. package/dist/es2019/ui/confluence-search-modal/basic-filters/index.js +13 -0
  29. package/dist/es2019/ui/confluence-search-modal/confluence-search-container/index.js +19 -4
  30. package/dist/es2019/ui/confluence-search-modal/modal/index.js +12 -2
  31. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +25 -145
  32. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +0 -15
  33. package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +2 -1
  34. package/dist/esm/ui/common/modal/basic-search-input/index.js +2 -10
  35. package/dist/esm/ui/common/modal/popup-select/index.js +207 -0
  36. package/dist/esm/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/errorMessage.js +3 -3
  37. package/dist/esm/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/index.js +6 -5
  38. package/dist/esm/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/messages.js +5 -0
  39. package/dist/esm/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/noOptionsMessage.js +3 -3
  40. package/dist/esm/ui/common/modal/popup-select/menu-list/showMoreButton.js +26 -0
  41. package/dist/esm/ui/common/modal/popup-select/messages.js +13 -0
  42. package/dist/esm/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/trigger.js +12 -13
  43. package/dist/esm/ui/common/modal/popup-select/types.js +1 -0
  44. package/dist/esm/ui/confluence-search-modal/basic-filters/index.js +15 -0
  45. package/dist/esm/ui/confluence-search-modal/confluence-search-container/index.js +19 -4
  46. package/dist/esm/ui/confluence-search-modal/modal/index.js +12 -3
  47. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +27 -163
  48. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +0 -15
  49. package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +2 -1
  50. package/dist/types/analytics/generated/analytics.types.d.ts +6 -6
  51. package/dist/types/ui/common/modal/basic-search-input/index.d.ts +1 -0
  52. package/dist/types/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/control.d.ts +1 -1
  53. package/dist/{types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select → types/ui/common/modal/popup-select}/dropdownIndicator.d.ts +1 -1
  54. package/dist/types/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/formatOptionLabel.d.ts +1 -1
  55. package/dist/types/ui/common/modal/popup-select/index.d.ts +21 -0
  56. package/dist/types/ui/common/modal/popup-select/menu-list/errorMessage.d.ts +6 -0
  57. package/dist/types/ui/common/modal/popup-select/menu-list/index.d.ts +15 -0
  58. package/dist/{types-ts4.5/ui/jira-issues-modal/basic-filters/ui → types/ui/common/modal/popup-select}/menu-list/messages.d.ts +5 -0
  59. package/dist/types/ui/common/modal/popup-select/menu-list/noOptionsMessage.d.ts +5 -0
  60. package/dist/{types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select → types/ui/common/modal/popup-select/menu-list}/showMoreButton.d.ts +2 -1
  61. package/dist/types/ui/common/modal/popup-select/messages.d.ts +12 -0
  62. package/dist/types/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/trigger.d.ts +3 -2
  63. package/dist/types/ui/common/modal/popup-select/types.d.ts +22 -0
  64. package/dist/types/ui/confluence-search-modal/basic-filters/index.d.ts +5 -0
  65. package/dist/types/ui/jira-issues-modal/basic-filters/types.d.ts +0 -2
  66. package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.d.ts +0 -15
  67. package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +6 -6
  68. package/dist/types-ts4.5/ui/common/modal/basic-search-input/index.d.ts +1 -0
  69. package/dist/types-ts4.5/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/control.d.ts +1 -1
  70. package/dist/{types/ui/jira-issues-modal/basic-filters/ui/async-popup-select → types-ts4.5/ui/common/modal/popup-select}/dropdownIndicator.d.ts +1 -1
  71. package/dist/types-ts4.5/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/formatOptionLabel.d.ts +1 -1
  72. package/dist/types-ts4.5/ui/common/modal/popup-select/index.d.ts +21 -0
  73. package/dist/types-ts4.5/ui/common/modal/popup-select/menu-list/errorMessage.d.ts +6 -0
  74. package/dist/types-ts4.5/ui/common/modal/popup-select/menu-list/index.d.ts +15 -0
  75. package/dist/{types/ui/jira-issues-modal/basic-filters/ui → types-ts4.5/ui/common/modal/popup-select}/menu-list/messages.d.ts +5 -0
  76. package/dist/types-ts4.5/ui/common/modal/popup-select/menu-list/noOptionsMessage.d.ts +5 -0
  77. package/dist/{types/ui/jira-issues-modal/basic-filters/ui/async-popup-select → types-ts4.5/ui/common/modal/popup-select/menu-list}/showMoreButton.d.ts +2 -1
  78. package/dist/types-ts4.5/ui/common/modal/popup-select/messages.d.ts +12 -0
  79. package/dist/types-ts4.5/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/trigger.d.ts +3 -2
  80. package/dist/types-ts4.5/ui/common/modal/popup-select/types.d.ts +22 -0
  81. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/index.d.ts +5 -0
  82. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/types.d.ts +0 -2
  83. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.d.ts +0 -15
  84. package/package.json +6 -3
  85. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/showMoreButton.js +0 -22
  86. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/showMoreButton.js +0 -17
  87. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/showMoreButton.js +0 -15
  88. package/dist/types/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.d.ts +0 -8
  89. package/dist/types/ui/jira-issues-modal/basic-filters/ui/menu-list/index.d.ts +0 -5
  90. package/dist/types/ui/jira-issues-modal/basic-filters/ui/menu-list/noOptionsMessage.d.ts +0 -6
  91. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.d.ts +0 -8
  92. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/menu-list/index.d.ts +0 -5
  93. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/menu-list/noOptionsMessage.d.ts +0 -6
  94. /package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/control.js +0 -0
  95. /package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/dropdownIndicator.js +0 -0
  96. /package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/footer.js +0 -0
  97. /package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/formatOptionLabel.js +0 -0
  98. /package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/loadingMessage.js +0 -0
  99. /package/dist/cjs/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/selectMessage.js +0 -0
  100. /package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/control.js +0 -0
  101. /package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/dropdownIndicator.js +0 -0
  102. /package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/footer.js +0 -0
  103. /package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/formatOptionLabel.js +0 -0
  104. /package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/loadingMessage.js +0 -0
  105. /package/dist/es2019/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/selectMessage.js +0 -0
  106. /package/dist/esm/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/control.js +0 -0
  107. /package/dist/esm/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/dropdownIndicator.js +0 -0
  108. /package/dist/esm/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/footer.js +0 -0
  109. /package/dist/esm/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/formatOptionLabel.js +0 -0
  110. /package/dist/esm/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/loadingMessage.js +0 -0
  111. /package/dist/esm/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/selectMessage.js +0 -0
  112. /package/dist/types/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/footer.d.ts +0 -0
  113. /package/dist/types/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/loadingMessage.d.ts +0 -0
  114. /package/dist/types/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/selectMessage.d.ts +0 -0
  115. /package/dist/types-ts4.5/ui/{jira-issues-modal/basic-filters/ui/async-popup-select → common/modal/popup-select}/footer.d.ts +0 -0
  116. /package/dist/types-ts4.5/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/loadingMessage.d.ts +0 -0
  117. /package/dist/types-ts4.5/ui/{jira-issues-modal/basic-filters/ui → common/modal/popup-select}/menu-list/selectMessage.d.ts +0 -0
@@ -0,0 +1,207 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
5
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
6
+ var _excluded = ["isOpen"];
7
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
8
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
9
+ import isEqual from 'lodash/isEqual';
10
+ import { useIntl } from 'react-intl-next';
11
+ import { CheckboxOption, PopupSelect } from '@atlaskit/select';
12
+ import { useDatasourceAnalyticsEvents } from '../../../../analytics';
13
+ import CustomControl from './control';
14
+ import CustomDropdownIndicator from './dropdownIndicator';
15
+ import PopupFooter from './footer';
16
+ import formatOptionLabel from './formatOptionLabel';
17
+ import CustomMenuList from './menu-list';
18
+ import { asyncPopupSelectMessages } from './messages';
19
+ import PopupTrigger from './trigger';
20
+ // Needed to disable filtering from react-select
21
+ var noFilterOptions = function noFilterOptions() {
22
+ return true;
23
+ };
24
+ export var FilterPopupSelect = function FilterPopupSelect(_ref) {
25
+ var filterName = _ref.filterName,
26
+ totalCount = _ref.totalCount,
27
+ status = _ref.status,
28
+ buttonLabel = _ref.buttonLabel,
29
+ _ref$showLoading = _ref.showLoading,
30
+ showLoading = _ref$showLoading === void 0 ? false : _ref$showLoading,
31
+ _ref$isDisabled = _ref.isDisabled,
32
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
33
+ _ref$showHydrating = _ref.showHydrating,
34
+ showHydrating = _ref$showHydrating === void 0 ? false : _ref$showHydrating,
35
+ _ref$shouldShowFooter = _ref.shouldShowFooter,
36
+ shouldShowFooter = _ref$shouldShowFooter === void 0 ? true : _ref$shouldShowFooter,
37
+ menuListProps = _ref.menuListProps,
38
+ options = _ref.options,
39
+ selectedOptions = _ref.selectedOptions,
40
+ onSelectionChange = _ref.onSelectionChange,
41
+ onInputChange = _ref.onInputChange,
42
+ onMenuClose = _ref.onMenuClose,
43
+ onMenuOpen = _ref.onMenuOpen;
44
+ var _useIntl = useIntl(),
45
+ formatMessage = _useIntl.formatMessage;
46
+ var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
47
+ fireEvent = _useDatasourceAnalyti.fireEvent;
48
+ var _useState = useState(''),
49
+ _useState2 = _slicedToArray(_useState, 2),
50
+ searchTerm = _useState2[0],
51
+ setSearchTerm = _useState2[1];
52
+ var _useState3 = useState([]),
53
+ _useState4 = _slicedToArray(_useState3, 2),
54
+ sortedOptions = _useState4[0],
55
+ setSortedOptions = _useState4[1];
56
+ var sortPaginatedResults = useRef(false); // this is to track pagination for sorting purpose
57
+
58
+ var sortOptionsOnPopupOpen = useCallback(function () {
59
+ if (selectedOptions.length === 0) {
60
+ return setSortedOptions(options);
61
+ }
62
+ var nonSelectedOptions = options.filter(function (option) {
63
+ return !selectedOptions.find(function (selectedOption) {
64
+ return selectedOption.value === option.value;
65
+ });
66
+ });
67
+ var newOptions = [].concat(_toConsumableArray(selectedOptions), _toConsumableArray(nonSelectedOptions));
68
+ if (!isEqual(newOptions, sortedOptions)) {
69
+ setSortedOptions(newOptions);
70
+ }
71
+ }, [selectedOptions, options, sortedOptions]);
72
+ var sortOptionsOnResolve = useCallback(function () {
73
+ // when the user is searching, we want the search result to be displayed as it is, and the select component will take care of marking the selected items
74
+ if (searchTerm) {
75
+ sortPaginatedResults.current = false; // set to false to indicate pagination resolve action is completed from the sorting perspective
76
+ return setSortedOptions(options);
77
+ }
78
+
79
+ // sortedOptions is empty initially, this will take care of setting the initial value and bring the selected items to the top
80
+ if (sortedOptions.length === 0) {
81
+ return sortOptionsOnPopupOpen();
82
+ }
83
+
84
+ // this block handles the pagination, where on pagination, we will just append newOptions to the current list
85
+ if (sortPaginatedResults.current) {
86
+ var newOptions = options.filter(function (option) {
87
+ return !sortedOptions.find(function (sortedOption) {
88
+ return sortedOption.value === option.value;
89
+ });
90
+ });
91
+ if (newOptions.length > 0) {
92
+ setSortedOptions([].concat(_toConsumableArray(sortedOptions), _toConsumableArray(newOptions)));
93
+ }
94
+ sortPaginatedResults.current = false; // set to false to indicate pagination resolve action is completed from the sorting perspective
95
+ return;
96
+ }
97
+ sortPaginatedResults.current = false; // set to false to indicate pagination resolve action is completed from the sorting perspective
98
+ sortOptionsOnPopupOpen();
99
+ }, [options, searchTerm, sortOptionsOnPopupOpen, sortedOptions]);
100
+ var handleMenuOpen = useCallback(function () {
101
+ if (status === 'resolved') {
102
+ sortOptionsOnPopupOpen();
103
+ }
104
+ fireEvent('ui.dropdown.opened.basicSearchDropdown', {
105
+ filterName: filterName,
106
+ selectionCount: selectedOptions.length
107
+ });
108
+ onMenuOpen === null || onMenuOpen === void 0 || onMenuOpen();
109
+ }, [filterName, fireEvent, onMenuOpen, selectedOptions.length, sortOptionsOnPopupOpen, status]);
110
+ var handleMenuClose = useCallback(function () {
111
+ /**
112
+ * Clearing the search is to ensure that the sortOptionsOnPopupOpen logic does not mess up.
113
+ * Without this, when the user opens, sortOptionsOnPopupOpen will inject the selected options to the list and the list count and values will be off
114
+ */
115
+ if (searchTerm) {
116
+ setSearchTerm('');
117
+ }
118
+ onMenuClose === null || onMenuClose === void 0 || onMenuClose();
119
+ fireEvent('ui.dropdown.closed.basicSearchDropdown', {
120
+ filterName: filterName,
121
+ selectionCount: selectedOptions.length
122
+ });
123
+ }, [filterName, fireEvent, onMenuClose, searchTerm, selectedOptions.length]);
124
+ var handleInputChange = useCallback( /*#__PURE__*/function () {
125
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(newSearchTerm, actionMeta) {
126
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
127
+ while (1) switch (_context.prev = _context.next) {
128
+ case 0:
129
+ if (actionMeta.action === 'input-change' && newSearchTerm !== searchTerm) {
130
+ setSearchTerm(newSearchTerm);
131
+ onInputChange(newSearchTerm, actionMeta);
132
+ }
133
+ case 1:
134
+ case "end":
135
+ return _context.stop();
136
+ }
137
+ }, _callee);
138
+ }));
139
+ return function (_x, _x2) {
140
+ return _ref2.apply(this, arguments);
141
+ };
142
+ }(), [onInputChange, searchTerm]);
143
+ useEffect(function () {
144
+ if (status === 'resolved') {
145
+ sortOptionsOnResolve();
146
+ }
147
+ // eslint-disable-next-line react-hooks/exhaustive-deps
148
+ }, [status]); // we only want the sortOptionsOnResolve to run when there is a status change
149
+
150
+ useEffect(function () {
151
+ if (status === 'loadingMore') {
152
+ sortPaginatedResults.current = true;
153
+ }
154
+ }, [status]);
155
+ return /*#__PURE__*/React.createElement(PopupSelect, {
156
+ isMulti: true,
157
+ maxMenuWidth: 300,
158
+ minMenuWidth: 300,
159
+ testId: "".concat(filterName, "-popup-select"),
160
+ inputId: "".concat(filterName, "-popup-select--input")
161
+ /*
162
+ this threshold controls the display of the search control (input field for search)
163
+ if this threshold is less than 0, when typing a search string that returns no results it will not remove the search control
164
+ if this threshold is 0 or higher, it will remove the search control when there are no results, the user will be unable to clear the search to see more results
165
+ */,
166
+ searchThreshold: -1,
167
+ inputValue: searchTerm,
168
+ closeMenuOnSelect: false,
169
+ hideSelectedOptions: false,
170
+ isLoading: showLoading,
171
+ placeholder: formatMessage(asyncPopupSelectMessages.selectPlaceholder),
172
+ menuListProps: menuListProps,
173
+ components: {
174
+ Option: CheckboxOption,
175
+ Control: CustomControl,
176
+ MenuList: CustomMenuList,
177
+ DropdownIndicator: CustomDropdownIndicator,
178
+ LoadingIndicator: undefined,
179
+ // disables the three ... indicator in the searchbox when picker is loading
180
+ IndicatorSeparator: undefined // disables the | separator between search input and icon
181
+ },
182
+ options: sortedOptions,
183
+ value: selectedOptions,
184
+ filterOption: noFilterOptions,
185
+ formatOptionLabel: formatOptionLabel,
186
+ onChange: onSelectionChange,
187
+ onInputChange: handleInputChange,
188
+ onOpen: handleMenuOpen,
189
+ onClose: handleMenuClose,
190
+ target: function target(_ref3) {
191
+ var isOpen = _ref3.isOpen,
192
+ triggerProps = _objectWithoutProperties(_ref3, _excluded);
193
+ return /*#__PURE__*/React.createElement(PopupTrigger, _extends({}, triggerProps, {
194
+ label: buttonLabel,
195
+ selectedOptions: selectedOptions,
196
+ isSelected: isOpen,
197
+ isDisabled: isDisabled,
198
+ isLoading: showHydrating,
199
+ testId: filterName
200
+ }));
201
+ },
202
+ footer: shouldShowFooter && /*#__PURE__*/React.createElement(PopupFooter, {
203
+ currentDisplayCount: options.length,
204
+ totalCount: totalCount
205
+ })
206
+ });
207
+ };
@@ -4,7 +4,7 @@ import { useDebouncedCallback } from 'use-debounce';
4
4
  import ErrorIcon from '@atlaskit/icon/glyph/error';
5
5
  import { N500 } from '@atlaskit/theme/colors';
6
6
  import { useDatasourceAnalyticsEvents } from '../../../../../analytics';
7
- import { SEARCH_DEBOUNCE_MS } from '../async-popup-select';
7
+ import { SEARCH_DEBOUNCE_MS } from '../../../../jira-issues-modal/basic-filters/ui/async-popup-select';
8
8
  import { asyncPopupSelectMessages } from './messages';
9
9
  import CustomSelectMessage from './selectMessage';
10
10
  var getErrorReasonType = function getErrorReasonType(errors) {
@@ -20,7 +20,7 @@ var getErrorReasonType = function getErrorReasonType(errors) {
20
20
  return 'unknown';
21
21
  };
22
22
  var CustomErrorMessage = function CustomErrorMessage(_ref3) {
23
- var filterType = _ref3.filterType,
23
+ var filterName = _ref3.filterName,
24
24
  errors = _ref3.errors;
25
25
  var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
26
26
  fireEvent = _useDatasourceAnalyti.fireEvent;
@@ -31,7 +31,7 @@ var CustomErrorMessage = function CustomErrorMessage(_ref3) {
31
31
  */
32
32
  var _useDebouncedCallback = useDebouncedCallback(function () {
33
33
  fireEvent('ui.error.shown.basicSearchDropdown', {
34
- filterType: filterType,
34
+ filterName: filterName,
35
35
  reason: getErrorReasonType(errors)
36
36
  });
37
37
  }, SEARCH_DEBOUNCE_MS),
@@ -4,10 +4,10 @@ import React from 'react';
4
4
  import { Box, Flex, xcss } from '@atlaskit/primitives';
5
5
  import { components } from '@atlaskit/select';
6
6
  import Spinner from '@atlaskit/spinner';
7
- import ShowMoreButton from '../async-popup-select/showMoreButton';
8
7
  import CustomErrorMessage from './errorMessage';
9
8
  import CustomDropdownLoadingMessage from './loadingMessage';
10
9
  import CustomNoOptionsMessage from './noOptionsMessage';
10
+ import ShowMoreButton from './showMoreButton';
11
11
  var inlineSpinnerStyles = xcss({
12
12
  paddingTop: 'space.075'
13
13
  });
@@ -19,7 +19,7 @@ var CustomMenuList = function CustomMenuList(_ref) {
19
19
  var children = _ref.children,
20
20
  props = _objectWithoutProperties(_ref, _excluded);
21
21
  var _props$selectProps$me = props.selectProps.menuListProps,
22
- filterType = _props$selectProps$me.filterType,
22
+ filterName = _props$selectProps$me.filterName,
23
23
  isLoading = _props$selectProps$me.isLoading,
24
24
  isLoadingMore = _props$selectProps$me.isLoadingMore,
25
25
  isError = _props$selectProps$me.isError,
@@ -43,19 +43,20 @@ var CustomMenuList = function CustomMenuList(_ref) {
43
43
  }
44
44
  if (isError) {
45
45
  return /*#__PURE__*/React.createElement(CustomErrorMessage, {
46
- filterType: filterType,
46
+ filterName: filterName,
47
47
  errors: errors
48
48
  });
49
49
  }
50
50
  if (isEmpty) {
51
51
  return /*#__PURE__*/React.createElement(CustomNoOptionsMessage, {
52
- filterType: filterType
52
+ filterName: filterName
53
53
  });
54
54
  }
55
55
  return /*#__PURE__*/React.createElement(React.Fragment, null, children, shouldDisplayShowMore && /*#__PURE__*/React.createElement(Box, {
56
56
  xcss: showMoreButtonBoxStyles
57
57
  }, /*#__PURE__*/React.createElement(ShowMoreButton, {
58
- onShowMore: handleShowMore
58
+ onShowMore: handleShowMore,
59
+ filterName: filterName
59
60
  })), isLoadingMoreData && /*#__PURE__*/React.createElement(InlineSpinner, null));
60
61
  };
61
62
  return /*#__PURE__*/React.createElement(components.MenuList, props, renderChildren());
@@ -14,5 +14,10 @@ export var asyncPopupSelectMessages = defineMessages({
14
14
  id: 'linkDataSource.basic-filter.error-message',
15
15
  defaultMessage: 'Something went wrong',
16
16
  description: 'The text for when an error occurs when loading options'
17
+ },
18
+ showMoreMessage: {
19
+ id: 'linkDataSource.basic-filter.showMoreButton',
20
+ defaultMessage: 'Show more',
21
+ description: 'The text to show more options in dropdown'
17
22
  }
18
23
  });
@@ -4,11 +4,11 @@ import { useDebouncedCallback } from 'use-debounce';
4
4
  import QuestionCircleIcon from '@atlaskit/icon/glyph/question-circle';
5
5
  import { N500 } from '@atlaskit/theme/colors';
6
6
  import { useDatasourceAnalyticsEvents } from '../../../../../analytics';
7
- import { SEARCH_DEBOUNCE_MS } from '../async-popup-select';
7
+ import { SEARCH_DEBOUNCE_MS } from '../../../../jira-issues-modal/basic-filters/ui/async-popup-select';
8
8
  import { asyncPopupSelectMessages } from './messages';
9
9
  import CustomSelectMessage from './selectMessage';
10
10
  var CustomNoOptionsMessage = function CustomNoOptionsMessage(_ref) {
11
- var filterType = _ref.filterType;
11
+ var filterName = _ref.filterName;
12
12
  var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
13
13
  fireEvent = _useDatasourceAnalyti.fireEvent;
14
14
 
@@ -20,7 +20,7 @@ var CustomNoOptionsMessage = function CustomNoOptionsMessage(_ref) {
20
20
  */
21
21
  var _useDebouncedCallback = useDebouncedCallback(function () {
22
22
  fireEvent('ui.emptyResult.shown.basicSearchDropdown', {
23
- filterType: filterType
23
+ filterName: filterName
24
24
  });
25
25
  }, SEARCH_DEBOUNCE_MS),
26
26
  _useDebouncedCallback2 = _slicedToArray(_useDebouncedCallback, 1),
@@ -0,0 +1,26 @@
1
+ import React, { useCallback } from 'react';
2
+ import { useIntl } from 'react-intl-next';
3
+ import Button from '@atlaskit/button';
4
+ import { useDatasourceAnalyticsEvents } from '../../../../../analytics';
5
+ import { asyncPopupSelectMessages } from './messages';
6
+ var ShowMoreButton = function ShowMoreButton(_ref) {
7
+ var onShowMore = _ref.onShowMore,
8
+ filterName = _ref.filterName;
9
+ var _useIntl = useIntl(),
10
+ formatMessage = _useIntl.formatMessage;
11
+ var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
12
+ fireEvent = _useDatasourceAnalyti.fireEvent;
13
+ var handleShowMore = useCallback(function () {
14
+ fireEvent('ui.button.clicked.basicSearchDropdown', {
15
+ filterName: filterName,
16
+ type: 'showMore'
17
+ });
18
+ onShowMore();
19
+ }, [filterName, fireEvent, onShowMore]);
20
+ return /*#__PURE__*/React.createElement(Button, {
21
+ onClick: handleShowMore,
22
+ appearance: "link",
23
+ testId: "jlol-basic-filter-popup-select--show-more-button"
24
+ }, formatMessage(asyncPopupSelectMessages.showMoreMessage));
25
+ };
26
+ export default ShowMoreButton;
@@ -0,0 +1,13 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export var asyncPopupSelectMessages = defineMessages({
3
+ selectPlaceholder: {
4
+ id: 'linkDataSource.basic-filter.dropdown.select.placeholder',
5
+ description: 'Placeholder text to be displayed for the search input box.',
6
+ defaultMessage: 'Search'
7
+ },
8
+ paginationDetails: {
9
+ id: 'linkDataSource.basic-filter.footer.pagination-details',
10
+ description: 'Text to indicate page count and total count information.',
11
+ defaultMessage: '{currentDisplayCount} of {totalCount}'
12
+ }
13
+ });
@@ -1,13 +1,11 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import React, { forwardRef, useCallback } from 'react';
3
3
  import styled from '@emotion/styled';
4
- import { FormattedMessage } from 'react-intl-next';
5
4
  import Badge from '@atlaskit/badge';
6
5
  import Button from '@atlaskit/button/standard-button';
7
6
  import ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';
8
7
  import { Box, Flex, xcss } from '@atlaskit/primitives';
9
8
  import Spinner from '@atlaskit/spinner';
10
- import { asyncPopupSelectMessages } from './messages';
11
9
  var triggerButtonLabelStyles = xcss({
12
10
  textOverflow: 'ellipsis',
13
11
  overflow: 'hidden',
@@ -32,25 +30,26 @@ export var LoadingStateAnimationWrapper = styled.div({
32
30
  }
33
31
  });
34
32
  var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
35
- var filterType = _ref.filterType,
36
- isSelected = _ref.isSelected,
33
+ var isSelected = _ref.isSelected,
37
34
  isDisabled = _ref.isDisabled,
38
35
  isLoading = _ref.isLoading,
39
- selectedOptions = _ref.selectedOptions;
36
+ selectedOptions = _ref.selectedOptions,
37
+ testId = _ref.testId,
38
+ label = _ref.label;
40
39
  var _ref2 = selectedOptions || [],
41
40
  _ref3 = _slicedToArray(_ref2, 1),
42
41
  firstOption = _ref3[0];
43
42
  var hasOptions = selectedOptions && selectedOptions.length > 0;
44
43
  var showButtonLoading = !isDisabled && isLoading;
45
- var testId = "jlol-basic-filter-".concat(filterType, "-trigger");
44
+ var tiggerButtonTestId = "".concat(testId, "-trigger");
46
45
  var LoadingButton = useCallback(function () {
47
46
  return /*#__PURE__*/React.createElement(LoadingStateAnimationWrapper, null, /*#__PURE__*/React.createElement(Button, {
48
47
  iconAfter: /*#__PURE__*/React.createElement(Spinner, {
49
48
  size: 'xsmall'
50
49
  }),
51
- testId: "".concat(testId, "--loading-button")
52
- }, /*#__PURE__*/React.createElement(FormattedMessage, asyncPopupSelectMessages["".concat(filterType, "Label")])));
53
- }, [filterType, testId]);
50
+ testId: "".concat(tiggerButtonTestId, "--loading-button")
51
+ }, label));
52
+ }, [label, tiggerButtonTestId]);
54
53
  var DefaultButton = useCallback(function () {
55
54
  return /*#__PURE__*/React.createElement(Button, {
56
55
  appearance: "default",
@@ -59,16 +58,16 @@ var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
59
58
  iconAfter: /*#__PURE__*/React.createElement(ChevronDownIcon, {
60
59
  label: ""
61
60
  }),
62
- testId: "".concat(testId, "--button")
61
+ testId: "".concat(tiggerButtonTestId, "--button")
63
62
  }, /*#__PURE__*/React.createElement(Flex, null, /*#__PURE__*/React.createElement(Box, {
64
63
  xcss: triggerButtonLabelStyles
65
- }, /*#__PURE__*/React.createElement(FormattedMessage, asyncPopupSelectMessages["".concat(filterType, "Label")]), firstOption && /*#__PURE__*/React.createElement(React.Fragment, null, ": ", firstOption.label)), selectedOptions && selectedOptions.length > 1 && /*#__PURE__*/React.createElement(Flex, {
64
+ }, label, firstOption && /*#__PURE__*/React.createElement(React.Fragment, null, ": ", firstOption.label)), selectedOptions && selectedOptions.length > 1 && /*#__PURE__*/React.createElement(Flex, {
66
65
  xcss: badgeStyles,
67
66
  alignItems: "center"
68
67
  }, /*#__PURE__*/React.createElement(Badge, {
69
68
  appearance: "primary"
70
69
  }, "+", selectedOptions.length - 1))));
71
- }, [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions, testId]);
70
+ }, [firstOption, hasOptions, isDisabled, isSelected, label, selectedOptions, tiggerButtonTestId]);
72
71
 
73
72
  /**
74
73
  * We had an issue with the popup component referencing a stale DOM ref for the trigger button.
@@ -76,7 +75,7 @@ var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
76
75
  */
77
76
  return /*#__PURE__*/React.createElement(Box, {
78
77
  ref: ref,
79
- testId: testId
78
+ testId: tiggerButtonTestId
80
79
  }, showButtonLoading ? /*#__PURE__*/React.createElement(LoadingButton, null) : /*#__PURE__*/React.createElement(DefaultButton, null));
81
80
  });
82
81
  export default PopupTrigger;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import _objectDestructuringEmpty from "@babel/runtime/helpers/objectDestructuringEmpty";
2
+ import React from 'react';
3
+ import { Flex, xcss } from '@atlaskit/primitives';
4
+ var basicFilterContainerStyles = xcss({
5
+ paddingLeft: 'space.100'
6
+ });
7
+ var BasicFilterContainer = function BasicFilterContainer(_ref) {
8
+ _objectDestructuringEmpty(_ref);
9
+ return /*#__PURE__*/React.createElement(Flex, {
10
+ xcss: basicFilterContainerStyles,
11
+ gap: "space.100",
12
+ testId: "clol-basic-filter-container"
13
+ }, /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement(React.Fragment, null));
14
+ };
15
+ export default BasicFilterContainer;
@@ -1,7 +1,13 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- import React, { useCallback, useEffect, useRef, useState } from 'react';
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
4
+ import { Flex, xcss } from '@atlaskit/primitives';
3
5
  import { BasicSearchInput } from '../../common/modal/basic-search-input';
6
+ import BasicFilters from '../basic-filters';
4
7
  import { searchMessages } from './messages';
8
+ var basicSearchInputContainerStyles = xcss({
9
+ flexGrow: 1
10
+ });
5
11
  var ConfluenceSearchContainer = function ConfluenceSearchContainer(_ref) {
6
12
  var cloudId = _ref.cloudId,
7
13
  initialSearchValue = _ref.initialSearchValue,
@@ -25,14 +31,23 @@ var ConfluenceSearchContainer = function ConfluenceSearchContainer(_ref) {
25
31
  currentCloudId.current = cloudId;
26
32
  }
27
33
  }, [cloudId]);
28
- return /*#__PURE__*/React.createElement(BasicSearchInput, {
34
+ var showBasicFilters = useMemo(function () {
35
+ if (getBooleanFF('platform.linking-platform.datasource.show-clol-basic-filters')) {
36
+ return true;
37
+ }
38
+ return false;
39
+ }, []);
40
+ return /*#__PURE__*/React.createElement(Flex, {
41
+ alignItems: "center",
42
+ xcss: basicSearchInputContainerStyles
43
+ }, /*#__PURE__*/React.createElement(BasicSearchInput, {
29
44
  testId: "confluence-search-datasource-modal",
30
45
  isSearching: isSearching,
31
46
  onChange: handleSearchChange,
32
47
  onSearch: onSearch,
33
48
  searchTerm: searchBarSearchString,
34
49
  placeholder: searchMessages.searchLabel,
35
- fullWidth: true
36
- });
50
+ fullWidth: !showBasicFilters
51
+ }), showBasicFilters && /*#__PURE__*/React.createElement(BasicFilters, null));
37
52
  };
38
53
  export default ConfluenceSearchContainer;
@@ -19,7 +19,7 @@ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
19
19
  import { Box, xcss } from '@atlaskit/primitives';
20
20
  import LinkUrl from '@atlaskit/smart-card/link-url';
21
21
  import { N800 } from '@atlaskit/theme/colors';
22
- import { EVENT_CHANNEL } from '../../../analytics';
22
+ import { EVENT_CHANNEL, useDatasourceAnalyticsEvents } from '../../../analytics';
23
23
  import { componentMetadata } from '../../../analytics/constants';
24
24
  import { DatasourceAction, DatasourceDisplay, DatasourceSearchMethod } from '../../../analytics/types';
25
25
  import { buildDatasourceAdf } from '../../../common/utils/adf';
@@ -124,6 +124,8 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
124
124
  _useDatasourceTableSt2 = _useDatasourceTableSt.extensionKey,
125
125
  extensionKey = _useDatasourceTableSt2 === void 0 ? null : _useDatasourceTableSt2,
126
126
  destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes;
127
+ var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
128
+ fireEvent = _useDatasourceAnalyti.fireEvent;
127
129
  var hasNoConfluenceSites = availableSites && availableSites.length === 0;
128
130
  var selectedConfluenceSite = useMemo(function () {
129
131
  if (cloudId) {
@@ -140,6 +142,9 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
140
142
  })) || (availableSites === null || availableSites === void 0 ? void 0 : availableSites[0]);
141
143
  }
142
144
  }, [availableSites, cloudId]);
145
+ useEffect(function () {
146
+ fireEvent('screen.datasourceModalDialog.viewed', {});
147
+ }, [fireEvent]);
143
148
 
144
149
  // TODO: further refactoring in EDM-9573
145
150
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6828283
@@ -173,7 +178,11 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
173
178
  return a.displayName.localeCompare(b.displayName);
174
179
  });
175
180
  setAvailableSites(sortedAvailableSites);
176
- case 5:
181
+ fireEvent('ui.modal.ready.datasource', {
182
+ instancesCount: sortedAvailableSites.length,
183
+ schemasCount: null
184
+ });
185
+ case 6:
177
186
  case "end":
178
187
  return _context.stop();
179
188
  }
@@ -184,7 +193,7 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
184
193
  };
185
194
  }();
186
195
  void fetchSiteDisplayNames();
187
- }, []);
196
+ }, [fireEvent]);
188
197
  useEffect(function () {
189
198
  var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
190
199
  visibleColumnCount.current = newVisibleColumnKeys.length;