@ringcentral/juno 1.12.3-beta.5791-ea7a35ca → 1.12.3-beta.5828-dc41552f
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/components/Buttons/Button/Button.d.ts +2 -2
- package/components/Buttons/Button/styles/StyledButton.js +4 -2
- package/components/Card/Card/Card.d.ts +2 -2
- package/components/Chip/Chip.d.ts +10 -3
- package/components/Chip/Chip.js +5 -3
- package/components/Chip/styles/ChipStyle.js +5 -4
- package/components/Chip/utils/ChipUtils.d.ts +1 -1
- package/components/Chip/utils/ChipUtils.js +1 -1
- package/components/Dialer/DialTextField/DialTextField.d.ts +1 -1
- package/components/Downshift/Downshift.d.ts +20 -9
- package/components/Downshift/Downshift.js +15 -5
- package/components/Downshift/SuggestionList/SuggestionList.d.ts +2 -2
- package/components/Downshift/SuggestionList/SuggestionList.js +12 -6
- package/components/Downshift/SuggestionList/utils/index.d.ts +1 -0
- package/components/Downshift/SuggestionList/utils/index.js +1 -0
- package/components/Downshift/SuggestionList/utils/useSuggestionList.d.ts +298 -0
- package/components/Downshift/SuggestionList/utils/useSuggestionList.js +239 -0
- package/components/Downshift/styles/StyledTextField.d.ts +1 -1
- package/components/Downshift/utils/DownshiftUtils.d.ts +12 -0
- package/components/Downshift/utils/DownshiftUtils.js +19 -1
- package/components/Downshift/utils/SelectItem.d.ts +19 -0
- package/components/Downshift/utils/useDownshift.d.ts +5 -2
- package/components/Downshift/utils/useDownshift.interface.d.ts +5 -0
- package/components/Downshift/utils/useDownshift.js +31 -13
- package/components/Downshift/utils/useDownshiftGroup.d.ts +7 -7
- package/components/Downshift/utils/useDownshiftGroup.js +45 -19
- package/components/Forms/Picker/TimePicker/NumberPicker.js +1 -3
- package/components/Forms/Picker/TimePicker/utils/TimePickerHelper.js +1 -1
- package/components/Forms/Picker/styles/StyledPickerTextField.d.ts +1 -1
- package/components/Forms/Select/PlainSelect/PlainSelect.d.ts +1 -1
- package/components/Forms/Select/PlainSelect/PlainSelect.js +5 -4
- package/components/Forms/Select/PlainSelect/styles/StyledSelect.js +4 -3
- package/components/Forms/Select/Select.d.ts +2 -2
- package/components/Forms/Select/Select.js +2 -2
- package/components/Forms/Select/styles/StyledSelect.js +22 -18
- package/components/Forms/TextField/TextField.d.ts +4 -2
- package/components/Forms/TextField/TextField.js +2 -2
- package/components/Forms/TextField/styles/OutlineTextFieldStyle.js +4 -2
- package/components/Forms/TextField/styles/TextFieldStyle.js +8 -4
- package/components/Forms/Textarea/Textarea.d.ts +1 -1
- package/components/Menu/SubMenu/SubMenu.js +1 -1
- package/components/Virtuoso/utils/useHighlightScroll.d.ts +1 -1
- package/es6/components/Buttons/Button/styles/StyledButton.js +4 -2
- package/es6/components/Chip/Chip.js +6 -4
- package/es6/components/Chip/styles/ChipStyle.js +6 -5
- package/es6/components/Chip/utils/ChipUtils.js +1 -1
- package/es6/components/Downshift/Downshift.js +16 -7
- package/es6/components/Downshift/SuggestionList/SuggestionList.js +13 -7
- package/es6/components/Downshift/SuggestionList/utils/index.js +1 -0
- package/es6/components/Downshift/SuggestionList/utils/useSuggestionList.js +237 -0
- package/es6/components/Downshift/utils/DownshiftUtils.js +19 -1
- package/es6/components/Downshift/utils/useDownshift.js +31 -13
- package/es6/components/Downshift/utils/useDownshiftGroup.js +46 -20
- package/es6/components/Forms/Picker/TimePicker/NumberPicker.js +1 -3
- package/es6/components/Forms/Picker/TimePicker/utils/TimePickerHelper.js +1 -1
- package/es6/components/Forms/Select/PlainSelect/PlainSelect.js +5 -4
- package/es6/components/Forms/Select/PlainSelect/styles/StyledSelect.js +4 -3
- package/es6/components/Forms/Select/Select.js +2 -2
- package/es6/components/Forms/Select/styles/StyledSelect.js +24 -20
- package/es6/components/Forms/TextField/TextField.js +2 -2
- package/es6/components/Forms/TextField/styles/OutlineTextFieldStyle.js +5 -3
- package/es6/components/Forms/TextField/styles/TextFieldStyle.js +9 -5
- package/es6/components/Menu/SubMenu/SubMenu.js +1 -1
- package/es6/foundation/hooks/useAnnouncer/useAnnouncer.js +7 -0
- package/es6/foundation/hooks/useKeyboardMoveFocus/useKeyboardMoveFocus.js +2 -1
- package/foundation/hooks/useAnnouncer/useAnnouncer.d.ts +7 -0
- package/foundation/hooks/useAnnouncer/useAnnouncer.js +7 -0
- package/foundation/hooks/useKeyboardMoveFocus/useKeyboardMoveFocus.js +2 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __assign, __makeTemplateObject, __read, __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef, memo, useImperativeHandle, useMemo, useRef, useState, } from 'react';
|
|
3
|
-
import { combineClasses, combineProps, omit, styled, useEventCallback, useForkRef, useThemeProps, withDeprecatedCheck, } from '../../foundation';
|
|
3
|
+
import { combineClasses, combineProps, getParsePaletteColor, omit, styled, useEventCallback, useForkRef, useTheme, useThemeProps, withDeprecatedCheck, } from '../../foundation';
|
|
4
4
|
import ArrowDown from '../../icon/ArrowDown';
|
|
5
5
|
import ArrowUp from '../../icon/ArrowUp';
|
|
6
6
|
import { RcChip } from '../Chip';
|
|
@@ -11,7 +11,8 @@ import { RcSuggestionList } from './SuggestionList';
|
|
|
11
11
|
import { DEFAULT_GET_OPTION_LABEL, DEFAULT_KEY_TO_CHIPS, DEFAULT_LIMIT_CHIPS, RcDownshiftDefaultFilterOptions, RcDownshiftInputClasses, useDownshift, useDownshiftError, } from './utils';
|
|
12
12
|
var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
13
13
|
var props = useThemeProps({ props: inProps, name: 'RcDownshift' });
|
|
14
|
-
var
|
|
14
|
+
var theme = useTheme();
|
|
15
|
+
var _a = props.itemToString, itemToString = _a === void 0 ? DEFAULT_GET_OPTION_LABEL : _a, _b = props.keyToChips, keyToChips = _b === void 0 ? DEFAULT_KEY_TO_CHIPS : _b, _c = props.limitOfFreeChips, limitOfFreeChips = _c === void 0 ? DEFAULT_LIMIT_CHIPS : _c, minRowHeight = props.minRowHeight, suggestionItems = props.suggestionItems, messageRef = props.messageRef, MenuItem = props.MenuItem, inputLabel = props.inputLabel, nameError = props.nameError, maxLength = props.maxLength, InputItem = props.InputItem, emailError = props.emailError, autoSwitchEmail = props.autoSwitchEmail, enableFreeChips = props.enableFreeChips, inputPlaceholder = props.inputPlaceholder, errorSelectedItems = props.errorSelectedItems, enableAutoTransform = props.enableAutoTransform, allowPlainHelperText = props.allowPlainHelperText, TextFieldProps = props.TextFieldProps, selectedItemsProp = props.selectedItems, automationId = props.automationId, screenReader = props.screenReader, onSelectChange = props.onSelectChange, variant = props.variant, groupExpanded = props.groupExpanded, groupDefaultExpanded = props.groupDefaultExpanded, _d = props.groupVariant, groupVariant = _d === void 0 ? 'normal' : _d, getExpandIconProps = props.getExpandIconProps, groupBy = props.groupBy, _e = props.value, valueProp = _e === void 0 ? selectedItemsProp : _e, _f = props.autoHighlight, autoHighlight = _f === void 0 ? true : _f, _g = props.fullWidth, fullWidth = _g === void 0 ? true : _g, _h = props.clearBtn, clearBtn = _h === void 0 ? false : _h, _j = props.toggleButton, toggleButton = _j === void 0 ? false : _j, _k = props.multiple, multiple = _k === void 0 ? false : _k, clearButtonProps = props.clearButtonProps, onClear = props.onClear, ToggleButtonProps = props.ToggleButtonProps, inputValueProp = props.inputValue, onKeyDownProp = props.onKeyDown, helperTextProp = props.helperText, options = props.options, openOnFocus = props.openOnFocus, _l = props.getOptionLabel, getOptionLabel = _l === void 0 ? itemToString : _l, renderInput = props.renderInput, _m = props.label, label = _m === void 0 ? inputLabel : _m, _o = props.inputRef, inputRefProp = _o === void 0 ? messageRef : _o, _p = props.error, error = _p === void 0 ? nameError : _p, _q = props.placeholder, placeholder = _q === void 0 ? inputPlaceholder : _q, _r = props.freeSolo, freeSolo = _r === void 0 ? enableFreeChips : _r, _s = props.keyToTags, keyToTags = _s === void 0 ? keyToChips : _s, _t = props.maxFreeSolo, maxFreeSolo = _t === void 0 ? limitOfFreeChips : _t, SuggestionListProps = props.SuggestionListProps, _u = props.autoSelect, autoSelect = _u === void 0 ? enableAutoTransform : _u, PopperProps = props.PopperProps, initialIsOpen = props.initialIsOpen, disabled = props.disabled, requiredProp = props.required, _v = props.defaultIsOpen, defaultIsOpen = _v === void 0 ? openOnFocus : _v, _w = props.disableCloseOnSelect, disableCloseOnSelect = _w === void 0 ? defaultIsOpen : _w, _x = props.onChange, onChangeProp = _x === void 0 ? onSelectChange : _x, onInputChangeProp = props.onInputChange, onMaxFreeSolo = props.onMaxFreeSolo, FormHelperTextPropsProp = props.FormHelperTextProps, action = props.action, filterOptions = props.filterOptions, renderOption = props.renderOption, renderTags = props.renderTags, getOptionDisabled = props.getOptionDisabled, renderGroup = props.renderGroup, onGroupExpanded = props.onGroupExpanded, renderNoOptions = props.renderNoOptions, InputPropsProp = props.InputProps, debug = props.debug, disabledItemsHighlightable = props.disabledItemsHighlightable, openProp = props.open, onOpen = props.onOpen, onClose = props.onClose, focused = props.focused, color = props.color, rest = __rest(props, ["itemToString", "keyToChips", "limitOfFreeChips", "minRowHeight", "suggestionItems", "messageRef", "MenuItem", "inputLabel", "nameError", "maxLength", "InputItem", "emailError", "autoSwitchEmail", "enableFreeChips", "inputPlaceholder", "errorSelectedItems", "enableAutoTransform", "allowPlainHelperText", "TextFieldProps", "selectedItems", "automationId", "screenReader", "onSelectChange", "variant", "groupExpanded", "groupDefaultExpanded", "groupVariant", "getExpandIconProps", "groupBy", "value", "autoHighlight", "fullWidth", "clearBtn", "toggleButton", "multiple", "clearButtonProps", "onClear", "ToggleButtonProps", "inputValue", "onKeyDown", "helperText", "options", "openOnFocus", "getOptionLabel", "renderInput", "label", "inputRef", "error", "placeholder", "freeSolo", "keyToTags", "maxFreeSolo", "SuggestionListProps", "autoSelect", "PopperProps", "initialIsOpen", "disabled", "required", "defaultIsOpen", "disableCloseOnSelect", "onChange", "onInputChange", "onMaxFreeSolo", "FormHelperTextProps", "action", "filterOptions", "renderOption", "renderTags", "getOptionDisabled", "renderGroup", "onGroupExpanded", "renderNoOptions", "InputProps", "debug", "disabledItemsHighlightable", "open", "onOpen", "onClose", "focused", "color"]);
|
|
15
16
|
var _y = __read(useState('bottom'), 2), position = _y[0], setPosition = _y[1];
|
|
16
17
|
var innerInputRef = useRef(null);
|
|
17
18
|
var textFieldRef = useRef(null);
|
|
@@ -23,6 +24,7 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
23
24
|
useDownshiftError({ isNew: isNew, MenuItem: MenuItem, InputItem: InputItem });
|
|
24
25
|
var required = requiredProp || (TextFieldProps === null || TextFieldProps === void 0 ? void 0 : TextFieldProps.required);
|
|
25
26
|
var _z = useDownshift({
|
|
27
|
+
focused: focused,
|
|
26
28
|
open: openProp,
|
|
27
29
|
variant: variant,
|
|
28
30
|
onOpen: onOpen,
|
|
@@ -34,6 +36,7 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
34
36
|
inputValue: inputValueProp,
|
|
35
37
|
getOptionDisabled: getOptionDisabled,
|
|
36
38
|
groupExpanded: groupVariant === 'normal' ? true : groupExpanded,
|
|
39
|
+
groupDefaultExpanded: groupDefaultExpanded,
|
|
37
40
|
getExpandIconProps: getExpandIconProps,
|
|
38
41
|
options: suggestionItems || options,
|
|
39
42
|
freeSolo: freeSolo,
|
|
@@ -59,7 +62,7 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
59
62
|
onKeyDown: onKeyDownProp,
|
|
60
63
|
disabledItemsHighlightable: disabledItemsHighlightable,
|
|
61
64
|
onGroupExpanded: onGroupExpanded,
|
|
62
|
-
}), focusInput = _z.focusInput, optionItems = _z.optionItems, optionsGroupList = _z.optionsGroupList, selectedItems = _z.selectedItems, highlightedIndex = _z.highlightedIndex, getToggleButtonProps = _z.getToggleButtonProps, getTagProps = _z.getTagProps, getTagListBoxProps = _z.getTagListBoxProps, getMenuProps = _z.getMenuProps, getPopperProps = _z.getPopperProps, getInputProps = _z.getInputProps, getInputAriaProps = _z.getInputAriaProps, getLabelProps = _z.getLabelProps, getItemProps = _z.getItemProps, isOpen = _z.isOpen, inputValue = _z.inputValue, isTagsFocus = _z.isTagsFocus, activeIndex = _z.activeIndex, setActiveIndex = _z.setActiveIndex, setHighlightedIndex = _z.setHighlightedIndex, onInputChange = _z.onInputChange, keepHighlightedIndex = _z.keepHighlightedIndex, changeHighlightedIndexReason = _z.changeHighlightedIndexReason, closeMenu = _z.closeMenu, openMenu = _z.openMenu, reset = _z.reset, getClearButtonProps = _z.getClearButtonProps, noOptionItem = _z.noOptionItem, getNoOptionsProps = _z.getNoOptionsProps, isKeepHighlightedIndex = _z.isKeepHighlightedIndex;
|
|
65
|
+
}), focusInput = _z.focusInput, optionItems = _z.optionItems, optionsGroupList = _z.optionsGroupList, selectedItems = _z.selectedItems, highlightedIndex = _z.highlightedIndex, getToggleButtonProps = _z.getToggleButtonProps, getTagProps = _z.getTagProps, getTagListBoxProps = _z.getTagListBoxProps, getMenuProps = _z.getMenuProps, getPopperProps = _z.getPopperProps, getInputProps = _z.getInputProps, getInputAriaProps = _z.getInputAriaProps, getLabelProps = _z.getLabelProps, getItemProps = _z.getItemProps, isOpen = _z.isOpen, inputValue = _z.inputValue, isTagsFocus = _z.isTagsFocus, activeIndex = _z.activeIndex, setActiveIndex = _z.setActiveIndex, setHighlightedIndex = _z.setHighlightedIndex, onInputChange = _z.onInputChange, keepHighlightedIndex = _z.keepHighlightedIndex, changeHighlightedIndexReason = _z.changeHighlightedIndexReason, closeMenu = _z.closeMenu, openMenu = _z.openMenu, reset = _z.reset, getClearButtonProps = _z.getClearButtonProps, noOptionItem = _z.noOptionItem, getNoOptionsProps = _z.getNoOptionsProps, isKeepHighlightedIndex = _z.isKeepHighlightedIndex, isFocused = _z.isFocused;
|
|
63
66
|
var open = Boolean((isOpen || noOptionItem) && textFieldRef.current);
|
|
64
67
|
var _0 = getInputProps(), onBlur = _0.onBlur, InputProps = __rest(_0, ["onBlur"]);
|
|
65
68
|
var helperText = isNew
|
|
@@ -85,6 +88,7 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
85
88
|
}
|
|
86
89
|
}
|
|
87
90
|
var toTextFieldRef = useForkRef(textFieldRef, ref);
|
|
91
|
+
var colorHex = useMemo(function () { return (color ? getParsePaletteColor(color)({ theme: theme }) : undefined); }, [color, theme]);
|
|
88
92
|
var startAdornment = (function () {
|
|
89
93
|
if (variant === 'autocomplete') {
|
|
90
94
|
return undefined;
|
|
@@ -99,7 +103,7 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
99
103
|
if (selectedItem.error) {
|
|
100
104
|
oneOfTagError = true;
|
|
101
105
|
}
|
|
102
|
-
return tagProps;
|
|
106
|
+
return __assign(__assign({}, tagProps), { color: colorHex });
|
|
103
107
|
};
|
|
104
108
|
return renderTags
|
|
105
109
|
? renderTags(selectedItems, getCustomizedTagProps)
|
|
@@ -120,9 +124,14 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
120
124
|
} })));
|
|
121
125
|
});
|
|
122
126
|
})();
|
|
127
|
+
var isDownshiftFocused = focused !== null && focused !== void 0 ? focused : (isTagsFocus || isFocused ? true : undefined);
|
|
123
128
|
var endAdornment = (toggleButton || clearBtn) && (React.createElement(EndAdornment, null,
|
|
124
129
|
clearBtn && (React.createElement(ClearIconButton, __assign({}, getClearButtonProps(clearButtonProps)))),
|
|
125
|
-
toggleButton && (React.createElement(ArrowDownButton, __assign({ variant: "plain", "aria-hidden": true, color:
|
|
130
|
+
toggleButton && (React.createElement(ArrowDownButton, __assign({ variant: "plain", "aria-hidden": true, color: isDownshiftFocused
|
|
131
|
+
? color || 'interactive.f01'
|
|
132
|
+
: error
|
|
133
|
+
? 'danger.f02'
|
|
134
|
+
: 'neutral.f04', size: "large", symbol: isOpen ? ArrowUp : ArrowDown }, getToggleButtonProps(ToggleButtonProps))))));
|
|
126
135
|
var _1 = (function () {
|
|
127
136
|
var _a = InputPropsProp || {}, classes = _a.classes, restInputPropsProp = __rest(_a, ["classes"]);
|
|
128
137
|
var toClasses = combineClasses(classes, RcDownshiftInputClasses);
|
|
@@ -154,7 +163,7 @@ var _RcDownshift = memo(forwardRef(function (inProps, ref) {
|
|
|
154
163
|
(_a = popperRef.current) === null || _a === void 0 ? void 0 : _a.update();
|
|
155
164
|
});
|
|
156
165
|
return (React.createElement(React.Fragment, null,
|
|
157
|
-
React.createElement(StyledTextField, __assign({ renderInput: renderInput, hasTags: hasTags, ref: toTextFieldRef, inputRef: inputRef, "data-test-automation-id": automationId, fullWidth: fullWidth, placeholder: !hasTags ? placeholder : undefined, label: label, focused:
|
|
166
|
+
React.createElement(StyledTextField, __assign({ renderInput: renderInput, hasTags: hasTags, ref: toTextFieldRef, inputRef: inputRef, "data-test-automation-id": automationId, fullWidth: fullWidth, placeholder: !hasTags ? placeholder : undefined, label: label, focused: isDownshiftFocused, disabled: disabled, required: required, color: color,
|
|
158
167
|
// * if below one of tag is error, that main downshift default will be error
|
|
159
168
|
error: error !== null && error !== void 0 ? error : oneOfTagError, FormHelperTextProps: FormHelperTextProps, InputProps: TextFieldInputProps, helperText: helperText }, combineProps({
|
|
160
169
|
InputLabelProps: getLabelProps(),
|
|
@@ -286,5 +295,5 @@ var RcDownshift = styled(withDeprecatedCheck(_RcDownshift, [
|
|
|
286
295
|
RcDownshift.defaultProps = {};
|
|
287
296
|
RcDownshift.displayName = 'RcDownshift';
|
|
288
297
|
var ExportType = RcDownshift;
|
|
289
|
-
export { ExportType as RcDownshift, RcDownshiftDefaultFilterOptions };
|
|
298
|
+
export { ExportType as RcDownshift, RcDownshiftDefaultFilterOptions, RcDownshiftInput, };
|
|
290
299
|
var templateObject_1;
|
|
@@ -6,7 +6,7 @@ import ArrowDown2 from '../../../icon/ArrowDown2';
|
|
|
6
6
|
import { RcBox } from '../../Box';
|
|
7
7
|
import { RcIconButton } from '../../Buttons/IconButton';
|
|
8
8
|
import { RcMenuItem } from '../../Menu/MenuItem';
|
|
9
|
-
import { StyledMenuListPadding } from '../../VirtualizedMenu/styles';
|
|
9
|
+
import { menuListBoundaryPadding, StyledMenuListPadding, } from '../../VirtualizedMenu/styles';
|
|
10
10
|
import { useDynamicHeight, useHighlightScroll, Virtuoso, } from '../../Virtuoso';
|
|
11
11
|
import { SuggestionListStyle } from './styles';
|
|
12
12
|
import { RcSuggestionListClasses } from './utils';
|
|
@@ -45,8 +45,13 @@ var SuggestionList = forwardRef(function (inProps, ref) {
|
|
|
45
45
|
return __generator(this, function (_c) {
|
|
46
46
|
switch (_c.label) {
|
|
47
47
|
case 0:
|
|
48
|
+
if (location.index === 0 && padding !== undefined) {
|
|
49
|
+
location = __assign(__assign({}, location), { offset: -(typeof padding === 'number'
|
|
50
|
+
? padding
|
|
51
|
+
: menuListBoundaryPadding) });
|
|
52
|
+
}
|
|
48
53
|
(_a = vlRef.current) === null || _a === void 0 ? void 0 : _a.scrollToIndex(location);
|
|
49
|
-
toIndex =
|
|
54
|
+
toIndex = location.index;
|
|
50
55
|
return [4 /*yield*/, sleep(0)];
|
|
51
56
|
case 1:
|
|
52
57
|
_c.sent();
|
|
@@ -139,12 +144,13 @@ var SuggestionList = forwardRef(function (inProps, ref) {
|
|
|
139
144
|
expandIconProps && (React.createElement(RcIconButton, __assign({}, expandIconProps, { symbol: ArrowDown2 })))));
|
|
140
145
|
};
|
|
141
146
|
var PaddingComponent = useMemo(function () {
|
|
142
|
-
|
|
147
|
+
var paddingValue = padding !== undefined && itemCount > 0
|
|
143
148
|
? typeof padding === 'number'
|
|
144
|
-
?
|
|
145
|
-
:
|
|
146
|
-
:
|
|
147
|
-
|
|
149
|
+
? padding
|
|
150
|
+
: menuListBoundaryPadding
|
|
151
|
+
: 0;
|
|
152
|
+
return function () { return React.createElement(StyledMenuListPadding, { height: paddingValue }); };
|
|
153
|
+
}, [itemCount, padding]);
|
|
148
154
|
var components = useMemo(function () {
|
|
149
155
|
return __assign({ List: List, Header: PaddingComponent, Footer: PaddingComponent }, componentsProp);
|
|
150
156
|
}, [componentsProp, PaddingComponent]);
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { __read, __rest } from "tslib";
|
|
2
|
+
import { useMemo, useRef } from 'react';
|
|
3
|
+
import uniqueId from 'lodash/uniqueId';
|
|
4
|
+
import { useControlled } from '@material-ui/core/utils';
|
|
5
|
+
import { combineProps, useForceUpdate, useKeyboardMoveFocus, useResultRef, } from '../../../../foundation';
|
|
6
|
+
import { DEFAULT_GET_OPTION_LABEL, isItemCanSelected, } from '../../utils';
|
|
7
|
+
import { useDownshiftGroup } from '../../utils/useDownshiftGroup';
|
|
8
|
+
var DEFAULT_HIGHLIGHTED_INDEX = -1;
|
|
9
|
+
var componentName = 'useSuggestionList';
|
|
10
|
+
/**
|
|
11
|
+
* provide suggestion list with search function and expandable group with virtualized list
|
|
12
|
+
*/
|
|
13
|
+
export var useSuggestionList = function (_a) {
|
|
14
|
+
var inputValueProp = _a.inputValue, _b = _a.getOptionLabel, getOptionLabel = _b === void 0 ? DEFAULT_GET_OPTION_LABEL : _b, filterOptions = _a.filterOptions, disabledItemsHighlightable = _a.disabledItemsHighlightable, options = _a.options, onInputChangeProp = _a.onInputChange, inputRef = _a.inputRef, onKeyDownProp = _a.onKeyDown, onSelect = _a.onSelect, onClear = _a.onClear, getOptionDisabled = _a.getOptionDisabled, groupBy = _a.groupBy, onGroupExpanded = _a.onGroupExpanded, groupVariant = _a.groupVariant, groupExpanded = _a.groupExpanded, groupDefaultExpanded = _a.groupDefaultExpanded, getExpandIconProps = _a.getExpandIconProps;
|
|
15
|
+
var _c = __read(useControlled({
|
|
16
|
+
controlled: inputValueProp,
|
|
17
|
+
default: '',
|
|
18
|
+
name: componentName,
|
|
19
|
+
}), 2), inputValue = _c[0], setInputValue = _c[1];
|
|
20
|
+
var updateInputValue = function (newValue) {
|
|
21
|
+
onInputChangeProp === null || onInputChangeProp === void 0 ? void 0 : onInputChangeProp(newValue);
|
|
22
|
+
setInputValue(newValue);
|
|
23
|
+
};
|
|
24
|
+
var focusInput = function () { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); };
|
|
25
|
+
var suggestionListId = useResultRef(function () {
|
|
26
|
+
return uniqueId("suggestion-list-");
|
|
27
|
+
}).current;
|
|
28
|
+
// * use -2 for us know that is init state, for recalculate defaultHighlightedIndex
|
|
29
|
+
var highlightedIndexRef = useRef(DEFAULT_HIGHLIGHTED_INDEX);
|
|
30
|
+
var changeHighlightedIndexReason = useRef();
|
|
31
|
+
var forceUpdate = useForceUpdate();
|
|
32
|
+
var filteredResult = useMemo(function () {
|
|
33
|
+
var getFilteredItems = function (items) {
|
|
34
|
+
if (filterOptions) {
|
|
35
|
+
return filterOptions(items, {
|
|
36
|
+
inputValue: inputValue,
|
|
37
|
+
getOptionLabel: getOptionLabel,
|
|
38
|
+
selectedItems: [],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return items;
|
|
42
|
+
};
|
|
43
|
+
// * only when isOpen calculate the filtered result
|
|
44
|
+
var results = getFilteredItems(options);
|
|
45
|
+
return results;
|
|
46
|
+
}, [filterOptions, getOptionLabel, inputValue, options]);
|
|
47
|
+
var _d = useDownshiftGroup({
|
|
48
|
+
groupBy: groupBy,
|
|
49
|
+
options: options,
|
|
50
|
+
filteredResult: filteredResult,
|
|
51
|
+
getExpandIconProps: getExpandIconProps,
|
|
52
|
+
groupExpanded: groupExpanded,
|
|
53
|
+
groupDefaultExpanded: groupDefaultExpanded,
|
|
54
|
+
onGroupExpanded: onGroupExpanded,
|
|
55
|
+
groupVariant: groupVariant,
|
|
56
|
+
getOptionDisabled: getOptionDisabled,
|
|
57
|
+
id: suggestionListId,
|
|
58
|
+
}), groupedResult = _d.groupedResult, handleGroupExpandedChange = _d.handleGroupExpandedChange, optionsGroupList = _d.optionsGroupList;
|
|
59
|
+
var optionItems = groupBy ? groupedResult : filteredResult;
|
|
60
|
+
var setHighlightedIndex = function (index, _a) {
|
|
61
|
+
var _b = _a.reRender, reRender = _b === void 0 ? false : _b, reason = _a.reason;
|
|
62
|
+
changeHighlightedIndexReason.current = reason;
|
|
63
|
+
if (highlightedIndexRef.current !== index) {
|
|
64
|
+
highlightedIndexRef.current = index;
|
|
65
|
+
if (reRender)
|
|
66
|
+
forceUpdate();
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
var handleInputChange = function (newValue) {
|
|
70
|
+
if (inputValue !== newValue) {
|
|
71
|
+
setHighlightedIndex(DEFAULT_HIGHLIGHTED_INDEX, { reason: 'auto' });
|
|
72
|
+
updateInputValue(newValue);
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
};
|
|
76
|
+
var getIsItemCanSelected = function (item) {
|
|
77
|
+
return ((!!item && item.freeSolo) ||
|
|
78
|
+
(isItemCanSelected(item) && !(getOptionDisabled === null || getOptionDisabled === void 0 ? void 0 : getOptionDisabled(item))));
|
|
79
|
+
};
|
|
80
|
+
var selectItemFn = function (e, selectedItem) {
|
|
81
|
+
if (getIsItemCanSelected(selectedItem)) {
|
|
82
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(e, selectedItem);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
};
|
|
87
|
+
var resetState = function () {
|
|
88
|
+
if (inputRef.current && inputRef.current.value.length > 0) {
|
|
89
|
+
updateInputValue('');
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
var reset = function (isFocus) {
|
|
93
|
+
resetState();
|
|
94
|
+
onInputChangeProp === null || onInputChangeProp === void 0 ? void 0 : onInputChangeProp('');
|
|
95
|
+
if (isFocus)
|
|
96
|
+
focusInput();
|
|
97
|
+
};
|
|
98
|
+
var onKeyFocusedIndexHandle = useKeyboardMoveFocus({
|
|
99
|
+
options: optionItems,
|
|
100
|
+
focusedIndexRef: highlightedIndexRef,
|
|
101
|
+
infinite: true,
|
|
102
|
+
onFocusedIndexChange: function (event, toIndex) {
|
|
103
|
+
setHighlightedIndex(toIndex, { reason: 'keyboard', reRender: true });
|
|
104
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
105
|
+
},
|
|
106
|
+
getOptionDisabled: disabledItemsHighlightable
|
|
107
|
+
? undefined
|
|
108
|
+
: function (child) {
|
|
109
|
+
return !getIsItemCanSelected(child);
|
|
110
|
+
},
|
|
111
|
+
}).onKeyFocusedIndexHandle;
|
|
112
|
+
var getItemProps = function (_a) {
|
|
113
|
+
var item = _a.item, index = _a.index, itemRest = __rest(_a, ["item", "index"]);
|
|
114
|
+
return combineProps({
|
|
115
|
+
id: suggestionListId + "-option-" + index,
|
|
116
|
+
role: 'option',
|
|
117
|
+
onClick: function (e) {
|
|
118
|
+
selectItemFn(e, item);
|
|
119
|
+
},
|
|
120
|
+
onMouseDown: function (e) {
|
|
121
|
+
e.preventDefault();
|
|
122
|
+
e.stopPropagation();
|
|
123
|
+
},
|
|
124
|
+
onMouseOver: function () {
|
|
125
|
+
if (highlightedIndexRef.current !== index) {
|
|
126
|
+
setHighlightedIndex(index, { reason: 'mouse', reRender: true });
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
}, itemRest);
|
|
130
|
+
};
|
|
131
|
+
var getInputProps = function (props) {
|
|
132
|
+
return combineProps({
|
|
133
|
+
id: suggestionListId + "-input",
|
|
134
|
+
autoComplete: 'off',
|
|
135
|
+
onChange: function (e) {
|
|
136
|
+
var changeValue = e.target.value;
|
|
137
|
+
handleInputChange(changeValue);
|
|
138
|
+
},
|
|
139
|
+
onKeyDown: function (e) {
|
|
140
|
+
var _a;
|
|
141
|
+
onKeyDownProp === null || onKeyDownProp === void 0 ? void 0 : onKeyDownProp(e, highlightedIndexRef.current);
|
|
142
|
+
var highlightedIndex = highlightedIndexRef.current;
|
|
143
|
+
switch (e.key) {
|
|
144
|
+
case 'F10':
|
|
145
|
+
if (e.shiftKey) {
|
|
146
|
+
var currOption = optionItems[highlightedIndex];
|
|
147
|
+
var currentGroup = currOption.group;
|
|
148
|
+
if (currentGroup && currentGroup.options.length > 1) {
|
|
149
|
+
handleGroupExpandedChange(currentGroup.group);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
case 'Enter':
|
|
154
|
+
if (e.which === 229)
|
|
155
|
+
return;
|
|
156
|
+
if (highlightedIndex !== DEFAULT_HIGHLIGHTED_INDEX) {
|
|
157
|
+
var currOption = optionItems[highlightedIndex];
|
|
158
|
+
var isGroupTitle = currOption === ((_a = currOption.group) === null || _a === void 0 ? void 0 : _a.options[0]);
|
|
159
|
+
if (isGroupTitle) {
|
|
160
|
+
var onClick = currOption.group.getExpandIconProps().onClick;
|
|
161
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
selectItemFn(e, currOption);
|
|
165
|
+
}
|
|
166
|
+
e.stopPropagation();
|
|
167
|
+
}
|
|
168
|
+
// always preventDefault for not inset all enter into textarea
|
|
169
|
+
e.preventDefault();
|
|
170
|
+
break;
|
|
171
|
+
default:
|
|
172
|
+
onKeyFocusedIndexHandle(e);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
}, props);
|
|
177
|
+
};
|
|
178
|
+
var getInputAriaProps = function (props) {
|
|
179
|
+
return combineProps({
|
|
180
|
+
// * provide for when container click focus on input
|
|
181
|
+
onContainerClick: focusInput,
|
|
182
|
+
role: 'combobox',
|
|
183
|
+
'aria-autocomplete': 'list',
|
|
184
|
+
// TODO
|
|
185
|
+
'aria-expanded': true,
|
|
186
|
+
'aria-haspopup': true,
|
|
187
|
+
'aria-owns': suggestionListId + "-menu",
|
|
188
|
+
'aria-activedescendant': highlightedIndexRef.current > -1
|
|
189
|
+
? suggestionListId + "-option-" + highlightedIndexRef.current
|
|
190
|
+
: undefined,
|
|
191
|
+
}, props);
|
|
192
|
+
};
|
|
193
|
+
var getLabelProps = function (props) {
|
|
194
|
+
return combineProps({
|
|
195
|
+
htmlFor: suggestionListId + "-input",
|
|
196
|
+
id: suggestionListId + "-label",
|
|
197
|
+
}, props);
|
|
198
|
+
};
|
|
199
|
+
var getMenuProps = function (restMenuProps) {
|
|
200
|
+
return combineProps({
|
|
201
|
+
'aria-labelledby': suggestionListId + "-label",
|
|
202
|
+
id: suggestionListId + "-menu",
|
|
203
|
+
role: 'listbox',
|
|
204
|
+
}, restMenuProps);
|
|
205
|
+
};
|
|
206
|
+
var getClearButtonProps = function (props) {
|
|
207
|
+
return combineProps({
|
|
208
|
+
id: suggestionListId + "-clear-button",
|
|
209
|
+
onClick: function (e) {
|
|
210
|
+
onClear === null || onClear === void 0 ? void 0 : onClear(e);
|
|
211
|
+
reset(true);
|
|
212
|
+
},
|
|
213
|
+
}, props);
|
|
214
|
+
};
|
|
215
|
+
var resultObj = {
|
|
216
|
+
focusInput: focusInput,
|
|
217
|
+
getClearButtonProps: getClearButtonProps,
|
|
218
|
+
getLabelProps: getLabelProps,
|
|
219
|
+
getMenuProps: getMenuProps,
|
|
220
|
+
getInputProps: getInputProps,
|
|
221
|
+
getInputAriaProps: getInputAriaProps,
|
|
222
|
+
getItemProps: getItemProps,
|
|
223
|
+
highlightedIndex: highlightedIndexRef.current,
|
|
224
|
+
optionItems: optionItems,
|
|
225
|
+
inputValue: inputValue,
|
|
226
|
+
onInputChange: handleInputChange,
|
|
227
|
+
setHighlightedIndex: setHighlightedIndex,
|
|
228
|
+
changeHighlightedIndexReason: changeHighlightedIndexReason.current,
|
|
229
|
+
reset: reset,
|
|
230
|
+
forceUpdate: forceUpdate,
|
|
231
|
+
optionsGroupList: optionsGroupList,
|
|
232
|
+
/** current suggestion list id */
|
|
233
|
+
id: suggestionListId,
|
|
234
|
+
};
|
|
235
|
+
changeHighlightedIndexReason.current = undefined;
|
|
236
|
+
return resultObj;
|
|
237
|
+
};
|
|
@@ -9,14 +9,32 @@ export var isItemCanSelected = function (item) {
|
|
|
9
9
|
export var DEFAULT_KEY_TO_CHIPS = [';', ',', '\\n'];
|
|
10
10
|
export var DEFAULT_LIMIT_CHIPS = 20;
|
|
11
11
|
export var DEFAULT_GET_OPTION_LABEL = function (item) {
|
|
12
|
-
return item.label || '';
|
|
12
|
+
return (item === null || item === void 0 ? void 0 : item.label) || '';
|
|
13
13
|
};
|
|
14
14
|
export var RcDownshiftDefaultRenderNoOptions = function (getNoOptionsProps) {
|
|
15
15
|
return (React.createElement(RcMenuItem, __assign({ component: "div" }, getNoOptionsProps()), "No Options"));
|
|
16
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* default downshift filter options method, use with `variant="tags"`
|
|
19
|
+
*
|
|
20
|
+
* - filter options by input value and selected items
|
|
21
|
+
*/
|
|
17
22
|
export var RcDownshiftDefaultFilterOptions = function (options, _a) {
|
|
18
23
|
var inputValue = _a.inputValue, getOptionLabel = _a.getOptionLabel, selectedItems = _a.selectedItems;
|
|
19
24
|
return options.filter(function (item) {
|
|
20
25
|
return selectedItems.indexOf(item) < 0 && (getOptionLabel === null || getOptionLabel === void 0 ? void 0 : getOptionLabel(item).toLowerCase().startsWith((inputValue === null || inputValue === void 0 ? void 0 : inputValue.toLowerCase()) || ''));
|
|
21
26
|
});
|
|
22
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* default downshift filter options method, use with `variant="autocomplete"`
|
|
30
|
+
*
|
|
31
|
+
* - when open menu and not change value, that will return whole options
|
|
32
|
+
* - only filter options by input value when have input value changed
|
|
33
|
+
*/
|
|
34
|
+
export var RcAutocompleteDefaultFilterOptions = function (options, _a) {
|
|
35
|
+
var inputValue = _a.inputValue, getOptionLabel = _a.getOptionLabel, inputChanged = _a.inputChanged;
|
|
36
|
+
if (!inputChanged) {
|
|
37
|
+
return options;
|
|
38
|
+
}
|
|
39
|
+
return options.filter(function (item) { return getOptionLabel === null || getOptionLabel === void 0 ? void 0 : getOptionLabel(item).toLowerCase().startsWith((inputValue === null || inputValue === void 0 ? void 0 : inputValue.toLowerCase()) || ''); });
|
|
40
|
+
};
|
|
@@ -15,32 +15,38 @@ function stringArrToRegExp(keyToTags) {
|
|
|
15
15
|
}
|
|
16
16
|
var componentName = 'RcDownshift';
|
|
17
17
|
export var useDownshift = function (_a) {
|
|
18
|
-
var multipleProp = _a.multiple, variant = _a.variant, labelProp = _a.label, inputValueProp = _a.inputValue, _b = _a.getOptionLabel, getOptionLabel = _b === void 0 ? DEFAULT_GET_OPTION_LABEL : _b, _c = _a.keyToTags, keyToTags = _c === void 0 ? DEFAULT_KEY_TO_CHIPS : _c, filterOptions = _a.filterOptions, disabledItemsHighlightable = _a.disabledItemsHighlightable, options = _a.options, freeSolo = _a.freeSolo, onInputChangeProp = _a.onInputChange, maxFreeSolo = _a.maxFreeSolo, onMaxFreeSolo = _a.onMaxFreeSolo, openOnFocus = _a.openOnFocus, disableCloseOnSelect = _a.disableCloseOnSelect, initialIsOpen = _a.initialIsOpen, autoSelect = _a.autoSelect, inputContainerRef = _a.inputContainerRef, inputRef = _a.inputRef, wrapperRef = _a.wrapperRef, onKeyDownProp = _a.onKeyDown, onSelectChange = _a.onChange, _d = _a.value, selectedItemsProp = _d === void 0 ? [] : _d, disabled = _a.disabled, renderNoOptions = _a.renderNoOptions, onClear = _a.onClear, autoHighlight = _a.autoHighlight, getOptionDisabled = _a.getOptionDisabled, addNoOptionItem = _a.addNoOptionItem, groupBy = _a.groupBy, onGroupExpanded = _a.onGroupExpanded, groupVariant = _a.groupVariant, groupExpanded = _a.groupExpanded, getExpandIconProps = _a.getExpandIconProps, required = _a.required, openProp = _a.open, onOpen = _a.onOpen, onClose = _a.onClose;
|
|
18
|
+
var multipleProp = _a.multiple, variant = _a.variant, labelProp = _a.label, inputValueProp = _a.inputValue, _b = _a.getOptionLabel, getOptionLabel = _b === void 0 ? DEFAULT_GET_OPTION_LABEL : _b, _c = _a.keyToTags, keyToTags = _c === void 0 ? DEFAULT_KEY_TO_CHIPS : _c, filterOptions = _a.filterOptions, disabledItemsHighlightable = _a.disabledItemsHighlightable, options = _a.options, freeSolo = _a.freeSolo, onInputChangeProp = _a.onInputChange, maxFreeSolo = _a.maxFreeSolo, onMaxFreeSolo = _a.onMaxFreeSolo, openOnFocus = _a.openOnFocus, disableCloseOnSelect = _a.disableCloseOnSelect, initialIsOpen = _a.initialIsOpen, autoSelect = _a.autoSelect, inputContainerRef = _a.inputContainerRef, inputRef = _a.inputRef, wrapperRef = _a.wrapperRef, onKeyDownProp = _a.onKeyDown, onSelectChange = _a.onChange, _d = _a.value, selectedItemsProp = _d === void 0 ? [] : _d, disabled = _a.disabled, renderNoOptions = _a.renderNoOptions, onClear = _a.onClear, autoHighlight = _a.autoHighlight, getOptionDisabled = _a.getOptionDisabled, addNoOptionItem = _a.addNoOptionItem, groupBy = _a.groupBy, onGroupExpanded = _a.onGroupExpanded, groupVariant = _a.groupVariant, groupExpanded = _a.groupExpanded, groupDefaultExpanded = _a.groupDefaultExpanded, getExpandIconProps = _a.getExpandIconProps, required = _a.required, openProp = _a.open, onOpen = _a.onOpen, onClose = _a.onClose, focusedProp = _a.focused;
|
|
19
19
|
var isAutocomplete = variant === 'autocomplete';
|
|
20
20
|
// * when that is autocomplete, that will never be multiple
|
|
21
21
|
var multiple = isAutocomplete ? false : multipleProp;
|
|
22
22
|
var isSelectedFromAutocompleteRef = useRef(false);
|
|
23
|
+
var isInputValueChangedRef = useRef(false);
|
|
23
24
|
var _e = __read(useControlled({
|
|
25
|
+
controlled: focusedProp,
|
|
26
|
+
default: false,
|
|
27
|
+
name: componentName,
|
|
28
|
+
}), 2), isFocused = _e[0], setIsFocused = _e[1];
|
|
29
|
+
var _f = __read(useControlled({
|
|
24
30
|
controlled: openProp,
|
|
25
31
|
default: initialIsOpen || false,
|
|
26
32
|
name: componentName,
|
|
27
|
-
}), 2), isOpen =
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
33
|
+
}), 2), isOpen = _f[0], setIsOpen = _f[1];
|
|
34
|
+
var _g = __read(useState(false), 2), isTagsFocus = _g[0], setIsTagsFocus = _g[1];
|
|
35
|
+
var _h = __read(useState(0), 2), activeIndex = _h[0], setActiveIndex = _h[1];
|
|
36
|
+
var _j = __read(useControlled({
|
|
31
37
|
controlled: inputValueProp,
|
|
32
38
|
default: '',
|
|
33
39
|
name: componentName,
|
|
34
|
-
}), 2), inputValue =
|
|
40
|
+
}), 2), inputValue = _j[0], setInputValue = _j[1];
|
|
35
41
|
var updateInputValue = function (newValue) {
|
|
36
42
|
onInputChangeProp === null || onInputChangeProp === void 0 ? void 0 : onInputChangeProp(newValue);
|
|
37
43
|
setInputValue(newValue);
|
|
38
44
|
};
|
|
39
|
-
var
|
|
45
|
+
var _k = __read(useControlled({
|
|
40
46
|
controlled: selectedItemsProp,
|
|
41
47
|
default: [],
|
|
42
48
|
name: componentName,
|
|
43
|
-
}), 2), selectedItems =
|
|
49
|
+
}), 2), selectedItems = _k[0], setSelectedItems = _k[1];
|
|
44
50
|
var focusInput = function () { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); };
|
|
45
51
|
var downshiftId = useResultRef(function () { return uniqueId("downshift-"); }).current;
|
|
46
52
|
// * use -2 for us know that is init state, for recalculate defaultHighlightedIndex
|
|
@@ -55,7 +61,7 @@ export var useDownshift = function (_a) {
|
|
|
55
61
|
? true
|
|
56
62
|
: undefined;
|
|
57
63
|
var forceUpdate = useForceUpdate();
|
|
58
|
-
var
|
|
64
|
+
var _l = useSleep(), sleep = _l.sleep, getSleeping = _l.getSleeping;
|
|
59
65
|
var filteredResult = useMemo(function () {
|
|
60
66
|
var getInputValueAsItem = function () {
|
|
61
67
|
var label = inputValue.trim() || '';
|
|
@@ -74,6 +80,7 @@ export var useDownshift = function (_a) {
|
|
|
74
80
|
if (filterOptions) {
|
|
75
81
|
return filterOptions(items, {
|
|
76
82
|
inputValue: inputValue,
|
|
83
|
+
inputChanged: isInputValueChangedRef.current,
|
|
77
84
|
getOptionLabel: getOptionLabel,
|
|
78
85
|
selectedItems: selectedItems,
|
|
79
86
|
});
|
|
@@ -117,16 +124,19 @@ export var useDownshift = function (_a) {
|
|
|
117
124
|
renderNoOptions,
|
|
118
125
|
selectedItems,
|
|
119
126
|
]);
|
|
120
|
-
var
|
|
127
|
+
var _m = useDownshiftGroup({
|
|
121
128
|
groupBy: groupBy,
|
|
122
129
|
options: options,
|
|
123
130
|
filteredResult: filteredResult,
|
|
124
131
|
getExpandIconProps: getExpandIconProps,
|
|
125
132
|
groupExpanded: groupExpanded,
|
|
133
|
+
groupDefaultExpanded: groupDefaultExpanded,
|
|
126
134
|
onGroupExpanded: onGroupExpanded,
|
|
135
|
+
// TODO: single release for that breaking change
|
|
136
|
+
// getOptionDisabled,
|
|
127
137
|
groupVariant: groupVariant,
|
|
128
138
|
id: downshiftId,
|
|
129
|
-
}), groupedResult =
|
|
139
|
+
}), groupedResult = _m.groupedResult, handleGroupExpandedChange = _m.handleGroupExpandedChange, optionsGroupList = _m.optionsGroupList;
|
|
130
140
|
var optionItems = groupBy ? groupedResult : filteredResult;
|
|
131
141
|
var freeSoloCount = useMemo(function () { return selectedItems.filter(function (x) { return x.freeSolo; }).length; }, [selectedItems]);
|
|
132
142
|
var handleSelectedItems = function (_selectedItems) {
|
|
@@ -168,6 +178,7 @@ export var useDownshift = function (_a) {
|
|
|
168
178
|
});
|
|
169
179
|
var closeMenu = function (e, reason) {
|
|
170
180
|
keepHighlightedIndexRef.current = false;
|
|
181
|
+
isInputValueChangedRef.current = false;
|
|
171
182
|
// * set to default highlighted
|
|
172
183
|
setHighlightedIndex(DEFAULT_HIGHLIGHTED_INDEX, { reason: 'auto' });
|
|
173
184
|
if (isOpen) {
|
|
@@ -318,6 +329,7 @@ export var useDownshift = function (_a) {
|
|
|
318
329
|
updateInputValue('');
|
|
319
330
|
}
|
|
320
331
|
isSelectedFromAutocompleteRef.current = false;
|
|
332
|
+
isInputValueChangedRef.current = false;
|
|
321
333
|
setActiveIndex(-1);
|
|
322
334
|
if (!disableCloseOnSelect) {
|
|
323
335
|
closeMenu(e, 'select-option');
|
|
@@ -342,7 +354,7 @@ export var useDownshift = function (_a) {
|
|
|
342
354
|
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
343
355
|
},
|
|
344
356
|
}).onKeyFocusedIndexHandle;
|
|
345
|
-
var
|
|
357
|
+
var _o = useKeyboardMoveFocus({
|
|
346
358
|
options: optionItems,
|
|
347
359
|
focusedIndexRef: highlightedIndexRef,
|
|
348
360
|
infinite: true,
|
|
@@ -355,7 +367,7 @@ export var useDownshift = function (_a) {
|
|
|
355
367
|
: function (child) {
|
|
356
368
|
return !getIsItemCanSelected(child);
|
|
357
369
|
},
|
|
358
|
-
}), onKeyFocusedIndexHandle =
|
|
370
|
+
}), onKeyFocusedIndexHandle = _o.onKeyFocusedIndexHandle, getNextFocusableOption = _o.getNextFocusableOption;
|
|
359
371
|
var keepHighlightedIndex = function () {
|
|
360
372
|
keepHighlightedIndexRef.current = true;
|
|
361
373
|
};
|
|
@@ -530,9 +542,11 @@ export var useDownshift = function (_a) {
|
|
|
530
542
|
handleSelectedItems([]);
|
|
531
543
|
}
|
|
532
544
|
fromPasteString.current = '';
|
|
545
|
+
isInputValueChangedRef.current = true;
|
|
533
546
|
},
|
|
534
547
|
onFocus: function (e) {
|
|
535
548
|
var _a;
|
|
549
|
+
setIsFocused(true);
|
|
536
550
|
if (openOnFocus)
|
|
537
551
|
openMenu(e);
|
|
538
552
|
// * when autocomplete mode, always select all text when focus
|
|
@@ -546,6 +560,7 @@ export var useDownshift = function (_a) {
|
|
|
546
560
|
}
|
|
547
561
|
},
|
|
548
562
|
onBlur: function (e) {
|
|
563
|
+
setIsFocused(false);
|
|
549
564
|
if (autoSelect && !stopAutoSelectRef.current) {
|
|
550
565
|
if (!freeSolo)
|
|
551
566
|
selectItemFn(optionItems[highlightedIndexRef.current], e);
|
|
@@ -796,6 +811,9 @@ export var useDownshift = function (_a) {
|
|
|
796
811
|
reset: reset,
|
|
797
812
|
forceUpdate: forceUpdate,
|
|
798
813
|
optionsGroupList: optionsGroupList,
|
|
814
|
+
isFocused: isFocused,
|
|
815
|
+
id: downshiftId,
|
|
816
|
+
inputChanged: isInputValueChangedRef.current,
|
|
799
817
|
};
|
|
800
818
|
changeHighlightedIndexReason.current = undefined;
|
|
801
819
|
return resultObj;
|