@decisiv/ui-components 2.0.1-alpha.8 → 2.0.1-alpha.82
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/lib/atoms/BaseButton/index.d.ts.map +1 -1
- package/lib/atoms/BaseButton/index.js +1 -1
- package/lib/atoms/BooleanInput/index.d.ts.map +1 -1
- package/lib/atoms/BooleanInput/index.js +19 -2
- package/lib/atoms/BooleanInput/index.test.js +17 -6
- package/lib/atoms/BooleanInput/types.d.ts +2 -0
- package/lib/atoms/BooleanInput/types.d.ts.map +1 -1
- package/lib/atoms/Calendar/hooks/useCalendar/index.d.ts.map +1 -1
- package/lib/atoms/Calendar/hooks/useCalendar/index.js +2 -1
- package/lib/atoms/Calendar/hooks/useCalendar/index.test.js +5 -6
- package/lib/atoms/Calendar/index.d.ts.map +1 -1
- package/lib/atoms/Calendar/index.js +8 -1
- package/lib/atoms/Calendar/index.test.js +70 -40
- package/lib/atoms/InputField/Containers.d.ts +10 -6
- package/lib/atoms/InputField/Containers.d.ts.map +1 -1
- package/lib/atoms/InputField/Containers.js +6 -6
- package/lib/atoms/InputField/InputLabel.d.ts +1 -0
- package/lib/atoms/InputField/InputLabel.d.ts.map +1 -1
- package/lib/atoms/InputField/InputLabel.js +2 -1
- package/lib/atoms/InputField/index.d.ts +4 -0
- package/lib/atoms/InputField/index.d.ts.map +1 -1
- package/lib/atoms/InputField/index.js +18 -7
- package/lib/atoms/InputField/index.test.js +91 -0
- package/lib/atoms/InputField/schema.d.ts.map +1 -1
- package/lib/atoms/InputField/schema.js +1 -0
- package/lib/atoms/OptionsList/Category.d.ts +1 -1
- package/lib/atoms/OptionsList/Category.d.ts.map +1 -1
- package/lib/atoms/OptionsList/Category.js +4 -2
- package/lib/atoms/OptionsList/Footer.d.ts +8 -0
- package/lib/atoms/OptionsList/Footer.d.ts.map +1 -0
- package/lib/atoms/OptionsList/Footer.js +72 -0
- package/lib/atoms/OptionsList/Option.d.ts.map +1 -1
- package/lib/atoms/OptionsList/Option.js +8 -5
- package/lib/atoms/OptionsList/index.d.ts.map +1 -1
- package/lib/atoms/OptionsList/index.js +43 -16
- package/lib/atoms/OptionsList/index.test.js +107 -11
- package/lib/atoms/OptionsList/schema.d.ts.map +1 -1
- package/lib/atoms/OptionsList/schema.js +4 -0
- package/lib/atoms/OptionsList/types.d.ts +14 -0
- package/lib/atoms/OptionsList/types.d.ts.map +1 -1
- package/lib/atoms/RequiredIcon.d.ts +9 -0
- package/lib/atoms/RequiredIcon.d.ts.map +1 -0
- package/lib/atoms/{InputField/RequiredIcon.js → RequiredIcon.js} +7 -3
- package/lib/components/Button/schema.d.ts +6 -1
- package/lib/components/Button/schema.d.ts.map +1 -1
- package/lib/components/Button/schema.js +9 -4
- package/lib/components/Checkbox/index.d.ts.map +1 -1
- package/lib/components/Checkbox/index.js +3 -1
- package/lib/components/Checkbox/schema.d.ts.map +1 -1
- package/lib/components/Checkbox/schema.js +2 -0
- package/lib/components/Combobox/Target.d.ts.map +1 -1
- package/lib/components/Combobox/Target.js +45 -14
- package/lib/components/Combobox/index.d.ts.map +1 -1
- package/lib/components/Combobox/index.js +182 -64
- package/lib/components/Combobox/index.test.js +358 -135
- package/lib/components/Combobox/schema.d.ts.map +1 -1
- package/lib/components/Combobox/schema.js +9 -2
- package/lib/components/Combobox/types.d.ts +12 -3
- package/lib/components/Combobox/types.d.ts.map +1 -1
- package/lib/components/DropdownList/index.d.ts +4 -0
- package/lib/components/DropdownList/index.d.ts.map +1 -1
- package/lib/components/DropdownList/index.js +76 -11
- package/lib/components/DropdownList/propTypes.d.ts +4 -0
- package/lib/components/DropdownList/propTypes.d.ts.map +1 -0
- package/lib/components/DropdownList/propTypes.js +42 -0
- package/lib/components/DropdownList/schema.d.ts.map +1 -1
- package/lib/components/DropdownList/schema.js +5 -0
- package/lib/components/DropdownList/types.d.ts +4 -1
- package/lib/components/DropdownList/types.d.ts.map +1 -1
- package/lib/components/Filter/IconWrapper/index.d.ts +197 -0
- package/lib/components/Filter/IconWrapper/index.d.ts.map +1 -0
- package/lib/components/Filter/IconWrapper/index.js +35 -0
- package/lib/components/Filter/SimplePrimary/index.d.ts +31 -0
- package/lib/components/Filter/SimplePrimary/index.d.ts.map +1 -0
- package/lib/components/Filter/SimplePrimary/index.js +58 -0
- package/lib/components/Filter/SimplePrimary/index.test.js +34 -0
- package/lib/components/Filter/StyledFilter.d.ts +4 -0
- package/lib/components/Filter/StyledFilter.d.ts.map +1 -0
- package/lib/components/Filter/StyledFilter.js +39 -0
- package/lib/components/Filter/StyledLabel/index.d.ts +8 -0
- package/lib/components/Filter/StyledLabel/index.d.ts.map +1 -0
- package/lib/components/Filter/StyledLabel/index.js +30 -0
- package/lib/components/Filter/index.d.ts +27 -0
- package/lib/components/Filter/index.d.ts.map +1 -0
- package/lib/components/Filter/index.js +95 -0
- package/lib/components/Filter/index.test.js +41 -0
- package/lib/components/Filter/kind.d.ts +6 -0
- package/lib/components/Filter/kind.d.ts.map +1 -0
- package/lib/components/Filter/kind.js +45 -0
- package/lib/components/Filter/schema.d.ts +9 -0
- package/lib/components/Filter/schema.d.ts.map +1 -0
- package/lib/components/Filter/schema.js +32 -0
- package/lib/components/Filter/types.d.ts +17 -0
- package/lib/components/Filter/types.d.ts.map +1 -0
- package/lib/components/Filter/types.js +1 -0
- package/lib/components/LeftNav/Item/ClickArea.d.ts.map +1 -1
- package/lib/components/LeftNav/Item/ClickArea.js +2 -2
- package/lib/components/LeftNav/Item/ItemWrapper.d.ts.map +1 -1
- package/lib/components/LeftNav/Item/ItemWrapper.js +3 -3
- package/lib/components/LeftNav/Item/MenuItemWrapper.d.ts +7 -0
- package/lib/components/LeftNav/Item/MenuItemWrapper.d.ts.map +1 -0
- package/lib/components/LeftNav/Item/MenuItemWrapper.js +20 -0
- package/lib/components/LeftNav/Item/NavCollapsedXItem/index.d.ts.map +1 -1
- package/lib/components/LeftNav/Item/NavCollapsedXItem/index.js +7 -5
- package/lib/components/LeftNav/Item/NavExpandedItem/index.d.ts.map +1 -1
- package/lib/components/LeftNav/Item/NavExpandedItem/index.js +24 -13
- package/lib/components/LeftNav/Item/types.d.ts +1 -1
- package/lib/components/LeftNav/Item/types.d.ts.map +1 -1
- package/lib/components/LeftNav/index.test.js +13 -3
- package/lib/components/LeftNav/schema.d.ts.map +1 -1
- package/lib/components/LeftNav/schema.js +2 -0
- package/lib/components/LeftNav/types.d.ts +1 -0
- package/lib/components/LeftNav/types.d.ts.map +1 -1
- package/lib/components/Menu/index.d.ts.map +1 -1
- package/lib/components/Menu/index.js +3 -1
- package/lib/components/Menu/types.d.ts +2 -0
- package/lib/components/Menu/types.d.ts.map +1 -1
- package/lib/components/Modal/components.d.ts +2 -2
- package/lib/components/Modal/index.d.ts.map +1 -1
- package/lib/components/Modal/index.js +5 -5
- package/lib/components/Modal/index.test.js +32 -0
- package/lib/components/Modal/schema.d.ts.map +1 -1
- package/lib/components/Modal/schema.js +2 -2
- package/lib/components/Modal/types.d.ts +2 -2
- package/lib/components/Modal/types.d.ts.map +1 -1
- package/lib/components/Notifications/Notification/components.d.ts +3 -3
- package/lib/components/Notifications/Notification/components.d.ts.map +1 -1
- package/lib/components/Notifications/Notification/components.js +12 -6
- package/lib/components/Notifications/Notification/index.d.ts +3 -6
- package/lib/components/Notifications/Notification/index.d.ts.map +1 -1
- package/lib/components/Notifications/Notification/index.js +19 -12
- package/lib/components/Notifications/Notification/index.test.js +38 -19
- package/lib/components/Notifications/NotificationsPanel/index.d.ts +2 -1
- package/lib/components/Notifications/NotificationsPanel/index.d.ts.map +1 -1
- package/lib/components/Notifications/NotificationsPanel/index.js +44 -21
- package/lib/components/Notifications/NotificationsPanel/schema.js +1 -1
- package/lib/components/Notifications/Notifier.test.js +79 -10
- package/lib/components/Notifications/constants.d.ts +2 -0
- package/lib/components/Notifications/constants.d.ts.map +1 -0
- package/lib/components/Notifications/constants.js +16 -0
- package/lib/components/Notifications/schema.d.ts.map +1 -1
- package/lib/components/Notifications/schema.js +2 -1
- package/lib/components/Notifications/useNotifications.d.ts +1 -0
- package/lib/components/Notifications/useNotifications.d.ts.map +1 -1
- package/lib/components/Notifications/useNotifications.js +3 -3
- package/lib/components/Notifications/useNotifications.test.js +7 -4
- package/lib/components/Pagination/Pagination.d.ts +1 -1
- package/lib/components/Pagination/Pagination.d.ts.map +1 -1
- package/lib/components/Pagination/Pagination.js +1 -0
- package/lib/components/Pagination/Pagination.test.js +9 -0
- package/lib/components/Popover/utils.d.ts +1 -1
- package/lib/components/Select/Target.js +1 -1
- package/lib/components/Select/index.d.ts.map +1 -1
- package/lib/components/Select/index.js +20 -1
- package/lib/components/Select/index.test.js +31 -9
- package/lib/components/Select/schema.d.ts.map +1 -1
- package/lib/components/Select/schema.js +5 -0
- package/lib/components/Select/types.d.ts +2 -1
- package/lib/components/Select/types.d.ts.map +1 -1
- package/lib/components/SelectDate/Target.js +1 -1
- package/lib/components/SelectDate/index.test.js +71 -51
- package/lib/components/SelectDateRange/index.test.js +78 -58
- package/lib/components/SelectMenu/index.d.ts +5 -0
- package/lib/components/SelectMenu/index.d.ts.map +1 -1
- package/lib/components/SelectMenu/index.js +27 -3
- package/lib/components/SelectMenu/schema.d.ts.map +1 -1
- package/lib/components/SelectMenu/schema.js +4 -0
- package/lib/components/Table/Body.d.ts.map +1 -1
- package/lib/components/Table/Body.js +182 -38
- package/lib/components/Table/Container.d.ts.map +1 -1
- package/lib/components/Table/Container.js +2 -2
- package/lib/components/Table/DataRow.d.ts.map +1 -1
- package/lib/components/Table/DataRow.js +43 -16
- package/lib/components/Table/DraggableWrapper.d.ts +5 -0
- package/lib/components/Table/DraggableWrapper.d.ts.map +1 -0
- package/lib/components/Table/DraggableWrapper.js +38 -0
- package/lib/components/Table/Grip.d.ts +4 -0
- package/lib/components/Table/Grip.d.ts.map +1 -0
- package/lib/components/Table/Grip.js +30 -0
- package/lib/components/Table/Head.d.ts +1 -1
- package/lib/components/Table/Head.d.ts.map +1 -1
- package/lib/components/Table/Head.js +11 -5
- package/lib/components/Table/HeaderCell/index.d.ts.map +1 -1
- package/lib/components/Table/HeaderCell/index.js +22 -8
- package/lib/components/Table/HeaderCell/types.d.ts +6 -1
- package/lib/components/Table/HeaderCell/types.d.ts.map +1 -1
- package/lib/components/Table/Provider.d.ts +13 -4
- package/lib/components/Table/Provider.d.ts.map +1 -1
- package/lib/components/Table/Provider.js +45 -5
- package/lib/components/Table/index.d.ts.map +1 -1
- package/lib/components/Table/index.js +112 -18
- package/lib/components/Table/index.test.js +330 -84
- package/lib/components/Table/schema.columns.d.ts.map +1 -1
- package/lib/components/Table/schema.columns.js +6 -4
- package/lib/components/Table/schema.d.ts.map +1 -1
- package/lib/components/Table/schema.js +8 -6
- package/lib/components/Table/types.d.ts +34 -4
- package/lib/components/Table/types.d.ts.map +1 -1
- package/lib/components/Table/utils.d.ts +2 -8
- package/lib/components/Table/utils.d.ts.map +1 -1
- package/lib/components/Table/utils.js +21 -20
- package/lib/components/Tag/types.d.ts +1 -1
- package/lib/components/Tag/types.d.ts.map +1 -1
- package/lib/components/TextArea/TextArea.d.ts.map +1 -1
- package/lib/components/TextArea/TextArea.js +1 -1
- package/lib/components/TextArea/index.js +1 -0
- package/lib/components/TextArea/index.test.js +5 -0
- package/lib/components/TextField/Input.js +1 -1
- package/lib/components/TextField/index.test.js +5 -0
- package/lib/components/Toggle/index.d.ts.map +1 -1
- package/lib/components/Toggle/index.js +4 -0
- package/lib/components/Toggle/index.test.js +39 -10
- package/lib/components/TopNav/BrandInfo/index.d.ts +2 -1
- package/lib/components/TopNav/BrandInfo/index.d.ts.map +1 -1
- package/lib/components/TopNav/BrandInfo/index.js +9 -1
- package/lib/components/TopNav/BrandInfo/schema.d.ts.map +1 -1
- package/lib/components/TopNav/BrandInfo/schema.js +4 -1
- package/lib/components/TopNav/index.test.js +28 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/index.js +9 -0
- package/lib/providers/ConfigProvider/index.d.ts.map +1 -1
- package/lib/providers/ConfigProvider/index.js +5 -1
- package/lib/providers/ConfigProvider/utils/context.d.ts +1 -1
- package/lib/providers/ConfigProvider/utils/context.d.ts.map +1 -1
- package/lib/providers/ConfigProvider/utils/normalizer.d.ts.map +1 -1
- package/lib/providers/ConfigProvider/utils/normalizer.js +1 -1
- package/lib/providers/ConfigProvider/utils/translations.d.ts +1 -1
- package/lib/providers/ConfigProvider/utils/translations.js +1 -1
- package/lib/providers/NotificationsProvider/index.d.ts +6 -5
- package/lib/providers/NotificationsProvider/index.d.ts.map +1 -1
- package/lib/providers/NotificationsProvider/index.js +47 -28
- package/lib/providers/NotificationsProvider/types.d.ts +4 -1
- package/lib/providers/NotificationsProvider/types.d.ts.map +1 -1
- package/lib/utils/joinClassnames.d.ts +3 -0
- package/lib/utils/joinClassnames.d.ts.map +1 -0
- package/lib/utils/joinClassnames.js +26 -0
- package/package.json +4 -2
- package/lib/atoms/InputField/RequiredIcon.d.ts +0 -4
- package/lib/atoms/InputField/RequiredIcon.d.ts.map +0 -1
|
@@ -11,8 +11,14 @@ var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
|
|
|
11
11
|
|
|
12
12
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
13
13
|
|
|
14
|
+
var _union = _interopRequireDefault(require("lodash/union"));
|
|
15
|
+
|
|
16
|
+
var _isArray = _interopRequireDefault(require("lodash/isArray"));
|
|
17
|
+
|
|
14
18
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
15
19
|
|
|
20
|
+
var _last = _interopRequireDefault(require("lodash/last"));
|
|
21
|
+
|
|
16
22
|
var _rem = _interopRequireDefault(require("polished/lib/helpers/rem"));
|
|
17
23
|
|
|
18
24
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -25,6 +31,8 @@ var _Question = _interopRequireDefault(require("@decisiv/iconix/lib/components/Q
|
|
|
25
31
|
|
|
26
32
|
var _composeReactRefs = _interopRequireDefault(require("@seznam/compose-react-refs"));
|
|
27
33
|
|
|
34
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
35
|
+
|
|
28
36
|
var _InputField = _interopRequireDefault(require("../../atoms/InputField"));
|
|
29
37
|
|
|
30
38
|
var _useClickOutside = _interopRequireDefault(require("../../utils/useClickOutside"));
|
|
@@ -49,12 +57,16 @@ var _schema = _interopRequireDefault(require("./schema"));
|
|
|
49
57
|
|
|
50
58
|
var _utils = require("./utils");
|
|
51
59
|
|
|
60
|
+
var _usePrevious = _interopRequireDefault(require("../../utils/usePrevious"));
|
|
61
|
+
|
|
52
62
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
|
53
63
|
|
|
54
64
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
55
65
|
|
|
56
66
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
57
67
|
|
|
68
|
+
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
69
|
+
|
|
58
70
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
|
|
59
71
|
|
|
60
72
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
|
|
@@ -71,6 +83,14 @@ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d =
|
|
|
71
83
|
|
|
72
84
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
73
85
|
|
|
86
|
+
var StyledInputDiv = _styledComponents.default.div.withConfig({
|
|
87
|
+
displayName: "Combobox__StyledInputDiv",
|
|
88
|
+
componentId: "zvfxxj-0"
|
|
89
|
+
})(["position:relative;width:100%;max-width:", ";"], function (_ref) {
|
|
90
|
+
var maxWidth = _ref.maxWidth;
|
|
91
|
+
return maxWidth;
|
|
92
|
+
});
|
|
93
|
+
|
|
74
94
|
function Combobox(props, ref) {
|
|
75
95
|
var clearButtonLabel = props.clearButtonLabel,
|
|
76
96
|
defaultValue = props.defaultValue,
|
|
@@ -78,17 +98,22 @@ function Combobox(props, ref) {
|
|
|
78
98
|
inputContainerRef = props.inputContainerRef,
|
|
79
99
|
label = props.label,
|
|
80
100
|
loading = props.loading,
|
|
101
|
+
_props$maxWidth = props.maxWidth,
|
|
102
|
+
maxWidth = _props$maxWidth === void 0 ? '100%' : _props$maxWidth,
|
|
103
|
+
multiple = props.multiple,
|
|
81
104
|
name = props.name,
|
|
82
105
|
onChangeValue = props.onChangeValue,
|
|
83
106
|
onClick = props.onClick,
|
|
84
107
|
onFocus = props.onFocus,
|
|
108
|
+
onHide = props.onHide,
|
|
85
109
|
onKeyDown = props.onKeyDown,
|
|
110
|
+
onShow = props.onShow,
|
|
86
111
|
_props$options = props.options,
|
|
87
112
|
options = _props$options === void 0 ? [] : _props$options,
|
|
113
|
+
renderOptionLabel = props.renderOptionLabel,
|
|
88
114
|
propValue = props.value,
|
|
89
115
|
_props$variant = props.variant,
|
|
90
116
|
variant = _props$variant === void 0 ? 'sync' : _props$variant,
|
|
91
|
-
renderOptionLabel = props.renderOptionLabel,
|
|
92
117
|
zIndex = props.zIndex;
|
|
93
118
|
|
|
94
119
|
var _useCombobox = (0, _useCombobox2.default)(props),
|
|
@@ -123,24 +148,77 @@ function Combobox(props, ref) {
|
|
|
123
148
|
var _useState5 = (0, _react.useState)(false),
|
|
124
149
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
125
150
|
isPopoverVisible = _useState6[0],
|
|
126
|
-
|
|
151
|
+
setIsPopoverVisibleState = _useState6[1];
|
|
152
|
+
|
|
153
|
+
var previousIsPopoverVisible = (0, _usePrevious.default)(isPopoverVisible);
|
|
154
|
+
/**
|
|
155
|
+
* Combobox controls the Popover instead of relying on the Popover's internal state.
|
|
156
|
+
* The Popover's onShow/ onHide handlers only function when the Popover is _not_
|
|
157
|
+
* controlled. This effect watches for a toggled visibility state, and calls the appropriate
|
|
158
|
+
* event handler.
|
|
159
|
+
*/
|
|
127
160
|
|
|
128
161
|
(0, _react.useEffect)(function () {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
162
|
+
if (previousIsPopoverVisible && !isPopoverVisible && onHide) {
|
|
163
|
+
onHide();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (!previousIsPopoverVisible && isPopoverVisible && onShow) {
|
|
167
|
+
onShow();
|
|
168
|
+
}
|
|
169
|
+
}, [isPopoverVisible, previousIsPopoverVisible, onShow, onHide]);
|
|
170
|
+
/**
|
|
171
|
+
* Update the dropdown list visibility.
|
|
172
|
+
*/
|
|
173
|
+
|
|
174
|
+
var updateIsPopoverVisible = (0, _react.useCallback)(function (arg) {
|
|
175
|
+
if (arg === true || arg === false) setIsPopoverVisibleState(arg);
|
|
176
|
+
if (arg === 'toggle') setIsPopoverVisibleState(function (old) {
|
|
177
|
+
return !old;
|
|
178
|
+
});
|
|
179
|
+
}, [setIsPopoverVisibleState]);
|
|
180
|
+
/**
|
|
181
|
+
* This generates a flat list of the options (including those in categories)
|
|
182
|
+
* in the order they are presented in the dropdown list. Filtering disabled elements.
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
var flatOptions = (0, _react.useMemo)(function () {
|
|
186
|
+
return options.reduce(function (acc, curr) {
|
|
187
|
+
if ((0, _utils.isCategory)(curr)) {
|
|
188
|
+
var items = (0, _isArray.default)(curr.items) ? curr.items.filter(function (option) {
|
|
189
|
+
return !option.disabled;
|
|
190
|
+
}) : [];
|
|
191
|
+
return acc.concat(items);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (!curr.disabled) {
|
|
195
|
+
return acc.concat(curr);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return acc;
|
|
199
|
+
}, []);
|
|
200
|
+
}, [options]);
|
|
201
|
+
(0, _react.useEffect)(function () {
|
|
202
|
+
// Set the "default" active ID to the first in flatOptions, if it exists.
|
|
203
|
+
if (!(0, _isEmpty.default)(flatOptions) && !activeId) {
|
|
204
|
+
setActiveId((0, _get.default)(flatOptions, '0.id'));
|
|
132
205
|
} // For async comboboxes, if the input is focused, the dropdown should be open.
|
|
133
206
|
|
|
134
207
|
|
|
135
|
-
if (isFocused && variant === 'async') {
|
|
136
|
-
|
|
208
|
+
if (isFocused && variant === 'async' || multiple && internalInputValue !== '') {
|
|
209
|
+
updateIsPopoverVisible(true);
|
|
137
210
|
}
|
|
138
|
-
}, [activeId, isFocused,
|
|
211
|
+
}, [activeId, isFocused, flatOptions, variant, multiple, internalInputValue, updateIsPopoverVisible]); // The selectedValue is the id of the selectedOption, or an empty string if none selected.
|
|
139
212
|
|
|
140
|
-
var _useState7 = (0, _react.useState)(propValue || defaultValue || undefined),
|
|
213
|
+
var _useState7 = (0, _react.useState)(!Array.isArray(propValue) && propValue || !Array.isArray(defaultValue) && defaultValue || undefined),
|
|
141
214
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
142
215
|
selectedValue = _useState8[0],
|
|
143
216
|
setSelectedValue = _useState8[1];
|
|
217
|
+
|
|
218
|
+
var _useState9 = (0, _react.useState)(Array.isArray(propValue) && propValue || undefined),
|
|
219
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
220
|
+
selectedValues = _useState10[0],
|
|
221
|
+
setSelectedValues = _useState10[1];
|
|
144
222
|
/**
|
|
145
223
|
* The current selected value and current input value are saved independently,
|
|
146
224
|
* but must be kept in sync. Using a single callback for this keeps it simple(r).
|
|
@@ -149,13 +227,51 @@ function Combobox(props, ref) {
|
|
|
149
227
|
|
|
150
228
|
var updateSelected = (0, _react.useCallback)(function (selectedId) {
|
|
151
229
|
setSelectedValue(selectedId);
|
|
152
|
-
var newSelected = (0, _utils.getOptionFromOptions)(options, selectedId) ||
|
|
153
|
-
|
|
230
|
+
var newSelected = (0, _utils.getOptionFromOptions)(options, selectedId) || null;
|
|
231
|
+
|
|
232
|
+
if (multiple) {
|
|
233
|
+
var index = selectedValues && selectedValues.findIndex(function (_ref2) {
|
|
234
|
+
var itemId = _ref2.id;
|
|
235
|
+
return itemId === selectedId;
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
if (newSelected && (index === undefined || index === -1)) {
|
|
239
|
+
setSelectedValues((0, _union.default)(selectedValues, [newSelected]));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
setInternalInputValue('');
|
|
243
|
+
setActiveId(undefined);
|
|
244
|
+
} else {
|
|
245
|
+
setInternalInputValue((0, _get.default)(newSelected, 'label', ''));
|
|
246
|
+
}
|
|
154
247
|
|
|
155
248
|
if (onChangeValue) {
|
|
156
|
-
|
|
249
|
+
if (selectedId) {
|
|
250
|
+
onChangeValue(selectedId, {
|
|
251
|
+
removed: false
|
|
252
|
+
});
|
|
253
|
+
} else {
|
|
254
|
+
onChangeValue(null, {
|
|
255
|
+
removed: true
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}, [multiple, onChangeValue, options, selectedValues, setInternalInputValue, setSelectedValue, setSelectedValues, setActiveId]);
|
|
260
|
+
var removeSelected = (0, _react.useCallback)(function (selectedId) {
|
|
261
|
+
var newSelectedValues = selectedValues && selectedValues.filter(function (_ref3) {
|
|
262
|
+
var optionId = _ref3.id;
|
|
263
|
+
return selectedId !== optionId;
|
|
264
|
+
});
|
|
265
|
+
setSelectedValues(newSelectedValues);
|
|
266
|
+
|
|
267
|
+
if (onChangeValue) {
|
|
268
|
+
onChangeValue(selectedId, {
|
|
269
|
+
removed: true
|
|
270
|
+
});
|
|
157
271
|
}
|
|
158
|
-
|
|
272
|
+
|
|
273
|
+
return undefined;
|
|
274
|
+
}, [onChangeValue, selectedValues, setSelectedValues]);
|
|
159
275
|
/**
|
|
160
276
|
* If the value prop changes, it should always override any locally maintained current values.
|
|
161
277
|
* This allows the component to be controlled.
|
|
@@ -166,15 +282,10 @@ function Combobox(props, ref) {
|
|
|
166
282
|
setSelectedValue(propValue);
|
|
167
283
|
var newSelected = (0, _utils.getOptionFromOptions)(options, propValue) || {};
|
|
168
284
|
setInternalInputValue((0, _get.default)(newSelected, 'label', ''));
|
|
285
|
+
} else if (_typeof(propValue) === 'object' && propValue !== selectedValues) {
|
|
286
|
+
setSelectedValues(propValue);
|
|
169
287
|
}
|
|
170
|
-
}, [options, propValue, selectedValue, setInternalInputValue, updateSelected]);
|
|
171
|
-
/**
|
|
172
|
-
* Toggle the dropdown list.
|
|
173
|
-
*/
|
|
174
|
-
|
|
175
|
-
var toggleIsPopoverVisible = (0, _react.useCallback)(function () {
|
|
176
|
-
setIsPopoverVisible(!isPopoverVisible);
|
|
177
|
-
}, [isPopoverVisible]);
|
|
288
|
+
}, [options, propValue, selectedValue, selectedValues, setInternalInputValue, updateSelected]);
|
|
178
289
|
/**
|
|
179
290
|
* This handler is called when the "active" item is changed in the DropdownList. That could be
|
|
180
291
|
* when the user hovers over a new item with the mouse, or when the user navigates through
|
|
@@ -190,8 +301,13 @@ function Combobox(props, ref) {
|
|
|
190
301
|
*/
|
|
191
302
|
|
|
192
303
|
var handleChangeDropdownListValue = (0, _react.useCallback)(function (selectedIds) {
|
|
304
|
+
if (multiple) {
|
|
305
|
+
updateSelected((0, _last.default)(selectedIds));
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
|
|
193
309
|
updateSelected(selectedIds[0]);
|
|
194
|
-
}, [updateSelected]);
|
|
310
|
+
}, [updateSelected, multiple]);
|
|
195
311
|
/**
|
|
196
312
|
* Clicking anywhere within the Combobox component (except the clear button) should open
|
|
197
313
|
* the dropdown list. There is some complex logic here because of the <input> rendered inside
|
|
@@ -211,7 +327,7 @@ function Combobox(props, ref) {
|
|
|
211
327
|
* tree. Clicking an item in the list will call this click handler on the container.
|
|
212
328
|
* Usually that's fine. In this case, we don't want that behavior.
|
|
213
329
|
*/
|
|
214
|
-
|
|
330
|
+
updateIsPopoverVisible(false);
|
|
215
331
|
} else if (isFocused) {
|
|
216
332
|
if (variant === 'sync' && finalComboboxRef && // @ts-ignore
|
|
217
333
|
finalComboboxRef.current === event.target) {
|
|
@@ -227,16 +343,16 @@ function Combobox(props, ref) {
|
|
|
227
343
|
* This re-opens the popover if you first open it,
|
|
228
344
|
* then make a selection, then click the <input> again.
|
|
229
345
|
*/
|
|
230
|
-
|
|
346
|
+
updateIsPopoverVisible(true);
|
|
231
347
|
}
|
|
232
348
|
} else {
|
|
233
|
-
|
|
349
|
+
updateIsPopoverVisible('toggle');
|
|
234
350
|
}
|
|
235
351
|
}
|
|
236
352
|
|
|
237
353
|
onClick && onClick(event);
|
|
238
354
|
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
239
|
-
[isFocused, isPopoverVisible, variant, onClick,
|
|
355
|
+
[isFocused, isPopoverVisible, variant, onClick, updateIsPopoverVisible]);
|
|
240
356
|
/**
|
|
241
357
|
* This focus handler is responsible for opening the dropdown list and tracking focus state.
|
|
242
358
|
* It's important to do this in the focus handler because the dropdown should open when the
|
|
@@ -245,26 +361,12 @@ function Combobox(props, ref) {
|
|
|
245
361
|
|
|
246
362
|
var handleContainerFocus = (0, _react.useCallback)(function (event) {
|
|
247
363
|
if (variant === 'sync') {
|
|
248
|
-
|
|
364
|
+
updateIsPopoverVisible(true);
|
|
249
365
|
}
|
|
250
366
|
|
|
251
367
|
setIsFocused(true);
|
|
252
368
|
onFocus && onFocus(event);
|
|
253
|
-
}, [onFocus,
|
|
254
|
-
/**
|
|
255
|
-
* This generates a flat list of the options (including those in categories)
|
|
256
|
-
* in the order they are presented in the dropdown list.
|
|
257
|
-
*/
|
|
258
|
-
|
|
259
|
-
var flatOptions = (0, _react.useMemo)(function () {
|
|
260
|
-
return options.reduce(function (acc, curr) {
|
|
261
|
-
if ((0, _utils.isCategory)(curr)) {
|
|
262
|
-
return acc.concat(curr.items);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
return acc.concat(curr);
|
|
266
|
-
}, []);
|
|
267
|
-
}, [options]);
|
|
369
|
+
}, [onFocus, updateIsPopoverVisible, variant]);
|
|
268
370
|
/**
|
|
269
371
|
* Pressing certain keys when focused on the Combobox component should trigger some actions.
|
|
270
372
|
*/
|
|
@@ -276,10 +378,10 @@ function Combobox(props, ref) {
|
|
|
276
378
|
event.preventDefault();
|
|
277
379
|
|
|
278
380
|
if (!isPopoverVisible) {
|
|
279
|
-
|
|
381
|
+
updateIsPopoverVisible(true);
|
|
280
382
|
} else {
|
|
281
|
-
var currentIndex = (0, _findIndex.default)(flatOptions, function (
|
|
282
|
-
var optionId =
|
|
383
|
+
var currentIndex = (0, _findIndex.default)(flatOptions, function (_ref4) {
|
|
384
|
+
var optionId = _ref4.id;
|
|
283
385
|
return optionId === activeId;
|
|
284
386
|
});
|
|
285
387
|
|
|
@@ -300,28 +402,28 @@ function Combobox(props, ref) {
|
|
|
300
402
|
}
|
|
301
403
|
|
|
302
404
|
if (event.key === 'Enter' && isPopoverVisible) {
|
|
303
|
-
setIsPopoverVisible(false);
|
|
304
405
|
updateSelected(activeId || '');
|
|
406
|
+
updateIsPopoverVisible(false);
|
|
305
407
|
}
|
|
306
408
|
|
|
307
409
|
if (event.key === 'Escape') {
|
|
308
|
-
|
|
410
|
+
updateIsPopoverVisible(false);
|
|
309
411
|
}
|
|
310
412
|
|
|
311
413
|
if (event.key === 'Tab' && isPopoverVisible) {
|
|
312
|
-
|
|
414
|
+
updateIsPopoverVisible(false);
|
|
313
415
|
}
|
|
314
416
|
|
|
315
417
|
if (onKeyDown) {
|
|
316
418
|
onKeyDown(event);
|
|
317
419
|
}
|
|
318
|
-
}, [activeId, flatOptions, isPopoverVisible, onKeyDown,
|
|
420
|
+
}, [activeId, flatOptions, isPopoverVisible, onKeyDown, updateIsPopoverVisible, updateSelected]); // When the dropdown is visible, clicking anywhere outside of the dropdown should close it.
|
|
319
421
|
|
|
320
422
|
var handleClickOutsideList = (0, _react.useCallback)(function (event) {
|
|
321
423
|
if (isPopoverVisible) {
|
|
322
|
-
|
|
424
|
+
updateIsPopoverVisible(false);
|
|
323
425
|
}
|
|
324
|
-
}, [isPopoverVisible]);
|
|
426
|
+
}, [isPopoverVisible, updateIsPopoverVisible]);
|
|
325
427
|
(0, _useClickOutside.default)([finalComboboxRef, listRef], handleClickOutsideList);
|
|
326
428
|
/**
|
|
327
429
|
* The DropdownList accepts a prop called `PanelComponent` that can be used
|
|
@@ -368,7 +470,12 @@ function Combobox(props, ref) {
|
|
|
368
470
|
|
|
369
471
|
return undefined;
|
|
370
472
|
}, [internalInputValue, loading, options, translate]);
|
|
371
|
-
|
|
473
|
+
var selectedValuesIds = selectedValues ? selectedValues.map(function (elem) {
|
|
474
|
+
return elem.id || '';
|
|
475
|
+
}) : undefined;
|
|
476
|
+
return _react.default.createElement(StyledInputDiv, {
|
|
477
|
+
maxWidth: maxWidth
|
|
478
|
+
}, _react.default.createElement(_InputField.default, _extends({}, getInputFieldProps(), {
|
|
372
479
|
id: inputId,
|
|
373
480
|
inputContainerRef: finalInputContainerRef,
|
|
374
481
|
onBlur: function onBlur() {
|
|
@@ -378,16 +485,18 @@ function Combobox(props, ref) {
|
|
|
378
485
|
onClick: handleContainerClick,
|
|
379
486
|
onKeyDown: handleContainerKeyDown,
|
|
380
487
|
ref: finalComboboxRef
|
|
381
|
-
}), function (
|
|
382
|
-
var ariaLabelledBy =
|
|
383
|
-
disabled =
|
|
384
|
-
targetId =
|
|
385
|
-
onBlurTarget =
|
|
386
|
-
onChangeTargetValue =
|
|
387
|
-
onFocusTarget =
|
|
388
|
-
readOnly =
|
|
389
|
-
targetRef =
|
|
390
|
-
value =
|
|
488
|
+
}), function (_ref5) {
|
|
489
|
+
var ariaLabelledBy = _ref5['aria-labelledby'],
|
|
490
|
+
disabled = _ref5.disabled,
|
|
491
|
+
targetId = _ref5.id,
|
|
492
|
+
onBlurTarget = _ref5.onBlur,
|
|
493
|
+
onChangeTargetValue = _ref5.onChange,
|
|
494
|
+
onFocusTarget = _ref5.onFocus,
|
|
495
|
+
readOnly = _ref5.readOnly,
|
|
496
|
+
targetRef = _ref5.ref,
|
|
497
|
+
value = _ref5.value,
|
|
498
|
+
autoComplete = _ref5.autoComplete,
|
|
499
|
+
type = _ref5.type;
|
|
391
500
|
var dropdownListId = "".concat(targetId, "-dropdown-list");
|
|
392
501
|
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_Target.default, {
|
|
393
502
|
"aria-haspopup": "listbox",
|
|
@@ -400,6 +509,9 @@ function Combobox(props, ref) {
|
|
|
400
509
|
inputFieldLabel: label,
|
|
401
510
|
isPopoverVisible: isPopoverVisible,
|
|
402
511
|
name: name,
|
|
512
|
+
multiple: multiple,
|
|
513
|
+
selectedValues: selectedValues,
|
|
514
|
+
removeSelected: removeSelected,
|
|
403
515
|
onBlur: onBlurTarget,
|
|
404
516
|
onClear: function onClear() {
|
|
405
517
|
onChangeTargetValue();
|
|
@@ -411,7 +523,11 @@ function Combobox(props, ref) {
|
|
|
411
523
|
ref: targetRef,
|
|
412
524
|
value: value,
|
|
413
525
|
variant: variant,
|
|
414
|
-
toggleIsPopoverVisible: toggleIsPopoverVisible
|
|
526
|
+
toggleIsPopoverVisible: function toggleIsPopoverVisible() {
|
|
527
|
+
return updateIsPopoverVisible('toggle');
|
|
528
|
+
},
|
|
529
|
+
autoComplete: autoComplete,
|
|
530
|
+
type: type
|
|
415
531
|
}), _react.default.createElement(_DropdownList.default, {
|
|
416
532
|
PanelComponent: getPanelComponent(),
|
|
417
533
|
activeId: activeId,
|
|
@@ -424,10 +540,12 @@ function Combobox(props, ref) {
|
|
|
424
540
|
listRef: listRef,
|
|
425
541
|
minWidth: "".concat((dimensions.width || 0) + 1, "px"),
|
|
426
542
|
name: "".concat(name, "_dropdown-list"),
|
|
543
|
+
multiple: multiple,
|
|
427
544
|
onChange: handleChangeDropdownListValue,
|
|
428
545
|
onChangeActiveItem: handleChangeDropdownListActiveItem,
|
|
429
|
-
selectedIds: selectedValue || '',
|
|
546
|
+
selectedIds: !multiple ? selectedValue || '' : selectedValuesIds,
|
|
430
547
|
showArrow: false,
|
|
548
|
+
showCheckbox: !multiple,
|
|
431
549
|
target: popoverTargetRef,
|
|
432
550
|
visible: Boolean(isPopoverVisible || loading),
|
|
433
551
|
renderOptionLabel: renderOptionLabel,
|