@atlaskit/link-datasource 1.19.12 → 1.19.13
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 +9 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/ui/assets-modal/search-container/styled.js +1 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +14 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +11 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +8 -5
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/index.js +13 -3
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +1 -0
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/ui/assets-modal/search-container/styled.js +2 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +14 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +11 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +8 -5
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/index.js +7 -2
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +1 -0
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/ui/assets-modal/search-container/styled.js +1 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +14 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +11 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +8 -5
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/index.js +10 -3
- package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +1 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/index.d.ts +2 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.19.13
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#57773](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57773) [`a2e16053a3dd`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/a2e16053a3dd) - Added group icon and clear search text when popup opens.
|
|
8
|
+
- [#57739](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57739) [`c1ca80ef5958`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c1ca80ef5958) - Update filter tigger button logic to show hydration loader only if the filter has value.
|
|
9
|
+
- [#57513](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57513) [`e0ce3402d2c9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e0ce3402d2c9) - [ux] make schema drop down selector wider
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
|
|
3
12
|
## 1.19.12
|
|
4
13
|
|
|
5
14
|
### 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.13"
|
|
11
11
|
};
|
|
@@ -15,4 +15,4 @@ var FormContainer = exports.FormContainer = _styled.default.form(_templateObject
|
|
|
15
15
|
|
|
16
16
|
// Override the top margin of fields
|
|
17
17
|
var FieldContainer = exports.FieldContainer = _styled.default.div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n flex: 1;\n margin-top: ", ";\n"])), "var(--ds-space-negative-100, -8px)");
|
|
18
|
-
var SchemaSelectContainer = exports.SchemaSelectContainer = _styled.default.div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n width:
|
|
18
|
+
var SchemaSelectContainer = exports.SchemaSelectContainer = _styled.default.div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n max-width: 386px;\n"])));
|
package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js
CHANGED
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _avatar = _interopRequireDefault(require("@atlaskit/avatar"));
|
|
10
|
+
var _peopleGroup = _interopRequireDefault(require("@atlaskit/icon/glyph/people-group"));
|
|
10
11
|
var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
|
|
11
12
|
var _primitives = require("@atlaskit/primitives");
|
|
12
13
|
var commonLabelStyles = (0, _primitives.xcss)({
|
|
@@ -16,6 +17,11 @@ var commonLabelStyles = (0, _primitives.xcss)({
|
|
|
16
17
|
var avatarOptionLabelStyles = (0, _primitives.xcss)({
|
|
17
18
|
marginLeft: 'space.050'
|
|
18
19
|
});
|
|
20
|
+
var groupWrapperStyles = (0, _primitives.xcss)({
|
|
21
|
+
width: "var(--ds-space-250, 20px)",
|
|
22
|
+
minWidth: "var(--ds-space-250, 20px)",
|
|
23
|
+
height: "var(--ds-space-250, 20px)"
|
|
24
|
+
});
|
|
19
25
|
var IconOptionLabel = function IconOptionLabel(_ref) {
|
|
20
26
|
var data = _ref.data;
|
|
21
27
|
var label = data.label,
|
|
@@ -48,7 +54,14 @@ var AvatarOptionLabel = function AvatarOptionLabel(_ref3) {
|
|
|
48
54
|
return /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
|
|
49
55
|
alignItems: "center",
|
|
50
56
|
testId: testId || 'jlol-basic-filter-popup-select-option--avatar'
|
|
51
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
57
|
+
}, data.isGroup ? /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
|
|
58
|
+
alignItems: "center",
|
|
59
|
+
justifyContent: "center",
|
|
60
|
+
xcss: groupWrapperStyles
|
|
61
|
+
}, /*#__PURE__*/_react.default.createElement(_peopleGroup.default, {
|
|
62
|
+
size: "small",
|
|
63
|
+
label: ""
|
|
64
|
+
})) : /*#__PURE__*/_react.default.createElement(_avatar.default, {
|
|
52
65
|
appearance: data.isSquare ? 'square' : 'circle',
|
|
53
66
|
src: data.avatar,
|
|
54
67
|
size: "xsmall"
|
|
@@ -172,11 +172,21 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
172
172
|
});
|
|
173
173
|
}, [fetchFilterOptions, filterType, fireEvent, searchTerm, selectedOptions.length, sortOptionsOnPopupOpen, status]);
|
|
174
174
|
var handleMenuClose = (0, _react.useCallback)(function () {
|
|
175
|
+
/**
|
|
176
|
+
* Clearing the search is to ensure that the sortOptionsOnPopupOpen logic does not mess up.
|
|
177
|
+
* Without this, when the user opens, sortOptionsOnPopupOpen will inject the selected options to the list and the list count and values will be off
|
|
178
|
+
*/
|
|
179
|
+
if (searchTerm) {
|
|
180
|
+
handleInputChange('', {
|
|
181
|
+
action: 'input-change',
|
|
182
|
+
prevInputValue: searchTerm
|
|
183
|
+
});
|
|
184
|
+
}
|
|
175
185
|
fireEvent('ui.dropdown.closed.basicSearchDropdown', {
|
|
176
186
|
filterType: filterType,
|
|
177
187
|
selectionCount: selectedOptions.length
|
|
178
188
|
});
|
|
179
|
-
}, [filterType, fireEvent, selectedOptions.length]);
|
|
189
|
+
}, [filterType, fireEvent, handleInputChange, searchTerm, selectedOptions.length]);
|
|
180
190
|
(0, _react.useEffect)(function () {
|
|
181
191
|
if (status === 'resolved') {
|
|
182
192
|
sortOptionsOnResolve();
|
|
@@ -52,13 +52,15 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
52
52
|
firstOption = _ref3[0];
|
|
53
53
|
var hasOptions = selectedOptions && selectedOptions.length > 0;
|
|
54
54
|
var showButtonLoading = !isDisabled && isLoading;
|
|
55
|
+
var testId = "jlol-basic-filter-".concat(filterType, "-trigger");
|
|
55
56
|
var LoadingButton = (0, _react.useCallback)(function () {
|
|
56
57
|
return /*#__PURE__*/_react.default.createElement(LoadingStateAnimationWrapper, null, /*#__PURE__*/_react.default.createElement(_standardButton.default, {
|
|
57
58
|
iconAfter: /*#__PURE__*/_react.default.createElement(_spinner.default, {
|
|
58
59
|
size: 'xsmall'
|
|
59
|
-
})
|
|
60
|
+
}),
|
|
61
|
+
testId: "".concat(testId, "--loading-button")
|
|
60
62
|
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.asyncPopupSelectMessages["".concat(filterType, "Label")])));
|
|
61
|
-
}, [filterType]);
|
|
63
|
+
}, [filterType, testId]);
|
|
62
64
|
var DefaultButton = (0, _react.useCallback)(function () {
|
|
63
65
|
return /*#__PURE__*/_react.default.createElement(_standardButton.default, {
|
|
64
66
|
appearance: "default",
|
|
@@ -66,7 +68,8 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
66
68
|
isDisabled: isDisabled,
|
|
67
69
|
iconAfter: /*#__PURE__*/_react.default.createElement(_chevronDown.default, {
|
|
68
70
|
label: ""
|
|
69
|
-
})
|
|
71
|
+
}),
|
|
72
|
+
testId: "".concat(testId, "--button")
|
|
70
73
|
}, /*#__PURE__*/_react.default.createElement(_primitives.Flex, null, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
71
74
|
xcss: triggerButtonLabelStyles
|
|
72
75
|
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.asyncPopupSelectMessages["".concat(filterType, "Label")]), firstOption && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, ": ", firstOption.label)), selectedOptions && selectedOptions.length > 1 && /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
|
|
@@ -75,7 +78,7 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
75
78
|
}, /*#__PURE__*/_react.default.createElement(_badge.default, {
|
|
76
79
|
appearance: "primary"
|
|
77
80
|
}, "+", selectedOptions.length - 1))));
|
|
78
|
-
}, [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions]);
|
|
81
|
+
}, [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions, testId]);
|
|
79
82
|
|
|
80
83
|
/**
|
|
81
84
|
* We had an issue with the popup component referencing a stale DOM ref for the trigger button.
|
|
@@ -83,7 +86,7 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
83
86
|
*/
|
|
84
87
|
return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
85
88
|
ref: ref,
|
|
86
|
-
testId:
|
|
89
|
+
testId: testId
|
|
87
90
|
}, showButtonLoading ? /*#__PURE__*/_react.default.createElement(LoadingButton, null) : /*#__PURE__*/_react.default.createElement(DefaultButton, null));
|
|
88
91
|
});
|
|
89
92
|
var _default = exports.default = PopupTrigger;
|
|
@@ -1,33 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = exports.availableBasicFilterTypes = void 0;
|
|
8
|
-
var _react =
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
10
|
var _primitives = require("@atlaskit/primitives");
|
|
11
|
+
var _extractValuesFromNonComplexJQL = require("../utils/extractValuesFromNonComplexJQL");
|
|
10
12
|
var _asyncPopupSelect = _interopRequireDefault(require("./async-popup-select"));
|
|
13
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
11
15
|
var availableBasicFilterTypes = exports.availableBasicFilterTypes = ['project', 'type', 'status', 'assignee'];
|
|
12
16
|
var basicFilterContainerStyles = (0, _primitives.xcss)({
|
|
13
17
|
paddingLeft: "var(--ds-space-100, 8px)"
|
|
14
18
|
});
|
|
15
19
|
var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
16
|
-
var
|
|
20
|
+
var jql = _ref.jql,
|
|
21
|
+
cloudId = _ref.cloudId,
|
|
17
22
|
onChange = _ref.onChange,
|
|
18
23
|
selections = _ref.selections,
|
|
19
24
|
isJQLHydrating = _ref.isJQLHydrating;
|
|
25
|
+
var extractedFilterValues = (0, _react.useMemo)(function () {
|
|
26
|
+
return isJQLHydrating ? (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql) : {};
|
|
27
|
+
}, [isJQLHydrating, jql]);
|
|
20
28
|
return /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
|
|
21
29
|
xcss: basicFilterContainerStyles,
|
|
22
30
|
gap: "space.100",
|
|
23
31
|
testId: "jlol-basic-filter-container"
|
|
24
32
|
}, availableBasicFilterTypes.map(function (filter) {
|
|
33
|
+
var _extractedFilterValue;
|
|
34
|
+
var shouldShowHydrationLoader = isJQLHydrating && ((_extractedFilterValue = extractedFilterValues[filter]) === null || _extractedFilterValue === void 0 ? void 0 : _extractedFilterValue.length) > 0;
|
|
25
35
|
return /*#__PURE__*/_react.default.createElement(_asyncPopupSelect.default, {
|
|
26
36
|
cloudId: cloudId,
|
|
27
37
|
filterType: filter,
|
|
28
38
|
key: filter,
|
|
29
39
|
selection: selections[filter] || [],
|
|
30
|
-
isJQLHydrating:
|
|
40
|
+
isJQLHydrating: shouldShowHydrationLoader,
|
|
31
41
|
isDisabled: !cloudId,
|
|
32
42
|
onSelectionChange: onChange
|
|
33
43
|
});
|
|
@@ -213,6 +213,7 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
|
|
|
213
213
|
onSearch: handleSearch,
|
|
214
214
|
searchTerm: basicSearchTerm
|
|
215
215
|
}), showBasicFilters && (0, _react2.jsx)(_basicFilters.BasicFilters, {
|
|
216
|
+
jql: jql,
|
|
216
217
|
cloudId: cloudId || '',
|
|
217
218
|
onChange: handleBasicFilterSelectionChange,
|
|
218
219
|
selections: filterSelections,
|
package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Avatar from '@atlaskit/avatar';
|
|
3
|
+
import PeopleGroupIcon from '@atlaskit/icon/glyph/people-group';
|
|
3
4
|
import Lozenge from '@atlaskit/lozenge';
|
|
4
5
|
import { Box, Flex, xcss } from '@atlaskit/primitives';
|
|
5
6
|
const commonLabelStyles = xcss({
|
|
@@ -9,6 +10,11 @@ const commonLabelStyles = xcss({
|
|
|
9
10
|
const avatarOptionLabelStyles = xcss({
|
|
10
11
|
marginLeft: 'space.050'
|
|
11
12
|
});
|
|
13
|
+
const groupWrapperStyles = xcss({
|
|
14
|
+
width: "var(--ds-space-250, 20px)",
|
|
15
|
+
minWidth: "var(--ds-space-250, 20px)",
|
|
16
|
+
height: "var(--ds-space-250, 20px)"
|
|
17
|
+
});
|
|
12
18
|
const IconOptionLabel = ({
|
|
13
19
|
data
|
|
14
20
|
}) => {
|
|
@@ -46,7 +52,14 @@ const AvatarOptionLabel = ({
|
|
|
46
52
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
47
53
|
alignItems: "center",
|
|
48
54
|
testId: testId || 'jlol-basic-filter-popup-select-option--avatar'
|
|
49
|
-
}, /*#__PURE__*/React.createElement(
|
|
55
|
+
}, data.isGroup ? /*#__PURE__*/React.createElement(Flex, {
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
justifyContent: "center",
|
|
58
|
+
xcss: groupWrapperStyles
|
|
59
|
+
}, /*#__PURE__*/React.createElement(PeopleGroupIcon, {
|
|
60
|
+
size: "small",
|
|
61
|
+
label: ""
|
|
62
|
+
})) : /*#__PURE__*/React.createElement(Avatar, {
|
|
50
63
|
appearance: data.isSquare ? 'square' : 'circle',
|
|
51
64
|
src: data.avatar,
|
|
52
65
|
size: "xsmall"
|
|
@@ -124,11 +124,21 @@ const AsyncPopupSelect = ({
|
|
|
124
124
|
});
|
|
125
125
|
}, [fetchFilterOptions, filterType, fireEvent, searchTerm, selectedOptions.length, sortOptionsOnPopupOpen, status]);
|
|
126
126
|
const handleMenuClose = useCallback(() => {
|
|
127
|
+
/**
|
|
128
|
+
* Clearing the search is to ensure that the sortOptionsOnPopupOpen logic does not mess up.
|
|
129
|
+
* Without this, when the user opens, sortOptionsOnPopupOpen will inject the selected options to the list and the list count and values will be off
|
|
130
|
+
*/
|
|
131
|
+
if (searchTerm) {
|
|
132
|
+
handleInputChange('', {
|
|
133
|
+
action: 'input-change',
|
|
134
|
+
prevInputValue: searchTerm
|
|
135
|
+
});
|
|
136
|
+
}
|
|
127
137
|
fireEvent('ui.dropdown.closed.basicSearchDropdown', {
|
|
128
138
|
filterType,
|
|
129
139
|
selectionCount: selectedOptions.length
|
|
130
140
|
});
|
|
131
|
-
}, [filterType, fireEvent, selectedOptions.length]);
|
|
141
|
+
}, [filterType, fireEvent, handleInputChange, searchTerm, selectedOptions.length]);
|
|
132
142
|
useEffect(() => {
|
|
133
143
|
if (status === 'resolved') {
|
|
134
144
|
sortOptionsOnResolve();
|
|
@@ -40,18 +40,21 @@ const PopupTrigger = /*#__PURE__*/forwardRef(({
|
|
|
40
40
|
const [firstOption] = selectedOptions || [];
|
|
41
41
|
const hasOptions = selectedOptions && selectedOptions.length > 0;
|
|
42
42
|
const showButtonLoading = !isDisabled && isLoading;
|
|
43
|
+
const testId = `jlol-basic-filter-${filterType}-trigger`;
|
|
43
44
|
const LoadingButton = useCallback(() => /*#__PURE__*/React.createElement(LoadingStateAnimationWrapper, null, /*#__PURE__*/React.createElement(Button, {
|
|
44
45
|
iconAfter: /*#__PURE__*/React.createElement(Spinner, {
|
|
45
46
|
size: 'xsmall'
|
|
46
|
-
})
|
|
47
|
-
|
|
47
|
+
}),
|
|
48
|
+
testId: `${testId}--loading-button`
|
|
49
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, asyncPopupSelectMessages[`${filterType}Label`]))), [filterType, testId]);
|
|
48
50
|
const DefaultButton = useCallback(() => /*#__PURE__*/React.createElement(Button, {
|
|
49
51
|
appearance: "default",
|
|
50
52
|
isSelected: isSelected || hasOptions,
|
|
51
53
|
isDisabled: isDisabled,
|
|
52
54
|
iconAfter: /*#__PURE__*/React.createElement(ChevronDownIcon, {
|
|
53
55
|
label: ""
|
|
54
|
-
})
|
|
56
|
+
}),
|
|
57
|
+
testId: `${testId}--button`
|
|
55
58
|
}, /*#__PURE__*/React.createElement(Flex, null, /*#__PURE__*/React.createElement(Box, {
|
|
56
59
|
xcss: triggerButtonLabelStyles
|
|
57
60
|
}, /*#__PURE__*/React.createElement(FormattedMessage, asyncPopupSelectMessages[`${filterType}Label`]), firstOption && /*#__PURE__*/React.createElement(React.Fragment, null, ": ", firstOption.label)), selectedOptions && selectedOptions.length > 1 && /*#__PURE__*/React.createElement(Flex, {
|
|
@@ -59,7 +62,7 @@ const PopupTrigger = /*#__PURE__*/forwardRef(({
|
|
|
59
62
|
alignItems: "center"
|
|
60
63
|
}, /*#__PURE__*/React.createElement(Badge, {
|
|
61
64
|
appearance: "primary"
|
|
62
|
-
}, "+", selectedOptions.length - 1)))), [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions]);
|
|
65
|
+
}, "+", selectedOptions.length - 1)))), [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions, testId]);
|
|
63
66
|
|
|
64
67
|
/**
|
|
65
68
|
* We had an issue with the popup component referencing a stale DOM ref for the trigger button.
|
|
@@ -67,7 +70,7 @@ const PopupTrigger = /*#__PURE__*/forwardRef(({
|
|
|
67
70
|
*/
|
|
68
71
|
return /*#__PURE__*/React.createElement(Box, {
|
|
69
72
|
ref: ref,
|
|
70
|
-
testId:
|
|
73
|
+
testId: testId
|
|
71
74
|
}, showButtonLoading ? /*#__PURE__*/React.createElement(LoadingButton, null) : /*#__PURE__*/React.createElement(DefaultButton, null));
|
|
72
75
|
});
|
|
73
76
|
export default PopupTrigger;
|
|
@@ -1,27 +1,32 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
2
|
import { Flex, xcss } from '@atlaskit/primitives';
|
|
3
|
+
import { extractValuesFromNonComplexJQL } from '../utils/extractValuesFromNonComplexJQL';
|
|
3
4
|
import AsyncPopupSelect from './async-popup-select';
|
|
4
5
|
export const availableBasicFilterTypes = ['project', 'type', 'status', 'assignee'];
|
|
5
6
|
const basicFilterContainerStyles = xcss({
|
|
6
7
|
paddingLeft: "var(--ds-space-100, 8px)"
|
|
7
8
|
});
|
|
8
9
|
const BasicFilterContainer = ({
|
|
10
|
+
jql,
|
|
9
11
|
cloudId,
|
|
10
12
|
onChange,
|
|
11
13
|
selections,
|
|
12
14
|
isJQLHydrating
|
|
13
15
|
}) => {
|
|
16
|
+
const extractedFilterValues = useMemo(() => isJQLHydrating ? extractValuesFromNonComplexJQL(jql) : {}, [isJQLHydrating, jql]);
|
|
14
17
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
15
18
|
xcss: basicFilterContainerStyles,
|
|
16
19
|
gap: "space.100",
|
|
17
20
|
testId: "jlol-basic-filter-container"
|
|
18
21
|
}, availableBasicFilterTypes.map(filter => {
|
|
22
|
+
var _extractedFilterValue;
|
|
23
|
+
const shouldShowHydrationLoader = isJQLHydrating && ((_extractedFilterValue = extractedFilterValues[filter]) === null || _extractedFilterValue === void 0 ? void 0 : _extractedFilterValue.length) > 0;
|
|
19
24
|
return /*#__PURE__*/React.createElement(AsyncPopupSelect, {
|
|
20
25
|
cloudId: cloudId,
|
|
21
26
|
filterType: filter,
|
|
22
27
|
key: filter,
|
|
23
28
|
selection: selections[filter] || [],
|
|
24
|
-
isJQLHydrating:
|
|
29
|
+
isJQLHydrating: shouldShowHydrationLoader,
|
|
25
30
|
isDisabled: !cloudId,
|
|
26
31
|
onSelectionChange: onChange
|
|
27
32
|
});
|
|
@@ -181,6 +181,7 @@ export const JiraSearchContainer = props => {
|
|
|
181
181
|
onSearch: handleSearch,
|
|
182
182
|
searchTerm: basicSearchTerm
|
|
183
183
|
}), showBasicFilters && jsx(BasicFilters, {
|
|
184
|
+
jql: jql,
|
|
184
185
|
cloudId: cloudId || '',
|
|
185
186
|
onChange: handleBasicFilterSelectionChange,
|
|
186
187
|
selections: filterSelections,
|
|
@@ -8,4 +8,4 @@ export var FormContainer = styled.form(_templateObject2 || (_templateObject2 = _
|
|
|
8
8
|
|
|
9
9
|
// Override the top margin of fields
|
|
10
10
|
export var FieldContainer = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n flex: 1;\n margin-top: ", ";\n"])), "var(--ds-space-negative-100, -8px)");
|
|
11
|
-
export var SchemaSelectContainer = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n width:
|
|
11
|
+
export var SchemaSelectContainer = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n width: 100%;\n max-width: 386px;\n"])));
|
package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Avatar from '@atlaskit/avatar';
|
|
3
|
+
import PeopleGroupIcon from '@atlaskit/icon/glyph/people-group';
|
|
3
4
|
import Lozenge from '@atlaskit/lozenge';
|
|
4
5
|
import { Box, Flex, xcss } from '@atlaskit/primitives';
|
|
5
6
|
var commonLabelStyles = xcss({
|
|
@@ -9,6 +10,11 @@ var commonLabelStyles = xcss({
|
|
|
9
10
|
var avatarOptionLabelStyles = xcss({
|
|
10
11
|
marginLeft: 'space.050'
|
|
11
12
|
});
|
|
13
|
+
var groupWrapperStyles = xcss({
|
|
14
|
+
width: "var(--ds-space-250, 20px)",
|
|
15
|
+
minWidth: "var(--ds-space-250, 20px)",
|
|
16
|
+
height: "var(--ds-space-250, 20px)"
|
|
17
|
+
});
|
|
12
18
|
var IconOptionLabel = function IconOptionLabel(_ref) {
|
|
13
19
|
var data = _ref.data;
|
|
14
20
|
var label = data.label,
|
|
@@ -41,7 +47,14 @@ var AvatarOptionLabel = function AvatarOptionLabel(_ref3) {
|
|
|
41
47
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
42
48
|
alignItems: "center",
|
|
43
49
|
testId: testId || 'jlol-basic-filter-popup-select-option--avatar'
|
|
44
|
-
}, /*#__PURE__*/React.createElement(
|
|
50
|
+
}, data.isGroup ? /*#__PURE__*/React.createElement(Flex, {
|
|
51
|
+
alignItems: "center",
|
|
52
|
+
justifyContent: "center",
|
|
53
|
+
xcss: groupWrapperStyles
|
|
54
|
+
}, /*#__PURE__*/React.createElement(PeopleGroupIcon, {
|
|
55
|
+
size: "small",
|
|
56
|
+
label: ""
|
|
57
|
+
})) : /*#__PURE__*/React.createElement(Avatar, {
|
|
45
58
|
appearance: data.isSquare ? 'square' : 'circle',
|
|
46
59
|
src: data.avatar,
|
|
47
60
|
size: "xsmall"
|
|
@@ -162,11 +162,21 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
162
162
|
});
|
|
163
163
|
}, [fetchFilterOptions, filterType, fireEvent, searchTerm, selectedOptions.length, sortOptionsOnPopupOpen, status]);
|
|
164
164
|
var handleMenuClose = useCallback(function () {
|
|
165
|
+
/**
|
|
166
|
+
* Clearing the search is to ensure that the sortOptionsOnPopupOpen logic does not mess up.
|
|
167
|
+
* Without this, when the user opens, sortOptionsOnPopupOpen will inject the selected options to the list and the list count and values will be off
|
|
168
|
+
*/
|
|
169
|
+
if (searchTerm) {
|
|
170
|
+
handleInputChange('', {
|
|
171
|
+
action: 'input-change',
|
|
172
|
+
prevInputValue: searchTerm
|
|
173
|
+
});
|
|
174
|
+
}
|
|
165
175
|
fireEvent('ui.dropdown.closed.basicSearchDropdown', {
|
|
166
176
|
filterType: filterType,
|
|
167
177
|
selectionCount: selectedOptions.length
|
|
168
178
|
});
|
|
169
|
-
}, [filterType, fireEvent, selectedOptions.length]);
|
|
179
|
+
}, [filterType, fireEvent, handleInputChange, searchTerm, selectedOptions.length]);
|
|
170
180
|
useEffect(function () {
|
|
171
181
|
if (status === 'resolved') {
|
|
172
182
|
sortOptionsOnResolve();
|
|
@@ -42,13 +42,15 @@ var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
42
42
|
firstOption = _ref3[0];
|
|
43
43
|
var hasOptions = selectedOptions && selectedOptions.length > 0;
|
|
44
44
|
var showButtonLoading = !isDisabled && isLoading;
|
|
45
|
+
var testId = "jlol-basic-filter-".concat(filterType, "-trigger");
|
|
45
46
|
var LoadingButton = useCallback(function () {
|
|
46
47
|
return /*#__PURE__*/React.createElement(LoadingStateAnimationWrapper, null, /*#__PURE__*/React.createElement(Button, {
|
|
47
48
|
iconAfter: /*#__PURE__*/React.createElement(Spinner, {
|
|
48
49
|
size: 'xsmall'
|
|
49
|
-
})
|
|
50
|
+
}),
|
|
51
|
+
testId: "".concat(testId, "--loading-button")
|
|
50
52
|
}, /*#__PURE__*/React.createElement(FormattedMessage, asyncPopupSelectMessages["".concat(filterType, "Label")])));
|
|
51
|
-
}, [filterType]);
|
|
53
|
+
}, [filterType, testId]);
|
|
52
54
|
var DefaultButton = useCallback(function () {
|
|
53
55
|
return /*#__PURE__*/React.createElement(Button, {
|
|
54
56
|
appearance: "default",
|
|
@@ -56,7 +58,8 @@ var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
56
58
|
isDisabled: isDisabled,
|
|
57
59
|
iconAfter: /*#__PURE__*/React.createElement(ChevronDownIcon, {
|
|
58
60
|
label: ""
|
|
59
|
-
})
|
|
61
|
+
}),
|
|
62
|
+
testId: "".concat(testId, "--button")
|
|
60
63
|
}, /*#__PURE__*/React.createElement(Flex, null, /*#__PURE__*/React.createElement(Box, {
|
|
61
64
|
xcss: triggerButtonLabelStyles
|
|
62
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, {
|
|
@@ -65,7 +68,7 @@ var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
65
68
|
}, /*#__PURE__*/React.createElement(Badge, {
|
|
66
69
|
appearance: "primary"
|
|
67
70
|
}, "+", selectedOptions.length - 1))));
|
|
68
|
-
}, [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions]);
|
|
71
|
+
}, [filterType, firstOption, hasOptions, isDisabled, isSelected, selectedOptions, testId]);
|
|
69
72
|
|
|
70
73
|
/**
|
|
71
74
|
* We had an issue with the popup component referencing a stale DOM ref for the trigger button.
|
|
@@ -73,7 +76,7 @@ var PopupTrigger = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
73
76
|
*/
|
|
74
77
|
return /*#__PURE__*/React.createElement(Box, {
|
|
75
78
|
ref: ref,
|
|
76
|
-
testId:
|
|
79
|
+
testId: testId
|
|
77
80
|
}, showButtonLoading ? /*#__PURE__*/React.createElement(LoadingButton, null) : /*#__PURE__*/React.createElement(DefaultButton, null));
|
|
78
81
|
});
|
|
79
82
|
export default PopupTrigger;
|
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
2
|
import { Flex, xcss } from '@atlaskit/primitives';
|
|
3
|
+
import { extractValuesFromNonComplexJQL } from '../utils/extractValuesFromNonComplexJQL';
|
|
3
4
|
import AsyncPopupSelect from './async-popup-select';
|
|
4
5
|
export var availableBasicFilterTypes = ['project', 'type', 'status', 'assignee'];
|
|
5
6
|
var basicFilterContainerStyles = xcss({
|
|
6
7
|
paddingLeft: "var(--ds-space-100, 8px)"
|
|
7
8
|
});
|
|
8
9
|
var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
9
|
-
var
|
|
10
|
+
var jql = _ref.jql,
|
|
11
|
+
cloudId = _ref.cloudId,
|
|
10
12
|
onChange = _ref.onChange,
|
|
11
13
|
selections = _ref.selections,
|
|
12
14
|
isJQLHydrating = _ref.isJQLHydrating;
|
|
15
|
+
var extractedFilterValues = useMemo(function () {
|
|
16
|
+
return isJQLHydrating ? extractValuesFromNonComplexJQL(jql) : {};
|
|
17
|
+
}, [isJQLHydrating, jql]);
|
|
13
18
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
14
19
|
xcss: basicFilterContainerStyles,
|
|
15
20
|
gap: "space.100",
|
|
16
21
|
testId: "jlol-basic-filter-container"
|
|
17
22
|
}, availableBasicFilterTypes.map(function (filter) {
|
|
23
|
+
var _extractedFilterValue;
|
|
24
|
+
var shouldShowHydrationLoader = isJQLHydrating && ((_extractedFilterValue = extractedFilterValues[filter]) === null || _extractedFilterValue === void 0 ? void 0 : _extractedFilterValue.length) > 0;
|
|
18
25
|
return /*#__PURE__*/React.createElement(AsyncPopupSelect, {
|
|
19
26
|
cloudId: cloudId,
|
|
20
27
|
filterType: filter,
|
|
21
28
|
key: filter,
|
|
22
29
|
selection: selections[filter] || [],
|
|
23
|
-
isJQLHydrating:
|
|
30
|
+
isJQLHydrating: shouldShowHydrationLoader,
|
|
24
31
|
isDisabled: !cloudId,
|
|
25
32
|
onSelectionChange: onChange
|
|
26
33
|
});
|
|
@@ -204,6 +204,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
|
|
|
204
204
|
onSearch: handleSearch,
|
|
205
205
|
searchTerm: basicSearchTerm
|
|
206
206
|
}), showBasicFilters && jsx(BasicFilters, {
|
|
207
|
+
jql: jql,
|
|
207
208
|
cloudId: cloudId || '',
|
|
208
209
|
onChange: handleBasicFilterSelectionChange,
|
|
209
210
|
selections: filterSelections,
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
import type { BasicFilterFieldType, SelectedOptionsMap, SelectOption } from '../types';
|
|
3
3
|
export declare const availableBasicFilterTypes: BasicFilterFieldType[];
|
|
4
4
|
export interface BasicFilterContainerProps {
|
|
5
|
+
jql: string;
|
|
5
6
|
cloudId: string;
|
|
6
7
|
selections: SelectedOptionsMap;
|
|
7
8
|
onChange: (filterType: BasicFilterFieldType, options: SelectOption[]) => void;
|
|
8
9
|
isJQLHydrating: boolean;
|
|
9
10
|
}
|
|
10
|
-
declare const BasicFilterContainer: ({ cloudId, onChange, selections, isJQLHydrating, }: BasicFilterContainerProps) => JSX.Element;
|
|
11
|
+
declare const BasicFilterContainer: ({ jql, cloudId, onChange, selections, isJQLHydrating, }: BasicFilterContainerProps) => JSX.Element;
|
|
11
12
|
export default BasicFilterContainer;
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
import type { BasicFilterFieldType, SelectedOptionsMap, SelectOption } from '../types';
|
|
3
3
|
export declare const availableBasicFilterTypes: BasicFilterFieldType[];
|
|
4
4
|
export interface BasicFilterContainerProps {
|
|
5
|
+
jql: string;
|
|
5
6
|
cloudId: string;
|
|
6
7
|
selections: SelectedOptionsMap;
|
|
7
8
|
onChange: (filterType: BasicFilterFieldType, options: SelectOption[]) => void;
|
|
8
9
|
isJQLHydrating: boolean;
|
|
9
10
|
}
|
|
10
|
-
declare const BasicFilterContainer: ({ cloudId, onChange, selections, isJQLHydrating, }: BasicFilterContainerProps) => JSX.Element;
|
|
11
|
+
declare const BasicFilterContainer: ({ jql, cloudId, onChange, selections, isJQLHydrating, }: BasicFilterContainerProps) => JSX.Element;
|
|
11
12
|
export default BasicFilterContainer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/link-datasource",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.13",
|
|
4
4
|
"description": "UI Components to support linking platform dataset feature",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^0.12.0",
|
|
56
56
|
"@atlaskit/pragmatic-drag-and-drop-react-beautiful-dnd-autoscroll": "^0.6.0",
|
|
57
57
|
"@atlaskit/pragmatic-drag-and-drop-react-indicator": "^0.17.0",
|
|
58
|
-
"@atlaskit/primitives": "^1.
|
|
58
|
+
"@atlaskit/primitives": "^1.13.0",
|
|
59
59
|
"@atlaskit/select": "^17.0.0",
|
|
60
60
|
"@atlaskit/smart-card": "^26.42.0",
|
|
61
61
|
"@atlaskit/spinner": "^16.0.0",
|