@atlaskit/link-datasource 1.19.8 → 1.19.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/messages.js +14 -0
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +34 -10
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +24 -9
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +1 -4
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +3 -2
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/index.js +1 -3
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/menu-list/messages.js +3 -2
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +11 -3
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +27 -18
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +4 -1
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/messages.js +8 -0
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +25 -4
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +21 -3
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +1 -3
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +3 -2
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/index.js +1 -3
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/menu-list/messages.js +3 -2
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +11 -1
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +12 -6
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +4 -1
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/messages.js +8 -0
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +33 -9
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +24 -9
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +1 -4
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +3 -2
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/index.js +1 -3
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/menu-list/messages.js +3 -2
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +11 -3
- package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +26 -17
- package/dist/esm/ui/jira-issues-modal/modal/index.js +4 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/messages.d.ts +7 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +3 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +1 -2
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/index.d.ts +1 -2
- package/dist/types/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +3 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +1 -2
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/index.d.ts +1 -2
- package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.19.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#56769](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/56769) [`dccc142da2de`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/dccc142da2de) - Changing cloud ids with site selector resets previous JiraIssuesModal table results, basic search filters, and jql to default.
|
|
8
|
+
- [#57035](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57035) [`63ab16a4d4a7`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/63ab16a4d4a7) - Update config modal logic to open in basic mode if the query is not complex.
|
|
9
|
+
|
|
10
|
+
## 1.19.9
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- [#56564](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/56564) [`b26cc1ff959d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b26cc1ff959d) - Add `Unassigned` option for Assignee filter dropdown.
|
|
15
|
+
|
|
3
16
|
## 1.19.8
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -7,5 +7,5 @@ exports.packageMetaData = exports.EVENT_CHANNEL = void 0;
|
|
|
7
7
|
var EVENT_CHANNEL = exports.EVENT_CHANNEL = 'media';
|
|
8
8
|
var packageMetaData = exports.packageMetaData = {
|
|
9
9
|
packageName: "@atlaskit/link-datasource",
|
|
10
|
-
packageVersion: "1.19.
|
|
10
|
+
packageVersion: "1.19.10"
|
|
11
11
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.filterOptionMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var filterOptionMessages = exports.filterOptionMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
assigneeUnassignedFilterOption: {
|
|
10
|
+
id: 'linkDataSource.basic-filter.dropdown.select.assignee.unassigned',
|
|
11
|
+
description: 'Text to display for Unassigned assignee filter option.',
|
|
12
|
+
defaultMessage: 'Unassigned'
|
|
13
|
+
}
|
|
14
|
+
});
|
|
@@ -4,17 +4,28 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.useFilterOptions = void 0;
|
|
7
|
+
exports.useFilterOptions = exports.getAssigneeUnassignedFilterOption = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
12
|
var _react = require("react");
|
|
13
|
+
var _reactIntlNext = require("react-intl-next");
|
|
13
14
|
var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
|
|
14
15
|
var _transformers = require("../utils/transformers");
|
|
16
|
+
var _messages = require("./messages");
|
|
17
|
+
var getAssigneeUnassignedFilterOption = exports.getAssigneeUnassignedFilterOption = function getAssigneeUnassignedFilterOption(formatMessage) {
|
|
18
|
+
return {
|
|
19
|
+
label: formatMessage(_messages.filterOptionMessages.assigneeUnassignedFilterOption),
|
|
20
|
+
optionType: 'avatarLabel',
|
|
21
|
+
value: 'empty'
|
|
22
|
+
};
|
|
23
|
+
};
|
|
15
24
|
var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref) {
|
|
16
25
|
var filterType = _ref.filterType,
|
|
17
26
|
cloudId = _ref.cloudId;
|
|
27
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
28
|
+
formatMessage = _useIntl.formatMessage;
|
|
18
29
|
var _useState = (0, _react.useState)([]),
|
|
19
30
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
20
31
|
filterOptions = _useState2[0],
|
|
@@ -46,6 +57,8 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
|
|
|
46
57
|
isRequestLikeInitialSearch,
|
|
47
58
|
initialResponseData,
|
|
48
59
|
response,
|
|
60
|
+
mappedResponse,
|
|
61
|
+
mappedTotalCount,
|
|
49
62
|
_args = arguments;
|
|
50
63
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
51
64
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -84,34 +97,45 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
|
|
|
84
97
|
setErrors(response.errors);
|
|
85
98
|
return _context.abrupt("return");
|
|
86
99
|
case 18:
|
|
100
|
+
mappedResponse = (0, _transformers.mapFieldValuesToFilterOptions)(response);
|
|
101
|
+
mappedTotalCount = (0, _transformers.mapFieldValuesToTotalCount)(response);
|
|
87
102
|
if (isNewSearch) {
|
|
88
|
-
setFilterOptions((0, _transformers.mapFieldValuesToFilterOptions)(response));
|
|
89
103
|
if (isRequestLikeInitialSearch) {
|
|
90
104
|
/**
|
|
91
105
|
* The initial dataset is used in couple of paths, eg: when a user searches and clears the search text.
|
|
92
106
|
* During these times, we dont want to fetch data again and again, hence a mini cache setup to store and provide the initial dataset
|
|
93
107
|
*/
|
|
94
108
|
initialData.current = response;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* For assignee filter option, we want `Unassigned` as an option.
|
|
112
|
+
* Since `Unassigned/EMPTY` is not returned by the API, we add it manually, but only for the initial list
|
|
113
|
+
*/
|
|
114
|
+
if (filterType === 'assignee') {
|
|
115
|
+
mappedResponse.unshift(getAssigneeUnassignedFilterOption(formatMessage));
|
|
116
|
+
mappedTotalCount += 1;
|
|
117
|
+
}
|
|
95
118
|
}
|
|
119
|
+
setFilterOptions(mappedResponse);
|
|
96
120
|
} else {
|
|
97
|
-
setFilterOptions([].concat((0, _toConsumableArray2.default)(filterOptions), (0, _toConsumableArray2.default)(
|
|
121
|
+
setFilterOptions([].concat((0, _toConsumableArray2.default)(filterOptions), (0, _toConsumableArray2.default)(mappedResponse)));
|
|
98
122
|
}
|
|
99
|
-
setTotalCount(
|
|
123
|
+
setTotalCount(mappedTotalCount);
|
|
100
124
|
setNextPageCursor((0, _transformers.mapFieldValuesToPageCursor)(response));
|
|
101
125
|
setStatus('resolved');
|
|
102
|
-
_context.next =
|
|
126
|
+
_context.next = 30;
|
|
103
127
|
break;
|
|
104
|
-
case
|
|
105
|
-
_context.prev =
|
|
128
|
+
case 26:
|
|
129
|
+
_context.prev = 26;
|
|
106
130
|
_context.t1 = _context["catch"](5);
|
|
107
131
|
setStatus('rejected');
|
|
108
132
|
setErrors([_context.t1]);
|
|
109
|
-
case
|
|
133
|
+
case 30:
|
|
110
134
|
case "end":
|
|
111
135
|
return _context.stop();
|
|
112
136
|
}
|
|
113
|
-
}, _callee, null, [[5,
|
|
114
|
-
})), [cloudId, filterOptions, filterType, getFieldValues]);
|
|
137
|
+
}, _callee, null, [[5, 26]]);
|
|
138
|
+
})), [cloudId, filterOptions, filterType, formatMessage, getFieldValues]);
|
|
115
139
|
(0, _react.useEffect)(function () {
|
|
116
140
|
if (status !== 'rejected' && errors.length !== 0) {
|
|
117
141
|
setErrors([]);
|
|
@@ -6,14 +6,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.useHydrateJqlQuery = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
13
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
14
|
var _react = require("react");
|
|
15
|
+
var _reactIntlNext = require("react-intl-next");
|
|
16
|
+
var _jqlAst = require("@atlaskit/jql-ast");
|
|
13
17
|
var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
|
|
14
18
|
var _extractValuesFromNonComplexJQL = require("../utils/extractValuesFromNonComplexJQL");
|
|
15
19
|
var _isClauseTooComplex = require("../utils/isClauseTooComplex");
|
|
16
20
|
var _transformers = require("../utils/transformers");
|
|
21
|
+
var _useFilterOptions = require("./useFilterOptions");
|
|
22
|
+
var _excluded = ["assignee"];
|
|
17
23
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
24
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
25
|
var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
|
|
@@ -21,6 +27,8 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
|
|
|
21
27
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
22
28
|
hydratedOptions = _useState2[0],
|
|
23
29
|
setHydratedOptions = _useState2[1];
|
|
30
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
31
|
+
formatMessage = _useIntl.formatMessage;
|
|
24
32
|
var _useState3 = (0, _react.useState)('empty'),
|
|
25
33
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
26
34
|
status = _useState4[0],
|
|
@@ -32,7 +40,7 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
|
|
|
32
40
|
var _useBasicFilterAGG = (0, _useBasicFilterAGG2.useBasicFilterAGG)(),
|
|
33
41
|
getHydratedJQL = _useBasicFilterAGG.getHydratedJQL;
|
|
34
42
|
var fetchHydratedJqlOptions = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
35
|
-
var response, _extractValuesFromNon, text, summary, key, _ref2, _ref3, textFieldValue, mappedValues;
|
|
43
|
+
var response, _mapHydrateResponseDa, mappedHydratedAssigneeValue, restOfMappedHydratedResponse, _extractValuesFromNon, text, summary, key, extractedAssigneeValue, _ref2, _ref3, textFieldValue, mappedValues;
|
|
36
44
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
37
45
|
while (1) switch (_context.prev = _context.next) {
|
|
38
46
|
case 0:
|
|
@@ -50,29 +58,36 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
|
|
|
50
58
|
setErrors(response.errors);
|
|
51
59
|
return _context.abrupt("return");
|
|
52
60
|
case 9:
|
|
61
|
+
_mapHydrateResponseDa = (0, _transformers.mapHydrateResponseData)(response), mappedHydratedAssigneeValue = _mapHydrateResponseDa.assignee, restOfMappedHydratedResponse = (0, _objectWithoutProperties2.default)(_mapHydrateResponseDa, _excluded);
|
|
53
62
|
/**
|
|
54
63
|
* Hydrate logic does not return text field, hence we parse and extract value from jql
|
|
55
64
|
*/
|
|
56
|
-
_extractValuesFromNon = (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key;
|
|
65
|
+
_extractValuesFromNon = (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key, extractedAssigneeValue = _extractValuesFromNon.assignee;
|
|
57
66
|
_ref2 = text || summary || key || [], _ref3 = (0, _slicedToArray2.default)(_ref2, 1), textFieldValue = _ref3[0];
|
|
58
|
-
mappedValues = _objectSpread(_objectSpread({},
|
|
67
|
+
mappedValues = _objectSpread(_objectSpread({}, restOfMappedHydratedResponse), {}, {
|
|
68
|
+
/**
|
|
69
|
+
* Special handling for assignee as we need to inject Unassigned value if JQL contains EMPTY keyword for assignee
|
|
70
|
+
*/
|
|
71
|
+
assignee: [].concat((0, _toConsumableArray2.default)(mappedHydratedAssigneeValue || []), (0, _toConsumableArray2.default)(extractedAssigneeValue !== null && extractedAssigneeValue !== void 0 && extractedAssigneeValue.includes(_jqlAst.OPERAND_EMPTY) // checks and adds EMPTY filter option if extracted assignee values from jql contains EMPTY
|
|
72
|
+
? [(0, _useFilterOptions.getAssigneeUnassignedFilterOption)(formatMessage)] : []))
|
|
73
|
+
}, textFieldValue ? {
|
|
59
74
|
basicInputTextValue: (0, _isClauseTooComplex.removeFuzzyCharacter)(textFieldValue)
|
|
60
75
|
} : {});
|
|
61
76
|
setHydratedOptions(mappedValues);
|
|
62
77
|
setStatus('resolved');
|
|
63
|
-
_context.next =
|
|
78
|
+
_context.next = 21;
|
|
64
79
|
break;
|
|
65
|
-
case
|
|
66
|
-
_context.prev =
|
|
80
|
+
case 17:
|
|
81
|
+
_context.prev = 17;
|
|
67
82
|
_context.t0 = _context["catch"](0);
|
|
68
83
|
setErrors([_context.t0]);
|
|
69
84
|
setStatus('rejected');
|
|
70
|
-
case
|
|
85
|
+
case 21:
|
|
71
86
|
case "end":
|
|
72
87
|
return _context.stop();
|
|
73
88
|
}
|
|
74
|
-
}, _callee, null, [[0,
|
|
75
|
-
})), [cloudId, getHydratedJQL, jql]);
|
|
89
|
+
}, _callee, null, [[0, 17]]);
|
|
90
|
+
})), [cloudId, formatMessage, getHydratedJQL, jql]);
|
|
76
91
|
(0, _react.useEffect)(function () {
|
|
77
92
|
if (status !== 'rejected' && errors.length !== 0) {
|
|
78
93
|
setErrors([]);
|
|
@@ -41,8 +41,6 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
41
41
|
isJQLHydrating = _ref.isJQLHydrating,
|
|
42
42
|
_ref$onSelectionChang = _ref.onSelectionChange,
|
|
43
43
|
onSelectionChange = _ref$onSelectionChang === void 0 ? function () {} : _ref$onSelectionChang,
|
|
44
|
-
_ref$onReset = _ref.onReset,
|
|
45
|
-
resetSelection = _ref$onReset === void 0 ? function () {} : _ref$onReset,
|
|
46
44
|
_ref$isDisabled = _ref.isDisabled,
|
|
47
45
|
isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled;
|
|
48
46
|
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
@@ -192,9 +190,8 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
192
190
|
setSortedOptions([]);
|
|
193
191
|
setSearchTerm('');
|
|
194
192
|
resetHook();
|
|
195
|
-
resetSelection();
|
|
196
193
|
}
|
|
197
|
-
}, [cloudId, resetHook
|
|
194
|
+
}, [cloudId, resetHook]);
|
|
198
195
|
(0, _react.useEffect)(function () {
|
|
199
196
|
if (!(0, _isEqual.default)(selection, selectedOptions)) {
|
|
200
197
|
setSelectedOptions(selection);
|
|
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.asyncPopupSelectMessages = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = (0, _reactIntlNext.defineMessages)({
|
|
8
9
|
selectPlaceholder: {
|
|
9
10
|
id: 'linkDataSource.basic-filter.dropdown.select.placeholder',
|
|
10
11
|
description: 'Placeholder text to be displayed for the search input box.',
|
|
@@ -40,4 +41,4 @@ var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = {
|
|
|
40
41
|
defaultMessage: 'Show more',
|
|
41
42
|
description: 'The text to show more options in dropdown'
|
|
42
43
|
}
|
|
43
|
-
};
|
|
44
|
+
});
|
|
@@ -16,7 +16,6 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
|
16
16
|
var cloudId = _ref.cloudId,
|
|
17
17
|
onChange = _ref.onChange,
|
|
18
18
|
selections = _ref.selections,
|
|
19
|
-
onReset = _ref.onReset,
|
|
20
19
|
isJQLHydrating = _ref.isJQLHydrating;
|
|
21
20
|
return /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
|
|
22
21
|
xcss: basicFilterContainerStyles,
|
|
@@ -30,8 +29,7 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
|
30
29
|
selection: selections[filter] || [],
|
|
31
30
|
isJQLHydrating: isJQLHydrating,
|
|
32
31
|
isDisabled: !cloudId,
|
|
33
|
-
onSelectionChange: onChange
|
|
34
|
-
onReset: onReset
|
|
32
|
+
onSelectionChange: onChange
|
|
35
33
|
});
|
|
36
34
|
}));
|
|
37
35
|
};
|
|
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.asyncPopupSelectMessages = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = (0, _reactIntlNext.defineMessages)({
|
|
8
9
|
loadingMessage: {
|
|
9
10
|
id: 'linkDataSource.basic-filter.loading-message',
|
|
10
11
|
defaultMessage: 'Loading...',
|
|
@@ -20,4 +21,4 @@ var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = {
|
|
|
20
21
|
defaultMessage: 'Something went wrong',
|
|
21
22
|
description: 'The text for when an error occurs when loading options'
|
|
22
23
|
}
|
|
23
|
-
};
|
|
24
|
+
});
|
|
@@ -20,11 +20,19 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
20
20
|
// Map of field keys to their respective clauses in the Jast
|
|
21
21
|
|
|
22
22
|
var getFieldValues = function getFieldValues(operand) {
|
|
23
|
+
var mapValuesFromList = function mapValuesFromList(value) {
|
|
24
|
+
if (value.operandType === _jqlAst.OPERAND_TYPE_VALUE) {
|
|
25
|
+
return value.value;
|
|
26
|
+
}
|
|
27
|
+
// we only support EMPTY keyword atm, hence making sure if operandType is a KEYWORD, then its an EMPTY keyword
|
|
28
|
+
if (value.operandType === _jqlAst.OPERAND_TYPE_KEYWORD && value.value === _jqlAst.OPERAND_EMPTY) {
|
|
29
|
+
return value.value;
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
};
|
|
23
33
|
switch (operand.operandType) {
|
|
24
34
|
case _jqlAst.OPERAND_TYPE_LIST:
|
|
25
|
-
return operand.values.map(function (value) {
|
|
26
|
-
return value.operandType === _jqlAst.OPERAND_TYPE_VALUE && value.value || undefined;
|
|
27
|
-
}).filter(function (value) {
|
|
35
|
+
return operand.values.map(mapValuesFromList).filter(function (value) {
|
|
28
36
|
return !!value;
|
|
29
37
|
});
|
|
30
38
|
case _jqlAst.OPERAND_TYPE_VALUE:
|
|
@@ -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.JiraSearchContainer = exports.ALLOWED_ORDER_BY_KEYS = void 0;
|
|
8
|
+
exports.JiraSearchContainer = exports.DEFAULT_JQL_QUERY = exports.ALLOWED_ORDER_BY_KEYS = void 0;
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -39,7 +39,7 @@ var inputContainerStyles = (0, _react2.css)({
|
|
|
39
39
|
var basicSearchInputContainerStyles = (0, _primitives.xcss)({
|
|
40
40
|
flexGrow: 1
|
|
41
41
|
});
|
|
42
|
-
var DEFAULT_JQL_QUERY = 'created >= -30d order by created DESC';
|
|
42
|
+
var DEFAULT_JQL_QUERY = exports.DEFAULT_JQL_QUERY = 'created >= -30d order by created DESC';
|
|
43
43
|
var ALLOWED_ORDER_BY_KEYS = exports.ALLOWED_ORDER_BY_KEYS = ['key', 'summary', 'assignee', 'status', 'created'];
|
|
44
44
|
var JiraSearchMethodSwitcher = _modeSwitcher.ModeSwitcher;
|
|
45
45
|
var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchContainer(props) {
|
|
@@ -49,7 +49,7 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
|
|
|
49
49
|
onSearchMethodChangeCallback = props.onSearchMethodChange,
|
|
50
50
|
initialSearchMethod = props.initialSearchMethod;
|
|
51
51
|
var _ref = parameters || {},
|
|
52
|
-
|
|
52
|
+
currentCloudId = _ref.cloudId,
|
|
53
53
|
initialJql = _ref.jql;
|
|
54
54
|
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
55
55
|
formatMessage = _useIntl.formatMessage;
|
|
@@ -67,22 +67,26 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
|
|
|
67
67
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
68
68
|
jql = _useState6[0],
|
|
69
69
|
setJql = _useState6[1];
|
|
70
|
-
var _useState7 = (0, _react.useState)(
|
|
70
|
+
var _useState7 = (0, _react.useState)(currentCloudId),
|
|
71
71
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
var _useState9 = (0, _react.useState)(),
|
|
72
|
+
cloudId = _useState8[0],
|
|
73
|
+
setCloudId = _useState8[1];
|
|
74
|
+
var _useState9 = (0, _react.useState)(false),
|
|
75
75
|
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
isComplexQuery = _useState10[0],
|
|
77
|
+
setIsComplexQuery = _useState10[1];
|
|
78
78
|
var _useState11 = (0, _react.useState)(),
|
|
79
79
|
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
var _useState13 = (0, _react.useState)(
|
|
80
|
+
orderKey = _useState12[0],
|
|
81
|
+
setOrderKey = _useState12[1];
|
|
82
|
+
var _useState13 = (0, _react.useState)(),
|
|
83
83
|
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
orderDirection = _useState14[0],
|
|
85
|
+
setOrderDirection = _useState14[1];
|
|
86
|
+
var _useState15 = (0, _react.useState)({}),
|
|
87
|
+
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
88
|
+
filterSelections = _useState16[0],
|
|
89
|
+
setFilterSelections = _useState16[1];
|
|
86
90
|
var showBasicFilters = (0, _react.useMemo)(function () {
|
|
87
91
|
if ((0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.datasource.show-jlol-basic-filters')) {
|
|
88
92
|
return true;
|
|
@@ -191,11 +195,17 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
|
|
|
191
195
|
setFilterSelections(updatedSelection);
|
|
192
196
|
handleBasicFilterSelectionChange(updatedSelection);
|
|
193
197
|
}, [handleBasicFilterSelectionChange, filterSelections]);
|
|
194
|
-
|
|
195
|
-
if (
|
|
198
|
+
(0, _react.useEffect)(function () {
|
|
199
|
+
if (currentCloudId !== cloudId) {
|
|
200
|
+
setBasicSearchTerm('');
|
|
201
|
+
setJql(DEFAULT_JQL_QUERY);
|
|
202
|
+
setIsComplexQuery(false);
|
|
203
|
+
setOrderKey(undefined);
|
|
204
|
+
setOrderDirection(undefined);
|
|
196
205
|
setFilterSelections({});
|
|
206
|
+
setCloudId(currentCloudId);
|
|
197
207
|
}
|
|
198
|
-
}, [
|
|
208
|
+
}, [currentCloudId, cloudId]);
|
|
199
209
|
return (0, _react2.jsx)("div", {
|
|
200
210
|
css: inputContainerStyles,
|
|
201
211
|
"data-testid": "jira-search-container"
|
|
@@ -211,7 +221,6 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
|
|
|
211
221
|
cloudId: cloudId || '',
|
|
212
222
|
onChange: handleSelectionChange,
|
|
213
223
|
selections: filterSelections,
|
|
214
|
-
onReset: handleBasicFiltersReset,
|
|
215
224
|
isJQLHydrating: basicFilterHydrationStatus === 'loading'
|
|
216
225
|
})), currentSearchMethod === 'jql' && (0, _react2.jsx)(_jqlEditor.JiraJQLEditor, {
|
|
217
226
|
cloudId: cloudId || '',
|
|
@@ -19,6 +19,7 @@ var _uuid = require("uuid");
|
|
|
19
19
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
20
20
|
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
21
21
|
var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
|
|
22
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
22
23
|
var _linkUrl = _interopRequireDefault(require("@atlaskit/smart-card/link-url"));
|
|
23
24
|
var _colors = require("@atlaskit/theme/colors");
|
|
24
25
|
var _analytics = require("../../../analytics");
|
|
@@ -37,6 +38,7 @@ var _noResults = require("../../common/error-state/no-results");
|
|
|
37
38
|
var _issueLikeTable = require("../../issue-like-table");
|
|
38
39
|
var _link = _interopRequireDefault(require("../../issue-like-table/render-type/link"));
|
|
39
40
|
var _ui = require("../basic-filters/ui");
|
|
41
|
+
var _isQueryTooComplex = require("../basic-filters/utils/isQueryTooComplex");
|
|
40
42
|
var _initialStateView = require("../initial-state-view");
|
|
41
43
|
var _jiraSearchContainer = require("../jira-search-container");
|
|
42
44
|
var _modeSwitcher = require("../mode-switcher");
|
|
@@ -138,7 +140,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
|
|
|
138
140
|
// analytics related parameters
|
|
139
141
|
var searchCount = (0, _react.useRef)(0);
|
|
140
142
|
var userInteractionActions = (0, _react.useRef)(new Set());
|
|
141
|
-
var initialSearchMethod = '
|
|
143
|
+
var initialSearchMethod = (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.datasource.show-jlol-basic-filters') && !(0, _isQueryTooComplex.isQueryTooComplex)((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql) || '') ? 'basic' : 'jql';
|
|
142
144
|
var _useState11 = (0, _react.useState)(initialSearchMethod),
|
|
143
145
|
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
144
146
|
currentSearchMethod = _useState12[0],
|
|
@@ -340,6 +342,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
|
|
|
340
342
|
}, [analyticsPayload, onCancel]);
|
|
341
343
|
var onSiteSelection = (0, _react.useCallback)(function (site) {
|
|
342
344
|
userInteractionActions.current.add(_types.DatasourceAction.INSTANCE_UPDATED);
|
|
345
|
+
setJql('');
|
|
343
346
|
setCloudId(site.cloudId);
|
|
344
347
|
reset({
|
|
345
348
|
shouldForceRequest: true
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { defineMessages } from 'react-intl-next';
|
|
2
|
+
export const filterOptionMessages = defineMessages({
|
|
3
|
+
assigneeUnassignedFilterOption: {
|
|
4
|
+
id: 'linkDataSource.basic-filter.dropdown.select.assignee.unassigned',
|
|
5
|
+
description: 'Text to display for Unassigned assignee filter option.',
|
|
6
|
+
defaultMessage: 'Unassigned'
|
|
7
|
+
}
|
|
8
|
+
});
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl-next';
|
|
2
3
|
import { useBasicFilterAGG } from '../../../../services/useBasicFilterAGG';
|
|
3
4
|
import { mapFieldValuesToFilterOptions, mapFieldValuesToPageCursor, mapFieldValuesToTotalCount } from '../utils/transformers';
|
|
5
|
+
import { filterOptionMessages } from './messages';
|
|
6
|
+
export const getAssigneeUnassignedFilterOption = formatMessage => ({
|
|
7
|
+
label: formatMessage(filterOptionMessages.assigneeUnassignedFilterOption),
|
|
8
|
+
optionType: 'avatarLabel',
|
|
9
|
+
value: 'empty'
|
|
10
|
+
});
|
|
4
11
|
export const useFilterOptions = ({
|
|
5
12
|
filterType,
|
|
6
13
|
cloudId
|
|
7
14
|
}) => {
|
|
15
|
+
const {
|
|
16
|
+
formatMessage
|
|
17
|
+
} = useIntl();
|
|
8
18
|
const [filterOptions, setFilterOptions] = useState([]);
|
|
9
19
|
const [totalCount, setTotalCount] = useState(0);
|
|
10
20
|
const [status, setStatus] = useState('empty');
|
|
@@ -37,26 +47,37 @@ export const useFilterOptions = ({
|
|
|
37
47
|
setErrors(response.errors);
|
|
38
48
|
return;
|
|
39
49
|
}
|
|
50
|
+
const mappedResponse = mapFieldValuesToFilterOptions(response);
|
|
51
|
+
let mappedTotalCount = mapFieldValuesToTotalCount(response);
|
|
40
52
|
if (isNewSearch) {
|
|
41
|
-
setFilterOptions(mapFieldValuesToFilterOptions(response));
|
|
42
53
|
if (isRequestLikeInitialSearch) {
|
|
43
54
|
/**
|
|
44
55
|
* The initial dataset is used in couple of paths, eg: when a user searches and clears the search text.
|
|
45
56
|
* During these times, we dont want to fetch data again and again, hence a mini cache setup to store and provide the initial dataset
|
|
46
57
|
*/
|
|
47
58
|
initialData.current = response;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* For assignee filter option, we want `Unassigned` as an option.
|
|
62
|
+
* Since `Unassigned/EMPTY` is not returned by the API, we add it manually, but only for the initial list
|
|
63
|
+
*/
|
|
64
|
+
if (filterType === 'assignee') {
|
|
65
|
+
mappedResponse.unshift(getAssigneeUnassignedFilterOption(formatMessage));
|
|
66
|
+
mappedTotalCount += 1;
|
|
67
|
+
}
|
|
48
68
|
}
|
|
69
|
+
setFilterOptions(mappedResponse);
|
|
49
70
|
} else {
|
|
50
|
-
setFilterOptions([...filterOptions, ...
|
|
71
|
+
setFilterOptions([...filterOptions, ...mappedResponse]);
|
|
51
72
|
}
|
|
52
|
-
setTotalCount(
|
|
73
|
+
setTotalCount(mappedTotalCount);
|
|
53
74
|
setNextPageCursor(mapFieldValuesToPageCursor(response));
|
|
54
75
|
setStatus('resolved');
|
|
55
76
|
} catch (error) {
|
|
56
77
|
setStatus('rejected');
|
|
57
78
|
setErrors([error]);
|
|
58
79
|
}
|
|
59
|
-
}, [cloudId, filterOptions, filterType, getFieldValues]);
|
|
80
|
+
}, [cloudId, filterOptions, filterType, formatMessage, getFieldValues]);
|
|
60
81
|
useEffect(() => {
|
|
61
82
|
if (status !== 'rejected' && errors.length !== 0) {
|
|
62
83
|
setErrors([]);
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl-next';
|
|
3
|
+
import { OPERAND_EMPTY } from '@atlaskit/jql-ast';
|
|
2
4
|
import { useBasicFilterAGG } from '../../../../services/useBasicFilterAGG';
|
|
3
5
|
import { extractValuesFromNonComplexJQL } from '../utils/extractValuesFromNonComplexJQL';
|
|
4
6
|
import { removeFuzzyCharacter } from '../utils/isClauseTooComplex';
|
|
5
7
|
import { mapHydrateResponseData } from '../utils/transformers';
|
|
8
|
+
import { getAssigneeUnassignedFilterOption } from './useFilterOptions';
|
|
6
9
|
export const useHydrateJqlQuery = (cloudId, jql) => {
|
|
7
10
|
const [hydratedOptions, setHydratedOptions] = useState({});
|
|
11
|
+
const {
|
|
12
|
+
formatMessage
|
|
13
|
+
} = useIntl();
|
|
8
14
|
const [status, setStatus] = useState('empty');
|
|
9
15
|
const [errors, setErrors] = useState([]);
|
|
10
16
|
const {
|
|
@@ -19,6 +25,10 @@ export const useHydrateJqlQuery = (cloudId, jql) => {
|
|
|
19
25
|
setErrors(response.errors);
|
|
20
26
|
return;
|
|
21
27
|
}
|
|
28
|
+
const {
|
|
29
|
+
assignee: mappedHydratedAssigneeValue,
|
|
30
|
+
...restOfMappedHydratedResponse
|
|
31
|
+
} = mapHydrateResponseData(response);
|
|
22
32
|
|
|
23
33
|
/**
|
|
24
34
|
* Hydrate logic does not return text field, hence we parse and extract value from jql
|
|
@@ -26,11 +36,19 @@ export const useHydrateJqlQuery = (cloudId, jql) => {
|
|
|
26
36
|
const {
|
|
27
37
|
text,
|
|
28
38
|
summary,
|
|
29
|
-
key
|
|
39
|
+
key,
|
|
40
|
+
assignee: extractedAssigneeValue
|
|
30
41
|
} = extractValuesFromNonComplexJQL(jql);
|
|
31
42
|
const [textFieldValue] = text || summary || key || [];
|
|
32
43
|
const mappedValues = {
|
|
33
|
-
...
|
|
44
|
+
...restOfMappedHydratedResponse,
|
|
45
|
+
/**
|
|
46
|
+
* Special handling for assignee as we need to inject Unassigned value if JQL contains EMPTY keyword for assignee
|
|
47
|
+
*/
|
|
48
|
+
assignee: [...(mappedHydratedAssigneeValue || []),
|
|
49
|
+
// all values provided by the hydrate API for assignee
|
|
50
|
+
...(extractedAssigneeValue !== null && extractedAssigneeValue !== void 0 && extractedAssigneeValue.includes(OPERAND_EMPTY) // checks and adds EMPTY filter option if extracted assignee values from jql contains EMPTY
|
|
51
|
+
? [getAssigneeUnassignedFilterOption(formatMessage)] : [])],
|
|
34
52
|
...(textFieldValue ? {
|
|
35
53
|
basicInputTextValue: removeFuzzyCharacter(textFieldValue)
|
|
36
54
|
} : {})
|
|
@@ -41,7 +59,7 @@ export const useHydrateJqlQuery = (cloudId, jql) => {
|
|
|
41
59
|
setErrors([error]);
|
|
42
60
|
setStatus('rejected');
|
|
43
61
|
}
|
|
44
|
-
}, [cloudId, getHydratedJQL, jql]);
|
|
62
|
+
}, [cloudId, formatMessage, getHydratedJQL, jql]);
|
|
45
63
|
useEffect(() => {
|
|
46
64
|
if (status !== 'rejected' && errors.length !== 0) {
|
|
47
65
|
setErrors([]);
|
|
@@ -22,7 +22,6 @@ const AsyncPopupSelect = ({
|
|
|
22
22
|
selection,
|
|
23
23
|
isJQLHydrating,
|
|
24
24
|
onSelectionChange = () => {},
|
|
25
|
-
onReset: resetSelection = () => {},
|
|
26
25
|
isDisabled = false
|
|
27
26
|
}) => {
|
|
28
27
|
const {
|
|
@@ -143,9 +142,8 @@ const AsyncPopupSelect = ({
|
|
|
143
142
|
setSortedOptions([]);
|
|
144
143
|
setSearchTerm('');
|
|
145
144
|
resetHook();
|
|
146
|
-
resetSelection();
|
|
147
145
|
}
|
|
148
|
-
}, [cloudId, resetHook
|
|
146
|
+
}, [cloudId, resetHook]);
|
|
149
147
|
useEffect(() => {
|
|
150
148
|
if (!isEqual(selection, selectedOptions)) {
|
|
151
149
|
setSelectedOptions(selection);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { defineMessages } from 'react-intl-next';
|
|
2
|
+
export const asyncPopupSelectMessages = defineMessages({
|
|
2
3
|
selectPlaceholder: {
|
|
3
4
|
id: 'linkDataSource.basic-filter.dropdown.select.placeholder',
|
|
4
5
|
description: 'Placeholder text to be displayed for the search input box.',
|
|
@@ -34,4 +35,4 @@ export const asyncPopupSelectMessages = {
|
|
|
34
35
|
defaultMessage: 'Show more',
|
|
35
36
|
description: 'The text to show more options in dropdown'
|
|
36
37
|
}
|
|
37
|
-
};
|
|
38
|
+
});
|
|
@@ -9,7 +9,6 @@ const BasicFilterContainer = ({
|
|
|
9
9
|
cloudId,
|
|
10
10
|
onChange,
|
|
11
11
|
selections,
|
|
12
|
-
onReset,
|
|
13
12
|
isJQLHydrating
|
|
14
13
|
}) => {
|
|
15
14
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
@@ -24,8 +23,7 @@ const BasicFilterContainer = ({
|
|
|
24
23
|
selection: selections[filter] || [],
|
|
25
24
|
isJQLHydrating: isJQLHydrating,
|
|
26
25
|
isDisabled: !cloudId,
|
|
27
|
-
onSelectionChange: onChange
|
|
28
|
-
onReset: onReset
|
|
26
|
+
onSelectionChange: onChange
|
|
29
27
|
});
|
|
30
28
|
}));
|
|
31
29
|
};
|