@pingux/astro 2.143.0-alpha.1 → 2.143.0
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/cjs/components/ListBox/ListBox.js +4 -2
- package/lib/cjs/components/ListBox/Option.js +8 -4
- package/lib/cjs/components/SearchField/SearchAutoComplete.d.ts +3 -0
- package/lib/cjs/components/SearchField/SearchAutoComplete.js +168 -0
- package/lib/cjs/components/SearchField/SearchField.d.ts +2 -2
- package/lib/cjs/components/SearchField/SearchField.js +20 -78
- package/lib/cjs/components/SearchField/SearchField.stories.d.ts +8 -7
- package/lib/cjs/components/SearchField/SearchField.stories.js +43 -3
- package/lib/cjs/components/SearchField/SearchField.test.js +132 -0
- package/lib/cjs/components/SearchField/SearchFieldBase.d.ts +3 -0
- package/lib/cjs/components/SearchField/SearchFieldBase.js +91 -0
- package/lib/cjs/types/listBox.d.ts +2 -0
- package/lib/cjs/types/searchField.d.ts +11 -1
- package/lib/components/ListBox/ListBox.js +4 -2
- package/lib/components/ListBox/Option.js +8 -4
- package/lib/components/SearchField/SearchAutoComplete.js +156 -0
- package/lib/components/SearchField/SearchField.js +18 -78
- package/lib/components/SearchField/SearchField.stories.js +41 -3
- package/lib/components/SearchField/SearchField.test.js +132 -0
- package/lib/components/SearchField/SearchFieldBase.js +79 -0
- package/package.json +2 -1
@@ -36,7 +36,7 @@ var _index = require("./index");
|
|
36
36
|
var _ListBoxContext = require("./ListBoxContext");
|
37
37
|
var _ListBoxSection = _interopRequireDefault(require("./ListBoxSection"));
|
38
38
|
var _react2 = require("@emotion/react");
|
39
|
-
var _excluded = ["defaultSelectedKeys", "disabledKeys", "hasAutoFocus", "hasFocusWrap", "hasNoEmptySelection", "hasVirtualFocus", "id", "isCondensed", "isLoading", "isFocusedOnHover", "isSelectedOnPressUp", "isVirtualized", "items", "keyboardDelegate", "label", "loadingState", "onLoadMore", "onLoadPrev", "onScroll", "onSelectionChange", "renderEmptyState", "selectedKeys", "selectionMode", "state", "aria-label", "aria-labelledby", "aria-describedby", "aria-details"];
|
39
|
+
var _excluded = ["defaultSelectedKeys", "disabledKeys", "hasAutoFocus", "hasFocusWrap", "hasNoEmptySelection", "hasVirtualFocus", "id", "isCondensed", "isLoading", "isFocusedOnHover", "isSelectedOnPressUp", "isVirtualized", "items", "keyboardDelegate", "label", "loadingState", "onLoadMore", "onLoadPrev", "onScroll", "onSelectionChange", "renderEmptyState", "selectedKeys", "selectionMode", "state", "aria-label", "aria-labelledby", "aria-describedby", "aria-details", "showSelectedOption"];
|
40
40
|
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); }
|
41
41
|
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; }
|
42
42
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty2(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
@@ -96,6 +96,7 @@ var ListBox = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
96
96
|
ariaLabelledby = props['aria-labelledby'],
|
97
97
|
ariaDescribedby = props['aria-describedby'],
|
98
98
|
ariaDetails = props['aria-details'],
|
99
|
+
showSelectedOption = props.showSelectedOption,
|
99
100
|
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
100
101
|
|
101
102
|
// Object matching React Aria API with all options
|
@@ -196,7 +197,8 @@ var ListBox = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
196
197
|
key: item.key,
|
197
198
|
item: item,
|
198
199
|
hasVirtualFocus: hasVirtualFocus,
|
199
|
-
isCondensed: isCondensed
|
200
|
+
isCondensed: isCondensed,
|
201
|
+
showSelectedOption: showSelectedOption
|
200
202
|
});
|
201
203
|
}
|
202
204
|
if (type === collectionTypes.LOADER) {
|
@@ -28,7 +28,7 @@ var _Box = _interopRequireDefault(require("../Box"));
|
|
28
28
|
var _Icon = _interopRequireDefault(require("../Icon"));
|
29
29
|
var _ListBoxContext = require("./ListBoxContext");
|
30
30
|
var _react2 = require("@emotion/react");
|
31
|
-
var _excluded = ["item", "hasVirtualFocus", "isCondensed"],
|
31
|
+
var _excluded = ["item", "hasVirtualFocus", "isCondensed", "showSelectedOption"],
|
32
32
|
_excluded2 = ["onPressStart", "onPressUp"];
|
33
33
|
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); }
|
34
34
|
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; }
|
@@ -67,6 +67,7 @@ var Option = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
67
67
|
var item = props.item,
|
68
68
|
hasVirtualFocus = props.hasVirtualFocus,
|
69
69
|
isCondensed = props.isCondensed,
|
70
|
+
showSelectedOption = props.showSelectedOption,
|
70
71
|
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
71
72
|
var key = item.key,
|
72
73
|
itemProps = item.props,
|
@@ -105,7 +106,7 @@ var Option = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
105
106
|
var _useStatusClasses = (0, _hooks.useStatusClasses)(null, {
|
106
107
|
isDisabled: isDisabled || isSeparator,
|
107
108
|
isFocused: focused,
|
108
|
-
isSelected: isSelected,
|
109
|
+
isSelected: showSelectedOption ? isSelected : false,
|
109
110
|
isCondensed: isCondensed,
|
110
111
|
isFocusVisible: isFocusVisible,
|
111
112
|
isPressed: isPressed
|
@@ -142,12 +143,12 @@ var Option = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
142
143
|
mr: "xs",
|
143
144
|
className: classNames,
|
144
145
|
variant: "listBox.checkboxIcon"
|
145
|
-
}) : isSelected && !isOnyx && (0, _react2.jsx)(_Icon["default"], {
|
146
|
+
}) : isSelected && !isOnyx && showSelectedOption && (0, _react2.jsx)(_Icon["default"], {
|
146
147
|
icon: _CircleSmallIcon["default"],
|
147
148
|
title: {
|
148
149
|
name: 'Circle Small Icon'
|
149
150
|
}
|
150
|
-
}), rendered, isSelected && isOnyx && (0, _react2.jsx)(_Icon["default"], {
|
151
|
+
}), rendered, isSelected && isOnyx && showSelectedOption && (0, _react2.jsx)(_Icon["default"], {
|
151
152
|
icon: _CheckIcon["default"],
|
152
153
|
title: {
|
153
154
|
name: 'Check Icon'
|
@@ -155,5 +156,8 @@ var Option = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
155
156
|
color: "green-500"
|
156
157
|
}));
|
157
158
|
});
|
159
|
+
Option.defaultProps = {
|
160
|
+
showSelectedOption: true
|
161
|
+
};
|
158
162
|
var _default = Option;
|
159
163
|
exports["default"] = _default;
|
@@ -0,0 +1,168 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
6
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
7
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
9
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
10
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
11
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
12
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
13
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
14
|
+
_Object$defineProperty(exports, "__esModule", {
|
15
|
+
value: true
|
16
|
+
});
|
17
|
+
exports.SearchAutoComplete = void 0;
|
18
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
19
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
20
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
21
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
22
|
+
var _react = _interopRequireWildcard(require("react"));
|
23
|
+
var _reactAria = require("react-aria");
|
24
|
+
var _reactStately = require("react-stately");
|
25
|
+
var _CloseIcon = _interopRequireDefault(require("@pingux/mdi-react/CloseIcon"));
|
26
|
+
var _utils = require("@react-aria/utils");
|
27
|
+
var _ = require("../..");
|
28
|
+
var _hooks = require("../../hooks");
|
29
|
+
var _pendoID = require("../../utils/devUtils/constants/pendoID");
|
30
|
+
var _ListBox = _interopRequireDefault(require("../ListBox/ListBox"));
|
31
|
+
var _Popover = _interopRequireDefault(require("../Popover/Popover"));
|
32
|
+
var _react2 = require("@emotion/react");
|
33
|
+
var _excluded = ["shouldFocusOnHover", "shouldSelectOnPressUp"];
|
34
|
+
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); }
|
35
|
+
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; }
|
36
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
37
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
38
|
+
var displayName = 'SearchField';
|
39
|
+
var SearchAutoComplete = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
40
|
+
var autocomplete = props.autocomplete,
|
41
|
+
hasAutoFocus = props.hasAutoFocus,
|
42
|
+
hasNoClearButton = props.hasNoClearButton,
|
43
|
+
icon = props.icon,
|
44
|
+
isExcludedFromTabOrder = props.isExcludedFromTabOrder,
|
45
|
+
label = props.label,
|
46
|
+
controlProps = props.controlProps,
|
47
|
+
iconProps = props.iconProps,
|
48
|
+
labelProps = props.labelProps,
|
49
|
+
value = props.value,
|
50
|
+
onChange = props.onChange;
|
51
|
+
(0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
|
52
|
+
var _useFilter = (0, _reactAria.useFilter)({
|
53
|
+
sensitivity: 'base'
|
54
|
+
}),
|
55
|
+
contains = _useFilter.contains;
|
56
|
+
var comboBoxState = (0, _reactStately.useComboBoxState)(_objectSpread(_objectSpread({}, props), {}, {
|
57
|
+
inputValue: value,
|
58
|
+
defaultInputValue: props.defaultValue,
|
59
|
+
onInputChange: onChange,
|
60
|
+
defaultFilter: contains,
|
61
|
+
allowsCustomValue: true
|
62
|
+
}));
|
63
|
+
var inputRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
64
|
+
var outerRef = (0, _react.useRef)(null);
|
65
|
+
var listBoxRef = (0, _react.useRef)(null);
|
66
|
+
var popoverRef = (0, _react.useRef)(null);
|
67
|
+
var clearButtonRef = (0, _react.useRef)(null);
|
68
|
+
var _useComboBox = (0, _reactAria.useComboBox)(_objectSpread(_objectSpread({}, props), {}, {
|
69
|
+
inputRef: inputRef,
|
70
|
+
listBoxRef: listBoxRef,
|
71
|
+
popoverRef: popoverRef
|
72
|
+
}), comboBoxState),
|
73
|
+
inputProps = _useComboBox.inputProps,
|
74
|
+
listBoxProps = _useComboBox.listBoxProps,
|
75
|
+
rsLabelProps = _useComboBox.labelProps;
|
76
|
+
delete inputProps['data-testid'];
|
77
|
+
var shouldFocusOnHover = listBoxProps.shouldFocusOnHover,
|
78
|
+
shouldSelectOnPressUp = listBoxProps.shouldSelectOnPressUp,
|
79
|
+
otherListBoxProps = (0, _objectWithoutProperties2["default"])(listBoxProps, _excluded);
|
80
|
+
var searchProps = {
|
81
|
+
label: props.label,
|
82
|
+
value: comboBoxState.inputValue,
|
83
|
+
'aria-label': props['aria-label'],
|
84
|
+
onChange: function onChange(v) {
|
85
|
+
return comboBoxState.setInputValue(v);
|
86
|
+
},
|
87
|
+
onClear: props.onClear,
|
88
|
+
onSubmit: props.onSubmit
|
89
|
+
};
|
90
|
+
var searchState = (0, _reactStately.useSearchFieldState)(searchProps);
|
91
|
+
var _useSearchField = (0, _reactAria.useSearchField)(_objectSpread({
|
92
|
+
autoComplete: autocomplete,
|
93
|
+
autoFocus: hasAutoFocus,
|
94
|
+
excludeFromTabOrder: isExcludedFromTabOrder
|
95
|
+
}, searchProps), searchState, inputRef),
|
96
|
+
raLabelProps = _useSearchField.labelProps,
|
97
|
+
raInputProps = _useSearchField.inputProps,
|
98
|
+
clearButtonProps = _useSearchField.clearButtonProps;
|
99
|
+
var _useField = (0, _hooks.useField)(_objectSpread(_objectSpread({}, props), {}, {
|
100
|
+
labelProps: _objectSpread(_objectSpread(_objectSpread({}, labelProps), raLabelProps), rsLabelProps),
|
101
|
+
controlProps: _objectSpread(_objectSpread({}, controlProps), raInputProps)
|
102
|
+
})),
|
103
|
+
fieldContainerProps = _useField.fieldContainerProps,
|
104
|
+
fieldControlInputProps = _useField.fieldControlInputProps,
|
105
|
+
fieldControlWrapperProps = _useField.fieldControlWrapperProps,
|
106
|
+
fieldLabelProps = _useField.fieldLabelProps;
|
107
|
+
var handleKeyDownEvent = function handleKeyDownEvent(e) {
|
108
|
+
var key = e.key;
|
109
|
+
if (key === 'Enter' || key === ' ') {
|
110
|
+
comboBoxState.setInputValue('');
|
111
|
+
}
|
112
|
+
};
|
113
|
+
|
114
|
+
// Popover width matches the input width
|
115
|
+
var _useState = (0, _react.useState)(0),
|
116
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
117
|
+
popoverWidth = _useState2[0],
|
118
|
+
setPopoverWidth = _useState2[1];
|
119
|
+
var onResize = (0, _react.useCallback)(function () {
|
120
|
+
/* istanbul ignore next */
|
121
|
+
if (outerRef.current) {
|
122
|
+
setPopoverWidth(outerRef.current.offsetWidth);
|
123
|
+
}
|
124
|
+
}, [outerRef, setPopoverWidth]);
|
125
|
+
(0, _utils.useResizeObserver)({
|
126
|
+
ref: outerRef,
|
127
|
+
onResize: onResize
|
128
|
+
});
|
129
|
+
(0, _react.useLayoutEffect)(onResize, [onResize]);
|
130
|
+
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({}, (0, _pendoID.getPendoID)(displayName), fieldContainerProps), label && (0, _react2.jsx)(_.Label, fieldLabelProps), (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
131
|
+
variant: "forms.search.wrapper",
|
132
|
+
ref: outerRef
|
133
|
+
}, fieldControlWrapperProps), (0, _react2.jsx)(_.Input, (0, _extends2["default"])({
|
134
|
+
variant: "forms.input.search",
|
135
|
+
ref: inputRef
|
136
|
+
}, (0, _utils.mergeProps)(fieldControlInputProps, inputProps))), icon && (0, _react2.jsx)(_.Icon, (0, _extends2["default"])({
|
137
|
+
icon: icon,
|
138
|
+
variant: "forms.search.icon",
|
139
|
+
title: {
|
140
|
+
name: 'Search Icon'
|
141
|
+
}
|
142
|
+
}, iconProps)), !hasNoClearButton && searchState.value !== '' && (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
|
143
|
+
ref: clearButtonRef
|
144
|
+
}, clearButtonProps, {
|
145
|
+
tabIndex: 0,
|
146
|
+
onKeyDown: handleKeyDownEvent,
|
147
|
+
color: "text.secondary",
|
148
|
+
variant: "searchClearButton"
|
149
|
+
}), (0, _react2.jsx)(_.Icon, {
|
150
|
+
icon: _CloseIcon["default"],
|
151
|
+
title: {
|
152
|
+
name: 'Close Icon'
|
153
|
+
}
|
154
|
+
}))), comboBoxState.isOpen && (0, _react2.jsx)(_Popover["default"], {
|
155
|
+
popoverRef: popoverRef,
|
156
|
+
triggerRef: outerRef,
|
157
|
+
state: comboBoxState,
|
158
|
+
isNonModal: true,
|
159
|
+
width: popoverWidth
|
160
|
+
}, (0, _react2.jsx)(_.ScrollBox, null, (0, _react2.jsx)(_ListBox["default"], (0, _extends2["default"])({
|
161
|
+
ref: listBoxRef,
|
162
|
+
state: comboBoxState,
|
163
|
+
isFocusedOnHover: shouldFocusOnHover,
|
164
|
+
isSelectedOnPressUp: shouldSelectOnPressUp,
|
165
|
+
showSelectedOption: false
|
166
|
+
}, otherListBoxProps)))));
|
167
|
+
});
|
168
|
+
exports.SearchAutoComplete = SearchAutoComplete;
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { SearchFieldProps } from '../../types';
|
3
|
-
declare const SearchField: React.ForwardRefExoticComponent<SearchFieldProps & React.RefAttributes<HTMLInputElement>>;
|
2
|
+
import { SearchFieldProps, SearchItem } from '../../types';
|
3
|
+
declare const SearchField: React.ForwardRefExoticComponent<SearchFieldProps<SearchItem> & React.RefAttributes<HTMLInputElement>>;
|
4
4
|
export default SearchField;
|
@@ -1,99 +1,41 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
-
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
5
|
-
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
6
|
-
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
7
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
8
|
-
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
9
|
-
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
10
|
-
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
11
|
-
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
12
4
|
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
13
7
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
14
8
|
_Object$defineProperty(exports, "__esModule", {
|
15
9
|
value: true
|
16
10
|
});
|
17
11
|
exports["default"] = void 0;
|
18
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
19
|
-
var
|
13
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
20
14
|
var _react = _interopRequireWildcard(require("react"));
|
21
|
-
var _reactAria = require("react-aria");
|
22
|
-
var _reactStately = require("react-stately");
|
23
|
-
var _CloseIcon = _interopRequireDefault(require("@pingux/mdi-react/CloseIcon"));
|
24
15
|
var _SearchIcon = _interopRequireDefault(require("@pingux/mdi-react/SearchIcon"));
|
25
|
-
var
|
26
|
-
var
|
27
|
-
var _pendoID = require("../../utils/devUtils/constants/pendoID");
|
16
|
+
var _SearchAutoComplete = require("./SearchAutoComplete");
|
17
|
+
var _SearchFieldBase = require("./SearchFieldBase");
|
28
18
|
var _react2 = require("@emotion/react");
|
19
|
+
var _excluded = ["hasNoClearButton", "mode", "icon"];
|
29
20
|
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); }
|
30
21
|
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; }
|
31
|
-
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
32
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
33
22
|
var displayName = 'SearchField';
|
34
23
|
var SearchField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
35
|
-
var
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
autoFocus: hasAutoFocus,
|
50
|
-
excludeFromTabOrder: isExcludedFromTabOrder
|
51
|
-
}, props), state, searchRef),
|
52
|
-
raLabelProps = _useSearchField.labelProps,
|
53
|
-
raInputProps = _useSearchField.inputProps,
|
54
|
-
clearButtonProps = _useSearchField.clearButtonProps;
|
55
|
-
var _useField = (0, _hooks.useField)(_objectSpread(_objectSpread({}, props), {}, {
|
56
|
-
labelProps: _objectSpread(_objectSpread({}, labelProps), raLabelProps),
|
57
|
-
controlProps: _objectSpread(_objectSpread({}, controlProps), raInputProps)
|
58
|
-
})),
|
59
|
-
fieldContainerProps = _useField.fieldContainerProps,
|
60
|
-
fieldControlInputProps = _useField.fieldControlInputProps,
|
61
|
-
fieldControlWrapperProps = _useField.fieldControlWrapperProps,
|
62
|
-
fieldLabelProps = _useField.fieldLabelProps;
|
63
|
-
var handleKeyDownEvent = function handleKeyDownEvent(e) {
|
64
|
-
var key = e.key;
|
65
|
-
if (key === 'Enter' || key === ' ') {
|
66
|
-
state.setValue('');
|
67
|
-
}
|
68
|
-
};
|
69
|
-
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({}, (0, _pendoID.getPendoID)(displayName), fieldContainerProps), label && (0, _react2.jsx)(_.Label, fieldLabelProps), (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
70
|
-
variant: "forms.search.wrapper"
|
71
|
-
}, fieldControlWrapperProps), (0, _react2.jsx)(_.Input, (0, _extends2["default"])({
|
72
|
-
variant: "forms.input.search",
|
73
|
-
ref: searchRef
|
74
|
-
}, fieldControlInputProps)), icon && (0, _react2.jsx)(_.Icon, (0, _extends2["default"])({
|
75
|
-
icon: icon,
|
76
|
-
variant: "forms.search.icon",
|
77
|
-
size: 20,
|
78
|
-
title: {
|
79
|
-
name: 'Search Icon'
|
80
|
-
}
|
81
|
-
}, iconProps)), !hasNoClearButton && state.value !== '' && (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
|
82
|
-
tabIndex: 0,
|
83
|
-
onKeyDown: handleKeyDownEvent,
|
84
|
-
color: "text.secondary",
|
85
|
-
variant: "searchClearButton"
|
86
|
-
}, clearButtonProps), (0, _react2.jsx)(_.Icon, {
|
87
|
-
icon: _CloseIcon["default"],
|
88
|
-
title: {
|
89
|
-
name: 'Close Icon'
|
90
|
-
}
|
91
|
-
}))));
|
24
|
+
var _props$hasNoClearButt = props.hasNoClearButton,
|
25
|
+
hasNoClearButton = _props$hasNoClearButt === void 0 ? false : _props$hasNoClearButt,
|
26
|
+
_props$mode = props.mode,
|
27
|
+
mode = _props$mode === void 0 ? 'default' : _props$mode,
|
28
|
+
_props$icon = props.icon,
|
29
|
+
icon = _props$icon === void 0 ? _SearchIcon["default"] : _props$icon,
|
30
|
+
rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
31
|
+
var Component = mode === 'autocomplete' ? _SearchAutoComplete.SearchAutoComplete : _SearchFieldBase.SearchFieldBase;
|
32
|
+
return (0, _react2.jsx)(Component, (0, _extends2["default"])({
|
33
|
+
hasNoClearButton: hasNoClearButton,
|
34
|
+
icon: icon
|
35
|
+
}, rest, {
|
36
|
+
ref: ref
|
37
|
+
}));
|
92
38
|
});
|
93
|
-
SearchField.defaultProps = {
|
94
|
-
hasNoClearButton: false,
|
95
|
-
icon: _SearchIcon["default"]
|
96
|
-
};
|
97
39
|
SearchField.displayName = displayName;
|
98
40
|
var _default = SearchField;
|
99
41
|
exports["default"] = _default;
|
@@ -1,10 +1,11 @@
|
|
1
1
|
import { StoryFn } from '@storybook/react';
|
2
|
-
import { SearchFieldProps } from '../../types';
|
2
|
+
import { SearchFieldProps, SearchItem } from '../../types';
|
3
3
|
declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, import("@storybook/types").Args>;
|
4
4
|
export default _default;
|
5
|
-
export declare const Default: StoryFn<SearchFieldProps
|
6
|
-
export declare const Controlled: StoryFn<SearchFieldProps
|
7
|
-
export declare const CustomIcon: StoryFn<SearchFieldProps
|
8
|
-
export declare const NoClearButton: StoryFn<SearchFieldProps
|
9
|
-
export declare const ControlledWithDebouncedInput: StoryFn<SearchFieldProps
|
10
|
-
export declare const WithFilter: StoryFn<SearchFieldProps
|
5
|
+
export declare const Default: StoryFn<SearchFieldProps<SearchItem>>;
|
6
|
+
export declare const Controlled: StoryFn<SearchFieldProps<SearchItem>>;
|
7
|
+
export declare const CustomIcon: StoryFn<SearchFieldProps<SearchItem>>;
|
8
|
+
export declare const NoClearButton: StoryFn<SearchFieldProps<SearchItem>>;
|
9
|
+
export declare const ControlledWithDebouncedInput: StoryFn<SearchFieldProps<SearchItem>>;
|
10
|
+
export declare const WithFilter: StoryFn<SearchFieldProps<SearchItem>>;
|
11
|
+
export declare const ControlledWithPopover: StoryFn<SearchFieldProps<SearchItem>>;
|
@@ -14,7 +14,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
14
14
|
_Object$defineProperty(exports, "__esModule", {
|
15
15
|
value: true
|
16
16
|
});
|
17
|
-
exports["default"] = exports.WithFilter = exports.NoClearButton = exports.Default = exports.CustomIcon = exports.ControlledWithDebouncedInput = exports.Controlled = void 0;
|
17
|
+
exports["default"] = exports.WithFilter = exports.NoClearButton = exports.Default = exports.CustomIcon = exports.ControlledWithPopover = exports.ControlledWithDebouncedInput = exports.Controlled = void 0;
|
18
18
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
19
19
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
20
20
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
@@ -85,7 +85,7 @@ var Default = function Default(args) {
|
|
85
85
|
icon: _SearchIcon["default"],
|
86
86
|
onSubmit: function onSubmit(text) {
|
87
87
|
return alert(text);
|
88
|
-
}
|
88
|
+
}
|
89
89
|
}));
|
90
90
|
};
|
91
91
|
exports.Default = Default;
|
@@ -180,4 +180,44 @@ var WithFilter = function WithFilter() {
|
|
180
180
|
}
|
181
181
|
})));
|
182
182
|
};
|
183
|
-
exports.WithFilter = WithFilter;
|
183
|
+
exports.WithFilter = WithFilter;
|
184
|
+
var ControlledWithPopover = function ControlledWithPopover() {
|
185
|
+
var _useState5 = (0, _react.useState)(''),
|
186
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
187
|
+
value = _useState6[0],
|
188
|
+
setValue = _useState6[1];
|
189
|
+
var items = [{
|
190
|
+
id: 'apple',
|
191
|
+
name: 'Apple'
|
192
|
+
}, {
|
193
|
+
id: 'banana',
|
194
|
+
name: 'Banana'
|
195
|
+
}, {
|
196
|
+
id: 'blueberry',
|
197
|
+
name: 'Blueberry'
|
198
|
+
}];
|
199
|
+
return (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.SearchField, {
|
200
|
+
mode: "autocomplete",
|
201
|
+
defaultItems: items,
|
202
|
+
value: value,
|
203
|
+
onChange: function onChange(val) {
|
204
|
+
setValue(val);
|
205
|
+
},
|
206
|
+
"aria-label": "Search Groups",
|
207
|
+
placeholder: "Search",
|
208
|
+
onSubmit: function onSubmit(text) {
|
209
|
+
return alert(text);
|
210
|
+
},
|
211
|
+
onClear: function onClear() {
|
212
|
+
setValue('');
|
213
|
+
}
|
214
|
+
}, function (item) {
|
215
|
+
return (0, _react2.jsx)(_index.Item, {
|
216
|
+
key: item.id,
|
217
|
+
textValue: item.name
|
218
|
+
}, item.name);
|
219
|
+
}), (0, _react2.jsx)(_index.Text, {
|
220
|
+
mt: "xs"
|
221
|
+
}, "value: ".concat(value)));
|
222
|
+
};
|
223
|
+
exports.ControlledWithPopover = ControlledWithPopover;
|
@@ -3,6 +3,7 @@
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
4
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
5
5
|
var _react = _interopRequireDefault(require("react"));
|
6
|
+
var _collections = require("@react-stately/collections");
|
6
7
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
7
8
|
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
8
9
|
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
@@ -10,6 +11,7 @@ var _universalFormSubmitTest = require("../../utils/testUtils/universalFormSubmi
|
|
10
11
|
var _ = _interopRequireDefault(require("."));
|
11
12
|
var _react2 = require("@emotion/react");
|
12
13
|
var testId = 'test-radio-group';
|
14
|
+
var testValue = 'Option';
|
13
15
|
var testLabel = 'Test Label';
|
14
16
|
var defaultProps = {
|
15
17
|
'data-testid': testId,
|
@@ -19,6 +21,16 @@ var getComponent = function getComponent() {
|
|
19
21
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
20
22
|
return (0, _testWrapper.render)((0, _react2.jsx)(_["default"], (0, _extends2["default"])({}, defaultProps, props)));
|
21
23
|
};
|
24
|
+
var getAutocompleteComponent = function getAutocompleteComponent() {
|
25
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
26
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_["default"], (0, _extends2["default"])({}, defaultProps, props), (0, _react2.jsx)(_collections.Item, {
|
27
|
+
key: "1"
|
28
|
+
}, "Option 1"), (0, _react2.jsx)(_collections.Item, {
|
29
|
+
key: "2"
|
30
|
+
}, "Option 2"), (0, _react2.jsx)(_collections.Item, {
|
31
|
+
key: "3"
|
32
|
+
}, "Option 3")));
|
33
|
+
};
|
22
34
|
(0, _universalFormSubmitTest.universalFieldComponentTests)({
|
23
35
|
renderComponent: function renderComponent(props) {
|
24
36
|
return (0, _react2.jsx)(_["default"], (0, _extends2["default"])({}, defaultProps, props));
|
@@ -219,4 +231,124 @@ test('clear button should not be present is hasNoClearButton=true ', function ()
|
|
219
231
|
hasNoClearButton: true
|
220
232
|
});
|
221
233
|
expect(_testWrapper.screen.queryByRole('button')).not.toBeInTheDocument();
|
234
|
+
});
|
235
|
+
describe('Autocomplete mode', function () {
|
236
|
+
beforeAll(function () {
|
237
|
+
jest.spyOn(window.HTMLElement.prototype, 'clientWidth', 'get').mockImplementation(function () {
|
238
|
+
return 1000;
|
239
|
+
});
|
240
|
+
jest.spyOn(window.HTMLElement.prototype, 'clientHeight', 'get').mockImplementation(function () {
|
241
|
+
return 1000;
|
242
|
+
});
|
243
|
+
window.HTMLElement.prototype.scrollIntoView = jest.fn();
|
244
|
+
jest.spyOn(window.screen, 'width', 'get').mockImplementation(function () {
|
245
|
+
return 1024;
|
246
|
+
});
|
247
|
+
jest.spyOn(window, 'requestAnimationFrame').mockImplementation(function (cb) {
|
248
|
+
cb(0);
|
249
|
+
return 0;
|
250
|
+
});
|
251
|
+
jest.useFakeTimers();
|
252
|
+
});
|
253
|
+
afterEach(function () {
|
254
|
+
jest.clearAllMocks();
|
255
|
+
});
|
256
|
+
test('default autocomplete search field', function () {
|
257
|
+
getAutocompleteComponent({
|
258
|
+
mode: 'autocomplete'
|
259
|
+
});
|
260
|
+
var search = _testWrapper.screen.getByLabelText(testLabel);
|
261
|
+
var label = _testWrapper.screen.getByText(testLabel);
|
262
|
+
expect(search).toBeInstanceOf(HTMLInputElement);
|
263
|
+
expect(label).toBeInstanceOf(HTMLLabelElement);
|
264
|
+
expect(search).toBeInTheDocument();
|
265
|
+
expect(label).toBeInTheDocument();
|
266
|
+
});
|
267
|
+
test('autocomplete options appear on user input', function () {
|
268
|
+
getAutocompleteComponent({
|
269
|
+
mode: 'autocomplete'
|
270
|
+
});
|
271
|
+
var control = _testWrapper.screen.getByLabelText(testLabel);
|
272
|
+
_userEvent["default"].type(control, testValue);
|
273
|
+
expect(control).toHaveValue(testValue);
|
274
|
+
expect(_testWrapper.screen.queryByText('Option 1')).toBeInTheDocument();
|
275
|
+
expect(_testWrapper.screen.queryByText('Option 2')).toBeInTheDocument();
|
276
|
+
expect(_testWrapper.screen.queryByText('Option 3')).toBeInTheDocument();
|
277
|
+
_testWrapper.fireEvent.change(control, {
|
278
|
+
target: {
|
279
|
+
value: '3'
|
280
|
+
}
|
281
|
+
});
|
282
|
+
expect(_testWrapper.screen.queryByText('Option 1')).not.toBeInTheDocument();
|
283
|
+
expect(_testWrapper.screen.queryByText('Option 2')).not.toBeInTheDocument();
|
284
|
+
expect(_testWrapper.screen.queryByText('Option 3')).toBeInTheDocument();
|
285
|
+
});
|
286
|
+
test('Allow custom values', function () {
|
287
|
+
var onSubmit = jest.fn();
|
288
|
+
getAutocompleteComponent({
|
289
|
+
mode: 'autocomplete',
|
290
|
+
onSubmit: onSubmit
|
291
|
+
});
|
292
|
+
var control = _testWrapper.screen.getByLabelText(testLabel);
|
293
|
+
_userEvent["default"].type(control, 'Custom Value{enter}');
|
294
|
+
expect(onSubmit).toHaveBeenCalledWith('Custom Value');
|
295
|
+
});
|
296
|
+
test('clear button works in autocomplete mode', function () {
|
297
|
+
getAutocompleteComponent({
|
298
|
+
mode: 'autocomplete'
|
299
|
+
});
|
300
|
+
var search = _testWrapper.screen.getByLabelText(testLabel);
|
301
|
+
_userEvent["default"].type(search, 'clear');
|
302
|
+
expect(search).toHaveValue('clear');
|
303
|
+
var clearButton = _testWrapper.screen.getByRole('button');
|
304
|
+
expect(clearButton).toHaveAttribute('tabindex', '0');
|
305
|
+
(0, _testWrapper.act)(function () {
|
306
|
+
clearButton.focus();
|
307
|
+
});
|
308
|
+
expect(clearButton).toHaveFocus();
|
309
|
+
_testWrapper.fireEvent.keyDown(clearButton, {
|
310
|
+
key: 'Enter'
|
311
|
+
});
|
312
|
+
_testWrapper.fireEvent.keyUp(clearButton, {
|
313
|
+
key: 'Enter'
|
314
|
+
});
|
315
|
+
expect(search).toHaveValue('');
|
316
|
+
});
|
317
|
+
test('Down arrow key open listbox popup', function () {
|
318
|
+
getAutocompleteComponent({
|
319
|
+
mode: 'autocomplete'
|
320
|
+
});
|
321
|
+
var search = _testWrapper.screen.getByLabelText(testLabel);
|
322
|
+
(0, _testWrapper.act)(function () {
|
323
|
+
search.focus();
|
324
|
+
});
|
325
|
+
expect(search).toHaveFocus();
|
326
|
+
expect(_testWrapper.screen.queryByRole('listbox')).not.toBeInTheDocument();
|
327
|
+
_testWrapper.fireEvent.keyDown(search, {
|
328
|
+
key: 'ArrowDown'
|
329
|
+
});
|
330
|
+
(0, _testWrapper.act)(function () {
|
331
|
+
jest.runAllTimers();
|
332
|
+
});
|
333
|
+
expect(_testWrapper.screen.getByRole('listbox')).toBeInTheDocument();
|
334
|
+
expect(_testWrapper.screen.getByText('Option 1')).toBeInTheDocument();
|
335
|
+
});
|
336
|
+
test("No popup when there aren't any options", function () {
|
337
|
+
getAutocompleteComponent({
|
338
|
+
mode: 'autocomplete'
|
339
|
+
});
|
340
|
+
var search = _testWrapper.screen.getByLabelText(testLabel);
|
341
|
+
(0, _testWrapper.act)(function () {
|
342
|
+
search.focus();
|
343
|
+
});
|
344
|
+
expect(search).toHaveFocus();
|
345
|
+
expect(_testWrapper.screen.queryByRole('listbox')).not.toBeInTheDocument();
|
346
|
+
_userEvent["default"].type(search, 'xyz');
|
347
|
+
(0, _testWrapper.act)(function () {
|
348
|
+
jest.runAllTimers();
|
349
|
+
});
|
350
|
+
expect(_testWrapper.screen.queryByRole('listbox')).not.toBeInTheDocument();
|
351
|
+
expect(_testWrapper.screen.queryByText('Option 1')).not.toBeInTheDocument();
|
352
|
+
expect(search).toHaveValue('xyz');
|
353
|
+
});
|
222
354
|
});
|