@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.
Files changed (25) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/ui/assets-modal/search-container/styled.js +1 -1
  4. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +14 -1
  5. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +11 -1
  6. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +8 -5
  7. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/index.js +13 -3
  8. package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +1 -0
  9. package/dist/es2019/analytics/constants.js +1 -1
  10. package/dist/es2019/ui/assets-modal/search-container/styled.js +2 -1
  11. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +14 -1
  12. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +11 -1
  13. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +8 -5
  14. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/index.js +7 -2
  15. package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +1 -0
  16. package/dist/esm/analytics/constants.js +1 -1
  17. package/dist/esm/ui/assets-modal/search-container/styled.js +1 -1
  18. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/formatOptionLabel.js +14 -1
  19. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +11 -1
  20. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/trigger.js +8 -5
  21. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/index.js +10 -3
  22. package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +1 -0
  23. package/dist/types/ui/jira-issues-modal/basic-filters/ui/index.d.ts +2 -1
  24. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/index.d.ts +2 -1
  25. 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.12"
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: 200px;\n"])));
18
+ var SchemaSelectContainer = exports.SchemaSelectContainer = _styled.default.div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n max-width: 386px;\n"])));
@@ -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(_avatar.default, {
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: "jlol-basic-filter-".concat(filterType, "-trigger")
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 = _interopRequireDefault(require("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 cloudId = _ref.cloudId,
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: 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,
@@ -1,5 +1,5 @@
1
1
  export const EVENT_CHANNEL = 'media';
2
2
  export const packageMetaData = {
3
3
  packageName: "@atlaskit/link-datasource",
4
- packageVersion: "1.19.12"
4
+ packageVersion: "1.19.13"
5
5
  };
@@ -18,5 +18,6 @@ export const FieldContainer = styled.div`
18
18
  margin-top: ${"var(--ds-space-negative-100, -8px)"};
19
19
  `;
20
20
  export const SchemaSelectContainer = styled.div`
21
- width: 200px;
21
+ width: 100%;
22
+ max-width: 386px;
22
23
  `;
@@ -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(Avatar, {
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
- }, /*#__PURE__*/React.createElement(FormattedMessage, asyncPopupSelectMessages[`${filterType}Label`]))), [filterType]);
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: `jlol-basic-filter-${filterType}-trigger`
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: 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,
@@ -1,5 +1,5 @@
1
1
  export var EVENT_CHANNEL = 'media';
2
2
  export var packageMetaData = {
3
3
  packageName: "@atlaskit/link-datasource",
4
- packageVersion: "1.19.12"
4
+ packageVersion: "1.19.13"
5
5
  };
@@ -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: 200px;\n"])));
11
+ export var SchemaSelectContainer = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n width: 100%;\n max-width: 386px;\n"])));
@@ -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(Avatar, {
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: "jlol-basic-filter-".concat(filterType, "-trigger")
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 cloudId = _ref.cloudId,
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: 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.12",
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.12.0",
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",