rsuite 5.50.0 → 5.51.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/CHANGELOG.md +11 -0
- package/CheckTreePicker/styles/index.less +3 -3
- package/DatePicker/styles/index.less +1 -1
- package/Form/styles/mixin.less +1 -2
- package/InputGroup/styles/index.less +0 -14
- package/InputPicker/styles/index.less +1 -1
- package/Picker/styles/index.less +2 -2
- package/Picker/styles/mixin.less +3 -3
- package/TagInput/styles/index.less +1 -1
- package/TagPicker/styles/index.less +5 -1
- package/TreePicker/styles/index.less +2 -2
- package/cjs/@types/common.d.ts +8 -0
- package/cjs/AutoComplete/AutoComplete.js +14 -11
- package/cjs/AutoComplete/Combobox.d.ts +8 -0
- package/cjs/AutoComplete/Combobox.js +31 -0
- package/cjs/Calendar/CalendarContainer.js +35 -37
- package/cjs/Cascader/Cascader.js +12 -11
- package/cjs/Cascader/DropdownMenu.d.ts +3 -20
- package/cjs/Cascader/DropdownMenu.js +48 -48
- package/cjs/Cascader/TreeView.d.ts +24 -0
- package/cjs/Cascader/TreeView.js +174 -0
- package/cjs/CheckPicker/CheckPicker.js +9 -8
- package/cjs/CheckTreePicker/CheckTreeNode.d.ts +2 -2
- package/cjs/CheckTreePicker/CheckTreeNode.js +31 -59
- package/cjs/CheckTreePicker/CheckTreePicker.js +20 -20
- package/cjs/DatePicker/DatePicker.js +5 -6
- package/cjs/DateRangePicker/DateRangePicker.js +3 -4
- package/cjs/Form/Form.d.ts +14 -0
- package/cjs/Form/Form.js +39 -30
- package/cjs/Form/FormContext.d.ts +1 -0
- package/cjs/FormControl/FormControl.js +40 -18
- package/cjs/FormGroup/FormGroup.js +2 -1
- package/cjs/InputPicker/InputPicker.js +46 -29
- package/cjs/InputPicker/InputSearch.js +3 -15
- package/cjs/InputPicker/TagList.d.ts +3 -0
- package/cjs/InputPicker/TagList.js +29 -0
- package/cjs/InputPicker/TextBox.d.ts +18 -0
- package/cjs/InputPicker/TextBox.js +48 -0
- package/cjs/MultiCascader/MultiCascader.js +13 -10
- package/cjs/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
- package/cjs/MultiCascader/{DropdownMenu.js → TreeView.js} +77 -74
- package/{esm/Picker/DropdownMenuCheckItem.d.ts → cjs/Picker/ListCheckItem.d.ts} +3 -3
- package/cjs/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +14 -30
- package/{esm/Picker/DropdownMenuItem.d.ts → cjs/Picker/ListItem.d.ts} +4 -4
- package/cjs/Picker/{DropdownMenuItem.js → ListItem.js} +15 -24
- package/cjs/Picker/ListItemGroup.d.ts +6 -0
- package/cjs/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
- package/cjs/Picker/Listbox.d.ts +35 -0
- package/cjs/Picker/{DropdownMenu.js → Listbox.js} +49 -64
- package/cjs/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
- package/cjs/Picker/{PickerOverlay.js → PickerPopup.js} +9 -7
- package/cjs/Picker/PickerToggle.d.ts +1 -1
- package/cjs/Picker/PickerToggle.js +16 -9
- package/cjs/Picker/PickerToggleTrigger.d.ts +15 -0
- package/cjs/Picker/PickerToggleTrigger.js +21 -5
- package/cjs/Picker/SearchBar.js +7 -9
- package/cjs/Picker/TreeView.d.ts +7 -0
- package/cjs/Picker/TreeView.js +31 -0
- package/cjs/Picker/hooks/index.d.ts +6 -0
- package/cjs/Picker/hooks/index.js +18 -0
- package/cjs/Picker/hooks/useCombobox.d.ts +7 -0
- package/cjs/Picker/hooks/useCombobox.js +22 -0
- package/cjs/Picker/hooks/useFocusItemValue.d.ts +30 -0
- package/cjs/Picker/hooks/useFocusItemValue.js +246 -0
- package/cjs/Picker/hooks/usePickerClassName.d.ts +21 -0
- package/cjs/Picker/hooks/usePickerClassName.js +39 -0
- package/cjs/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +2 -2
- package/cjs/Picker/{usePickerRef.js → hooks/usePickerRef.js} +1 -1
- package/cjs/Picker/hooks/useSearch.d.ts +18 -0
- package/cjs/Picker/hooks/useSearch.js +57 -0
- package/cjs/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
- package/cjs/Picker/hooks/useToggleKeyDownEvent.js +101 -0
- package/cjs/Picker/index.d.ts +7 -6
- package/cjs/Picker/index.js +26 -19
- package/cjs/Picker/propTypes.d.ts +0 -6
- package/cjs/Picker/propTypes.js +0 -5
- package/cjs/Picker/utils.d.ts +2 -96
- package/cjs/Picker/utils.js +1 -406
- package/cjs/SelectPicker/SelectPicker.js +8 -8
- package/cjs/TagInput/index.js +4 -0
- package/cjs/TreePicker/TreeNode.d.ts +2 -2
- package/cjs/TreePicker/TreeNode.js +22 -56
- package/cjs/TreePicker/TreePicker.js +19 -20
- package/dist/rsuite-no-reset-rtl.css +109 -117
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +109 -117
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +109 -117
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +109 -117
- package/dist/rsuite.js +184 -74
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/@types/common.d.ts +8 -0
- package/esm/AutoComplete/AutoComplete.js +15 -12
- package/esm/AutoComplete/Combobox.d.ts +8 -0
- package/esm/AutoComplete/Combobox.js +25 -0
- package/esm/Calendar/CalendarContainer.js +37 -39
- package/esm/Cascader/Cascader.js +13 -12
- package/esm/Cascader/DropdownMenu.d.ts +3 -20
- package/esm/Cascader/DropdownMenu.js +50 -49
- package/esm/Cascader/TreeView.d.ts +24 -0
- package/esm/Cascader/TreeView.js +167 -0
- package/esm/CheckPicker/CheckPicker.js +10 -9
- package/esm/CheckTreePicker/CheckTreeNode.d.ts +2 -2
- package/esm/CheckTreePicker/CheckTreeNode.js +33 -61
- package/esm/CheckTreePicker/CheckTreePicker.js +21 -21
- package/esm/DatePicker/DatePicker.js +5 -6
- package/esm/DateRangePicker/DateRangePicker.js +3 -4
- package/esm/Form/Form.d.ts +14 -0
- package/esm/Form/Form.js +41 -32
- package/esm/Form/FormContext.d.ts +1 -0
- package/esm/FormControl/FormControl.js +39 -17
- package/esm/FormGroup/FormGroup.js +3 -2
- package/esm/InputPicker/InputPicker.js +47 -30
- package/esm/InputPicker/InputSearch.js +4 -15
- package/esm/InputPicker/TagList.d.ts +3 -0
- package/esm/InputPicker/TagList.js +23 -0
- package/esm/InputPicker/TextBox.d.ts +18 -0
- package/esm/InputPicker/TextBox.js +42 -0
- package/esm/MultiCascader/MultiCascader.js +14 -11
- package/esm/MultiCascader/{DropdownMenu.d.ts → TreeView.d.ts} +3 -3
- package/esm/MultiCascader/{DropdownMenu.js → TreeView.js} +79 -75
- package/{cjs/Picker/DropdownMenuCheckItem.d.ts → esm/Picker/ListCheckItem.d.ts} +3 -3
- package/esm/Picker/{DropdownMenuCheckItem.js → ListCheckItem.js} +15 -30
- package/{cjs/Picker/DropdownMenuItem.d.ts → esm/Picker/ListItem.d.ts} +4 -4
- package/esm/Picker/{DropdownMenuItem.js → ListItem.js} +16 -24
- package/esm/Picker/ListItemGroup.d.ts +6 -0
- package/esm/Picker/{DropdownMenuGroup.js → ListItemGroup.js} +3 -9
- package/esm/Picker/Listbox.d.ts +35 -0
- package/esm/Picker/{DropdownMenu.js → Listbox.js} +50 -64
- package/esm/Picker/{PickerOverlay.d.ts → PickerPopup.d.ts} +3 -3
- package/esm/Picker/{PickerOverlay.js → PickerPopup.js} +10 -8
- package/esm/Picker/PickerToggle.d.ts +1 -1
- package/esm/Picker/PickerToggle.js +16 -9
- package/esm/Picker/PickerToggleTrigger.d.ts +15 -0
- package/esm/Picker/PickerToggleTrigger.js +20 -5
- package/esm/Picker/SearchBar.js +8 -9
- package/esm/Picker/TreeView.d.ts +7 -0
- package/esm/Picker/TreeView.js +25 -0
- package/esm/Picker/hooks/index.d.ts +6 -0
- package/esm/Picker/hooks/index.js +7 -0
- package/esm/Picker/hooks/useCombobox.d.ts +7 -0
- package/esm/Picker/hooks/useCombobox.js +17 -0
- package/esm/Picker/hooks/useFocusItemValue.d.ts +30 -0
- package/esm/Picker/hooks/useFocusItemValue.js +240 -0
- package/esm/Picker/hooks/usePickerClassName.d.ts +21 -0
- package/esm/Picker/hooks/usePickerClassName.js +33 -0
- package/esm/Picker/{usePickerRef.d.ts → hooks/usePickerRef.d.ts} +2 -2
- package/esm/Picker/{usePickerRef.js → hooks/usePickerRef.js} +1 -1
- package/esm/Picker/hooks/useSearch.d.ts +18 -0
- package/esm/Picker/hooks/useSearch.js +51 -0
- package/esm/Picker/hooks/useToggleKeyDownEvent.d.ts +25 -0
- package/esm/Picker/hooks/useToggleKeyDownEvent.js +96 -0
- package/esm/Picker/index.d.ts +7 -6
- package/esm/Picker/index.js +7 -6
- package/esm/Picker/propTypes.d.ts +0 -6
- package/esm/Picker/propTypes.js +0 -5
- package/esm/Picker/utils.d.ts +2 -96
- package/esm/Picker/utils.js +2 -401
- package/esm/SelectPicker/SelectPicker.js +9 -9
- package/esm/TagInput/index.js +4 -0
- package/esm/TreePicker/TreeNode.d.ts +2 -2
- package/esm/TreePicker/TreeNode.js +24 -58
- package/esm/TreePicker/TreePicker.js +20 -21
- package/package.json +1 -1
- package/styles/variables.less +1 -3
- package/cjs/Picker/DropdownMenu.d.ts +0 -59
- package/cjs/Picker/DropdownMenuGroup.d.ts +0 -6
- package/esm/Picker/DropdownMenu.d.ts +0 -59
- package/esm/Picker/DropdownMenuGroup.d.ts +0 -6
|
@@ -4,6 +4,14 @@ import { PositionChildProps } from '../Overlay/Position';
|
|
|
4
4
|
import { TypeAttributes, AnimationEventProps } from '../@types/common';
|
|
5
5
|
export type { OverlayTriggerHandle, PositionChildProps };
|
|
6
6
|
export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onEntering' | 'onExiting'>, Pick<OverlayTriggerProps, 'speaker' | 'onClose'> {
|
|
7
|
+
id?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Identifies the combobox has having a popout, and indicates the type.
|
|
10
|
+
*
|
|
11
|
+
* @see MDN https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup
|
|
12
|
+
*/
|
|
13
|
+
popupType?: 'listbox' | 'tree' | 'grid' | 'dialog' | 'menu';
|
|
14
|
+
multiple?: boolean;
|
|
7
15
|
placement?: TypeAttributes.Placement;
|
|
8
16
|
pickerProps: any;
|
|
9
17
|
open?: boolean;
|
|
@@ -12,5 +20,12 @@ export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onE
|
|
|
12
20
|
}
|
|
13
21
|
export declare const omitTriggerPropKeys: string[];
|
|
14
22
|
export declare const pickTriggerPropKeys: string[];
|
|
23
|
+
export interface ComboboxContextProps {
|
|
24
|
+
id?: string;
|
|
25
|
+
multiple?: boolean;
|
|
26
|
+
hasLabel?: boolean;
|
|
27
|
+
popupType?: 'listbox' | 'tree' | 'grid' | 'dialog' | 'menu';
|
|
28
|
+
}
|
|
29
|
+
export declare const ComboboxContextContext: React.Context<ComboboxContextProps>;
|
|
15
30
|
declare const PickerToggleTrigger: React.ForwardRefExoticComponent<PickerToggleTriggerProps & React.RefAttributes<any>>;
|
|
16
31
|
export default PickerToggleTrigger;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.default = exports.pickTriggerPropKeys = exports.omitTriggerPropKeys = void 0;
|
|
6
|
+
exports.default = exports.ComboboxContextContext = exports.pickTriggerPropKeys = exports.omitTriggerPropKeys = void 0;
|
|
7
7
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
8
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -12,25 +12,41 @@ var _OverlayTrigger = _interopRequireDefault(require("../Overlay/OverlayTrigger"
|
|
|
12
12
|
var _utils = require("../utils");
|
|
13
13
|
var omitTriggerPropKeys = ['onEntered', 'onExited', 'onEnter', 'onEntering', 'onExit', 'onExiting', 'open', 'defaultOpen', 'container', 'containerPadding', 'preventOverflow'];
|
|
14
14
|
exports.omitTriggerPropKeys = omitTriggerPropKeys;
|
|
15
|
-
var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly', 'loading']);
|
|
15
|
+
var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly', 'loading', 'label']);
|
|
16
16
|
exports.pickTriggerPropKeys = pickTriggerPropKeys;
|
|
17
|
+
var ComboboxContextContext = /*#__PURE__*/_react.default.createContext({
|
|
18
|
+
popupType: 'listbox'
|
|
19
|
+
});
|
|
20
|
+
exports.ComboboxContextContext = ComboboxContextContext;
|
|
17
21
|
var PickerToggleTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
18
22
|
var pickerProps = props.pickerProps,
|
|
19
23
|
speaker = props.speaker,
|
|
20
24
|
placement = props.placement,
|
|
21
25
|
_props$trigger = props.trigger,
|
|
22
26
|
trigger = _props$trigger === void 0 ? 'click' : _props$trigger,
|
|
23
|
-
|
|
27
|
+
id = props.id,
|
|
28
|
+
multiple = props.multiple,
|
|
29
|
+
_props$popupType = props.popupType,
|
|
30
|
+
popupType = _props$popupType === void 0 ? 'listbox' : _props$popupType,
|
|
31
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["pickerProps", "speaker", "placement", "trigger", "id", "multiple", "popupType"]);
|
|
24
32
|
var pickerTriggerProps = (0, _pick.default)(pickerProps, pickTriggerPropKeys);
|
|
33
|
+
var pickerId = (0, _utils.useUniqueId)('rs-', id);
|
|
25
34
|
var _useCustom = (0, _utils.useCustom)(),
|
|
26
35
|
rtl = _useCustom.rtl;
|
|
27
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement(ComboboxContextContext.Provider, {
|
|
37
|
+
value: {
|
|
38
|
+
id: pickerId,
|
|
39
|
+
hasLabel: typeof pickerTriggerProps.label !== 'undefined',
|
|
40
|
+
multiple: multiple,
|
|
41
|
+
popupType: popupType
|
|
42
|
+
}
|
|
43
|
+
}, /*#__PURE__*/_react.default.createElement(_OverlayTrigger.default, (0, _extends2.default)({}, pickerTriggerProps, rest, {
|
|
28
44
|
disabled: pickerTriggerProps.disabled || pickerTriggerProps.loading,
|
|
29
45
|
ref: ref,
|
|
30
46
|
trigger: trigger,
|
|
31
47
|
placement: (0, _utils.placementPolyfill)(placement, rtl),
|
|
32
48
|
speaker: speaker
|
|
33
|
-
}));
|
|
49
|
+
})));
|
|
34
50
|
});
|
|
35
51
|
PickerToggleTrigger.displayName = 'PickerToggleTrigger';
|
|
36
52
|
var _default = PickerToggleTrigger;
|
package/cjs/Picker/SearchBar.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
5
|
exports.__esModule = true;
|
|
7
6
|
exports.default = void 0;
|
|
8
7
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
8
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
|
-
var _react =
|
|
11
|
-
var _get = _interopRequireDefault(require("lodash/get"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
12
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
11
|
var _Search = _interopRequireDefault(require("@rsuite/icons/legacy/Search"));
|
|
14
12
|
var _utils = require("../utils");
|
|
@@ -29,15 +27,15 @@ var SearchBar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
29
27
|
merge = _useClassNames.merge,
|
|
30
28
|
prefix = _useClassNames.prefix;
|
|
31
29
|
var classes = merge(className, withClassPrefix());
|
|
32
|
-
var handleChange = (0,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}, rest, {
|
|
30
|
+
var handleChange = (0, _utils.useEventCallback)(function (event) {
|
|
31
|
+
var _event$target;
|
|
32
|
+
onChange === null || onChange === void 0 ? void 0 : onChange((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value, event);
|
|
33
|
+
});
|
|
34
|
+
return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
|
|
38
35
|
ref: ref,
|
|
39
36
|
className: classes
|
|
40
37
|
}), /*#__PURE__*/_react.default.createElement("input", {
|
|
38
|
+
role: "searchbox",
|
|
41
39
|
className: prefix('input'),
|
|
42
40
|
value: value,
|
|
43
41
|
onChange: handleChange,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface TreeViewProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
treeRootClassName: string;
|
|
4
|
+
multiselectable?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare const TreeView: React.ForwardRefExoticComponent<TreeViewProps & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
export default TreeView;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _useCombobox2 = _interopRequireDefault(require("./hooks/useCombobox"));
|
|
11
|
+
var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
12
|
+
var children = props.children,
|
|
13
|
+
treeRootClassName = props.treeRootClassName,
|
|
14
|
+
multiselectable = props.multiselectable,
|
|
15
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["children", "treeRootClassName", "multiselectable"]);
|
|
16
|
+
var _useCombobox = (0, _useCombobox2.default)(),
|
|
17
|
+
id = _useCombobox.id,
|
|
18
|
+
labelId = _useCombobox.labelId,
|
|
19
|
+
popupType = _useCombobox.popupType;
|
|
20
|
+
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
|
|
21
|
+
role: "tree",
|
|
22
|
+
id: id + "-" + popupType,
|
|
23
|
+
"aria-multiselectable": multiselectable,
|
|
24
|
+
"aria-labelledby": labelId,
|
|
25
|
+
ref: ref
|
|
26
|
+
}, rest), /*#__PURE__*/_react.default.createElement("div", {
|
|
27
|
+
className: treeRootClassName
|
|
28
|
+
}, children));
|
|
29
|
+
});
|
|
30
|
+
var _default = TreeView;
|
|
31
|
+
exports.default = _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as usePickerRef } from './usePickerRef';
|
|
2
|
+
export { default as useCombobox } from './useCombobox';
|
|
3
|
+
export { default as useFocusItemValue } from './useFocusItemValue';
|
|
4
|
+
export { default as useToggleKeyDownEvent } from './useToggleKeyDownEvent';
|
|
5
|
+
export { default as useSearch } from './useSearch';
|
|
6
|
+
export { default as usePickerClassName } from './usePickerClassName';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.usePickerClassName = exports.useSearch = exports.useToggleKeyDownEvent = exports.useFocusItemValue = exports.useCombobox = exports.usePickerRef = void 0;
|
|
7
|
+
var _usePickerRef = _interopRequireDefault(require("./usePickerRef"));
|
|
8
|
+
exports.usePickerRef = _usePickerRef.default;
|
|
9
|
+
var _useCombobox = _interopRequireDefault(require("./useCombobox"));
|
|
10
|
+
exports.useCombobox = _useCombobox.default;
|
|
11
|
+
var _useFocusItemValue = _interopRequireDefault(require("./useFocusItemValue"));
|
|
12
|
+
exports.useFocusItemValue = _useFocusItemValue.default;
|
|
13
|
+
var _useToggleKeyDownEvent = _interopRequireDefault(require("./useToggleKeyDownEvent"));
|
|
14
|
+
exports.useToggleKeyDownEvent = _useToggleKeyDownEvent.default;
|
|
15
|
+
var _useSearch = _interopRequireDefault(require("./useSearch"));
|
|
16
|
+
exports.useSearch = _useSearch.default;
|
|
17
|
+
var _usePickerClassName = _interopRequireDefault(require("./usePickerClassName"));
|
|
18
|
+
exports.usePickerClassName = _usePickerClassName.default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
var _PickerToggleTrigger = require("../PickerToggleTrigger");
|
|
8
|
+
function useCombobox() {
|
|
9
|
+
var _useContext = (0, _react.useContext)(_PickerToggleTrigger.ComboboxContextContext),
|
|
10
|
+
id = _useContext.id,
|
|
11
|
+
hasLabel = _useContext.hasLabel,
|
|
12
|
+
popupType = _useContext.popupType,
|
|
13
|
+
multiple = _useContext.multiple;
|
|
14
|
+
return {
|
|
15
|
+
id: id,
|
|
16
|
+
popupType: popupType,
|
|
17
|
+
multiple: multiple,
|
|
18
|
+
labelId: hasLabel ? id + "-label" : undefined
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
var _default = useCombobox;
|
|
22
|
+
exports.default = _default;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface FocusItemValueProps<T = unknown> {
|
|
3
|
+
target: HTMLElement | null | (() => HTMLElement | null);
|
|
4
|
+
data?: T[];
|
|
5
|
+
/**
|
|
6
|
+
* When the down arrow key is pressed, whether to automatically focus on the option
|
|
7
|
+
*/
|
|
8
|
+
focusToOption?: boolean;
|
|
9
|
+
valueKey?: string;
|
|
10
|
+
focusableQueryKey?: string;
|
|
11
|
+
defaultLayer?: number;
|
|
12
|
+
rtl?: boolean;
|
|
13
|
+
callback?: (value: any, event: React.KeyboardEvent) => void;
|
|
14
|
+
getParent?: (node: T) => T | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A hook that manages the focus state of the option.
|
|
18
|
+
* @param defaultFocusItemValue
|
|
19
|
+
* @param props
|
|
20
|
+
*/
|
|
21
|
+
declare const useFocusItemValue: <T, D>(defaultFocusItemValue: T | null | undefined, props: FocusItemValueProps<D>) => {
|
|
22
|
+
focusItemValue: T | null | undefined;
|
|
23
|
+
setFocusItemValue: import("react").Dispatch<import("react").SetStateAction<T | null | undefined>>;
|
|
24
|
+
layer: number;
|
|
25
|
+
setLayer: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
26
|
+
keys: any[];
|
|
27
|
+
setKeys: import("react").Dispatch<import("react").SetStateAction<any[]>>;
|
|
28
|
+
onKeyDown: (...args: any[]) => any;
|
|
29
|
+
};
|
|
30
|
+
export default useFocusItemValue;
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
|
|
9
|
+
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
|
10
|
+
var _find = _interopRequireDefault(require("lodash/find"));
|
|
11
|
+
var _domLib = require("dom-lib");
|
|
12
|
+
var _utils = require("../../utils");
|
|
13
|
+
var _treeUtils = require("../../utils/treeUtils");
|
|
14
|
+
var _utils2 = require("../utils");
|
|
15
|
+
/**
|
|
16
|
+
* A hook that manages the focus state of the option.
|
|
17
|
+
* @param defaultFocusItemValue
|
|
18
|
+
* @param props
|
|
19
|
+
*/
|
|
20
|
+
var useFocusItemValue = function useFocusItemValue(defaultFocusItemValue, props) {
|
|
21
|
+
var _props$valueKey = props.valueKey,
|
|
22
|
+
valueKey = _props$valueKey === void 0 ? 'value' : _props$valueKey,
|
|
23
|
+
_props$focusableQuery = props.focusableQueryKey,
|
|
24
|
+
focusableQueryKey = _props$focusableQuery === void 0 ? '[data-key][aria-disabled="false"]' : _props$focusableQuery,
|
|
25
|
+
_props$defaultLayer = props.defaultLayer,
|
|
26
|
+
defaultLayer = _props$defaultLayer === void 0 ? 0 : _props$defaultLayer,
|
|
27
|
+
_props$focusToOption = props.focusToOption,
|
|
28
|
+
focusToOption = _props$focusToOption === void 0 ? true : _props$focusToOption,
|
|
29
|
+
data = props.data,
|
|
30
|
+
target = props.target,
|
|
31
|
+
rtl = props.rtl,
|
|
32
|
+
callback = props.callback,
|
|
33
|
+
_props$getParent = props.getParent,
|
|
34
|
+
getParent = _props$getParent === void 0 ? function (item) {
|
|
35
|
+
return item === null || item === void 0 ? void 0 : item.parent;
|
|
36
|
+
} : _props$getParent;
|
|
37
|
+
var _useState = (0, _react.useState)(defaultFocusItemValue),
|
|
38
|
+
focusItemValue = _useState[0],
|
|
39
|
+
setFocusItemValue = _useState[1];
|
|
40
|
+
var _useState2 = (0, _react.useState)(defaultLayer),
|
|
41
|
+
layer = _useState2[0],
|
|
42
|
+
setLayer = _useState2[1];
|
|
43
|
+
var _useState3 = (0, _react.useState)([]),
|
|
44
|
+
keys = _useState3[0],
|
|
45
|
+
setKeys = _useState3[1];
|
|
46
|
+
var focusCallback = (0, _utils.useEventCallback)(function (value, event) {
|
|
47
|
+
if (focusToOption) {
|
|
48
|
+
var menu = (0, _isFunction.default)(target) ? target() : target;
|
|
49
|
+
var focusElement = menu === null || menu === void 0 ? void 0 : menu.querySelector("[data-key=\"" + value + "\"]");
|
|
50
|
+
focusElement === null || focusElement === void 0 ? void 0 : focusElement.focus();
|
|
51
|
+
}
|
|
52
|
+
callback === null || callback === void 0 ? void 0 : callback(value, event);
|
|
53
|
+
});
|
|
54
|
+
var getScrollContainer = (0, _utils.useEventCallback)(function () {
|
|
55
|
+
var menu = (0, _isFunction.default)(target) ? target() : target;
|
|
56
|
+
|
|
57
|
+
// For Cascader and MutiCascader
|
|
58
|
+
var subMenu = menu === null || menu === void 0 ? void 0 : menu.querySelector("[data-layer=\"" + layer + "\"]");
|
|
59
|
+
if (subMenu) {
|
|
60
|
+
return subMenu;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// For SelectPicker、CheckPicker、Autocomplete、InputPicker、TagPicker
|
|
64
|
+
return menu === null || menu === void 0 ? void 0 : menu.querySelector('[role="listbox"]');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get the elements visible in all options.
|
|
69
|
+
*/
|
|
70
|
+
var getFocusableMenuItems = function getFocusableMenuItems() {
|
|
71
|
+
if (!target) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
var currentKeys = keys;
|
|
75
|
+
if (layer < 1) {
|
|
76
|
+
var popup = (0, _isFunction.default)(target) ? target() : target;
|
|
77
|
+
var rootMenu = popup === null || popup === void 0 ? void 0 : popup.querySelector('[data-layer="0"]');
|
|
78
|
+
if (rootMenu) {
|
|
79
|
+
var _rootMenu$querySelect;
|
|
80
|
+
currentKeys = Array.from((_rootMenu$querySelect = rootMenu.querySelectorAll(focusableQueryKey)) !== null && _rootMenu$querySelect !== void 0 ? _rootMenu$querySelect : []).map(function (item) {
|
|
81
|
+
var _item$dataset;
|
|
82
|
+
return (_item$dataset = item.dataset) === null || _item$dataset === void 0 ? void 0 : _item$dataset.key;
|
|
83
|
+
});
|
|
84
|
+
} else {
|
|
85
|
+
var _popup$querySelectorA;
|
|
86
|
+
currentKeys = Array.from((_popup$querySelectorA = popup === null || popup === void 0 ? void 0 : popup.querySelectorAll(focusableQueryKey)) !== null && _popup$querySelectorA !== void 0 ? _popup$querySelectorA : []).map(function (item) {
|
|
87
|
+
var _item$dataset2;
|
|
88
|
+
return (_item$dataset2 = item.dataset) === null || _item$dataset2 === void 0 ? void 0 : _item$dataset2.key;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 1. It is necessary to traverse the `keys` instead of `data` here to preserve the order of the array.
|
|
94
|
+
// 2. The values in `keys` are all string, so the corresponding value of `data` should also be converted to string
|
|
95
|
+
return currentKeys.map(function (key) {
|
|
96
|
+
return (0, _find.default)(data, function (i) {
|
|
97
|
+
return "" + i[valueKey] === key;
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Get the index of the focus item.
|
|
104
|
+
*/
|
|
105
|
+
var findFocusItemIndex = (0, _utils.useEventCallback)(function (callback) {
|
|
106
|
+
var items = getFocusableMenuItems();
|
|
107
|
+
for (var i = 0; i < items.length; i += 1) {
|
|
108
|
+
var _items$i;
|
|
109
|
+
if ((0, _utils.shallowEqual)(focusItemValue, (_items$i = items[i]) === null || _items$i === void 0 ? void 0 : _items$i[valueKey])) {
|
|
110
|
+
callback(items, i);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
callback(items, -1);
|
|
115
|
+
});
|
|
116
|
+
var scrollListItem = (0, _utils.useEventCallback)(function (direction, itemValue, willOverflow) {
|
|
117
|
+
var container = getScrollContainer();
|
|
118
|
+
var item = container === null || container === void 0 ? void 0 : container.querySelector("[data-key=\"" + itemValue + "\"]");
|
|
119
|
+
if (willOverflow && container) {
|
|
120
|
+
var scrollHeight = container.scrollHeight,
|
|
121
|
+
clientHeight = container.clientHeight;
|
|
122
|
+
container.scrollTop = direction === 'top' ? scrollHeight - clientHeight : 0;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (item && container) {
|
|
126
|
+
if (!isVisible(item, container, direction)) {
|
|
127
|
+
var height = (0, _domLib.getHeight)(item);
|
|
128
|
+
scrollTo(container, direction, height);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
var focusNextMenuItem = (0, _utils.useEventCallback)(function (event) {
|
|
133
|
+
findFocusItemIndex(function (items, index) {
|
|
134
|
+
var willOverflow = index + 2 > items.length;
|
|
135
|
+
var nextIndex = willOverflow ? 0 : index + 1;
|
|
136
|
+
var focusItem = items[nextIndex];
|
|
137
|
+
if (!(0, _isUndefined.default)(focusItem)) {
|
|
138
|
+
setFocusItemValue(focusItem[valueKey]);
|
|
139
|
+
focusCallback(focusItem[valueKey], event);
|
|
140
|
+
scrollListItem('bottom', focusItem[valueKey], willOverflow);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
var focusPrevMenuItem = (0, _utils.useEventCallback)(function (event) {
|
|
145
|
+
findFocusItemIndex(function (items, index) {
|
|
146
|
+
var willOverflow = index === 0;
|
|
147
|
+
var nextIndex = willOverflow ? items.length - 1 : index - 1;
|
|
148
|
+
var focusItem = items[nextIndex];
|
|
149
|
+
if (!(0, _isUndefined.default)(focusItem)) {
|
|
150
|
+
setFocusItemValue(focusItem[valueKey]);
|
|
151
|
+
focusCallback(focusItem[valueKey], event);
|
|
152
|
+
scrollListItem('top', focusItem[valueKey], willOverflow);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
var getSubMenuKeys = function getSubMenuKeys(nextLayer) {
|
|
157
|
+
var menu = (0, _isFunction.default)(target) ? target() : target;
|
|
158
|
+
var subMenu = menu === null || menu === void 0 ? void 0 : menu.querySelector("[data-layer=\"" + nextLayer + "\"]");
|
|
159
|
+
if (subMenu) {
|
|
160
|
+
var _Array$from;
|
|
161
|
+
return (_Array$from = Array.from(subMenu.querySelectorAll(focusableQueryKey))) === null || _Array$from === void 0 ? void 0 : _Array$from.map(function (item) {
|
|
162
|
+
var _item$dataset3;
|
|
163
|
+
return (_item$dataset3 = item.dataset) === null || _item$dataset3 === void 0 ? void 0 : _item$dataset3.key;
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
};
|
|
168
|
+
var focusNextLevelMenu = (0, _utils.useEventCallback)(function (event) {
|
|
169
|
+
var nextLayer = layer + 1;
|
|
170
|
+
var nextKeys = getSubMenuKeys(nextLayer);
|
|
171
|
+
if (nextKeys) {
|
|
172
|
+
setKeys(nextKeys);
|
|
173
|
+
setLayer(nextLayer);
|
|
174
|
+
setFocusItemValue(nextKeys[0]);
|
|
175
|
+
focusCallback(nextKeys[0], event);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
var focusPrevLevelMenu = (0, _utils.useEventCallback)(function (event) {
|
|
179
|
+
var nextLayer = layer - 1;
|
|
180
|
+
var nextKeys = getSubMenuKeys(nextLayer);
|
|
181
|
+
if (nextKeys) {
|
|
182
|
+
var _getParent;
|
|
183
|
+
setKeys(nextKeys);
|
|
184
|
+
setLayer(nextLayer);
|
|
185
|
+
var focusItem = (0, _treeUtils.findNodeOfTree)(data, function (item) {
|
|
186
|
+
return item[valueKey] === focusItemValue;
|
|
187
|
+
});
|
|
188
|
+
var parentItemValue = (_getParent = getParent(focusItem)) === null || _getParent === void 0 ? void 0 : _getParent[valueKey];
|
|
189
|
+
if (parentItemValue) {
|
|
190
|
+
setFocusItemValue(parentItemValue);
|
|
191
|
+
focusCallback(parentItemValue, event);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
var handleKeyDown = (0, _utils.useEventCallback)(function (event) {
|
|
196
|
+
var _onMenuKeyDown;
|
|
197
|
+
(0, _utils2.onMenuKeyDown)(event, (_onMenuKeyDown = {
|
|
198
|
+
down: focusNextMenuItem,
|
|
199
|
+
up: focusPrevMenuItem
|
|
200
|
+
}, _onMenuKeyDown[rtl ? 'left' : 'right'] = focusNextLevelMenu, _onMenuKeyDown[rtl ? 'right' : 'left'] = focusPrevLevelMenu, _onMenuKeyDown));
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
focusItemValue: focusItemValue,
|
|
204
|
+
setFocusItemValue: setFocusItemValue,
|
|
205
|
+
layer: layer,
|
|
206
|
+
setLayer: setLayer,
|
|
207
|
+
keys: keys,
|
|
208
|
+
setKeys: setKeys,
|
|
209
|
+
onKeyDown: handleKeyDown
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
function scrollTo(container, direction, step) {
|
|
213
|
+
var scrollTop = container.scrollTop;
|
|
214
|
+
container.scrollTop = direction === 'top' ? scrollTop - step : scrollTop + step;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Checks if the element has a vertical scrollbar.
|
|
219
|
+
*/
|
|
220
|
+
function hasVerticalScroll(element) {
|
|
221
|
+
var scrollHeight = element.scrollHeight,
|
|
222
|
+
clientHeight = element.clientHeight;
|
|
223
|
+
return scrollHeight > clientHeight;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Checks if the element is within the visible area of the container
|
|
228
|
+
*/
|
|
229
|
+
function isVisible(element, container, direction) {
|
|
230
|
+
if (!hasVerticalScroll(container)) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
var _element$getBoundingC = element.getBoundingClientRect(),
|
|
234
|
+
top = _element$getBoundingC.top,
|
|
235
|
+
bottom = _element$getBoundingC.bottom,
|
|
236
|
+
height = _element$getBoundingC.height;
|
|
237
|
+
var _container$getBoundin = container.getBoundingClientRect(),
|
|
238
|
+
containerTop = _container$getBoundin.top,
|
|
239
|
+
containerBottom = _container$getBoundin.bottom;
|
|
240
|
+
if (direction === 'top') {
|
|
241
|
+
return top + height > containerTop;
|
|
242
|
+
}
|
|
243
|
+
return bottom - height < containerBottom;
|
|
244
|
+
}
|
|
245
|
+
var _default = useFocusItemValue;
|
|
246
|
+
exports.default = _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TypeAttributes } from '../../@types/common';
|
|
2
|
+
export interface PickerClassNameProps {
|
|
3
|
+
name?: string;
|
|
4
|
+
classPrefix: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
placement?: TypeAttributes.Placement;
|
|
7
|
+
appearance?: 'default' | 'subtle';
|
|
8
|
+
cleanable?: boolean;
|
|
9
|
+
block?: boolean;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
countable?: boolean;
|
|
12
|
+
readOnly?: boolean;
|
|
13
|
+
plaintext?: boolean;
|
|
14
|
+
hasValue?: boolean;
|
|
15
|
+
classes?: any;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The className of the assembled Toggle is on the Picker.
|
|
19
|
+
*/
|
|
20
|
+
declare function usePickerClassName(props: PickerClassNameProps): [string, string[]];
|
|
21
|
+
export default usePickerClassName;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
8
|
+
var _kebabCase = _interopRequireDefault(require("lodash/kebabCase"));
|
|
9
|
+
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
10
|
+
var _utils = require("../../utils");
|
|
11
|
+
/**
|
|
12
|
+
* The className of the assembled Toggle is on the Picker.
|
|
13
|
+
*/
|
|
14
|
+
function usePickerClassName(props) {
|
|
15
|
+
var _withClassPrefix;
|
|
16
|
+
var name = props.name,
|
|
17
|
+
classPrefix = props.classPrefix,
|
|
18
|
+
className = props.className,
|
|
19
|
+
placement = props.placement,
|
|
20
|
+
appearance = props.appearance,
|
|
21
|
+
cleanable = props.cleanable,
|
|
22
|
+
block = props.block,
|
|
23
|
+
disabled = props.disabled,
|
|
24
|
+
countable = props.countable,
|
|
25
|
+
readOnly = props.readOnly,
|
|
26
|
+
plaintext = props.plaintext,
|
|
27
|
+
hasValue = props.hasValue,
|
|
28
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["name", "classPrefix", "className", "placement", "appearance", "cleanable", "block", "disabled", "countable", "readOnly", "plaintext", "hasValue"]);
|
|
29
|
+
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
30
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
31
|
+
merge = _useClassNames.merge;
|
|
32
|
+
var classes = merge(className, withClassPrefix(name, appearance, 'toggle-wrapper', (_withClassPrefix = {}, _withClassPrefix["placement-" + (0, _kebabCase.default)((0, _utils.placementPolyfill)(placement))] = placement, _withClassPrefix['read-only'] = readOnly, _withClassPrefix['has-value'] = hasValue, _withClassPrefix.cleanable = cleanable, _withClassPrefix.block = block, _withClassPrefix.disabled = disabled, _withClassPrefix.countable = countable, _withClassPrefix.plaintext = plaintext, _withClassPrefix)));
|
|
33
|
+
|
|
34
|
+
// Those props that're used for composing the className
|
|
35
|
+
var usedClassNamePropKeys = Object.keys((0, _omit.default)(props, [].concat(Object.keys(rest || {}), ['disabled', 'readOnly', 'plaintext', 'name'])));
|
|
36
|
+
return [classes, usedClassNamePropKeys];
|
|
37
|
+
}
|
|
38
|
+
var _default = usePickerClassName;
|
|
39
|
+
exports.default = _default;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { OverlayTriggerHandle } from '
|
|
3
|
-
import type { ListHandle } from '
|
|
2
|
+
import type { OverlayTriggerHandle } from '../PickerToggleTrigger';
|
|
3
|
+
import type { ListHandle } from '../../Windowing';
|
|
4
4
|
export interface PickerDependentParameters {
|
|
5
5
|
inline?: boolean;
|
|
6
6
|
}
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
exports.__esModule = true;
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
var _useEventCallback = _interopRequireDefault(require("
|
|
8
|
+
var _useEventCallback = _interopRequireDefault(require("../../utils/useEventCallback"));
|
|
9
9
|
/**
|
|
10
10
|
* A hook of the exposed method of Picker
|
|
11
11
|
*/
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface SearchOptions<T> {
|
|
3
|
+
labelKey: string;
|
|
4
|
+
searchBy?: (keyword: string, label: any, item: T) => boolean;
|
|
5
|
+
callback?: (keyword: string, data: T[], event: React.SyntheticEvent) => void;
|
|
6
|
+
}
|
|
7
|
+
declare type UseSearchResult<T> = {
|
|
8
|
+
searchKeyword: string;
|
|
9
|
+
filteredData: T[];
|
|
10
|
+
checkShouldDisplay: (item: T, keyword?: string) => boolean;
|
|
11
|
+
handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
|
|
12
|
+
resetSearch: () => void;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* A hook that handles search filter options
|
|
16
|
+
*/
|
|
17
|
+
declare function useSearch<T>(data: readonly T[], props: SearchOptions<T>): UseSearchResult<T>;
|
|
18
|
+
export default useSearch;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
|
9
|
+
var _utils = require("../utils");
|
|
10
|
+
/**
|
|
11
|
+
* A hook that handles search filter options
|
|
12
|
+
*/
|
|
13
|
+
function useSearch(data, props) {
|
|
14
|
+
var labelKey = props.labelKey,
|
|
15
|
+
searchBy = props.searchBy,
|
|
16
|
+
callback = props.callback; // Use search keywords to filter options.
|
|
17
|
+
var _useState = (0, _react.useState)(''),
|
|
18
|
+
searchKeyword = _useState[0],
|
|
19
|
+
setSearchKeyword = _useState[1];
|
|
20
|
+
var resetSearch = (0, _react.useCallback)(function () {
|
|
21
|
+
setSearchKeyword('');
|
|
22
|
+
}, []);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Index of keyword in `label`
|
|
26
|
+
* @param {node} label
|
|
27
|
+
*/
|
|
28
|
+
var checkShouldDisplay = (0, _react.useCallback)(function (item, keyword) {
|
|
29
|
+
var checkValue = typeof item === 'object' ? item === null || item === void 0 ? void 0 : item[labelKey] : String(item);
|
|
30
|
+
var _keyword = (0, _isUndefined.default)(keyword) ? searchKeyword : keyword;
|
|
31
|
+
if (typeof searchBy === 'function') {
|
|
32
|
+
return searchBy(_keyword, checkValue, item);
|
|
33
|
+
}
|
|
34
|
+
return (0, _utils.shouldDisplay)(checkValue, _keyword);
|
|
35
|
+
}, [labelKey, searchBy, searchKeyword]);
|
|
36
|
+
var filteredData = (0, _react.useMemo)(function () {
|
|
37
|
+
return data.filter(function (item) {
|
|
38
|
+
return checkShouldDisplay(item, searchKeyword);
|
|
39
|
+
});
|
|
40
|
+
}, [checkShouldDisplay, data, searchKeyword]);
|
|
41
|
+
var handleSearch = function handleSearch(searchKeyword, event) {
|
|
42
|
+
var filteredData = data.filter(function (item) {
|
|
43
|
+
return checkShouldDisplay(item, searchKeyword);
|
|
44
|
+
});
|
|
45
|
+
setSearchKeyword(searchKeyword);
|
|
46
|
+
callback === null || callback === void 0 ? void 0 : callback(searchKeyword, filteredData, event);
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
searchKeyword: searchKeyword,
|
|
50
|
+
filteredData: filteredData,
|
|
51
|
+
checkShouldDisplay: checkShouldDisplay,
|
|
52
|
+
handleSearch: handleSearch,
|
|
53
|
+
resetSearch: resetSearch
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
var _default = useSearch;
|
|
57
|
+
exports.default = _default;
|