rsuite 5.55.1 → 5.57.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/AutoComplete/styles/index.css +3 -3
- package/CHANGELOG.md +33 -0
- package/CascadeTree/package.json +7 -0
- package/CascadeTree/styles/index.css +273 -0
- package/CascadeTree/styles/index.less +77 -0
- package/CascadeTree/styles/search.less +45 -0
- package/Cascader/styles/index.css +190 -195
- package/Cascader/styles/index.less +1 -122
- package/CheckPicker/styles/index.css +142 -40
- package/CheckPicker/styles/index.less +1 -1
- package/CheckTree/styles/index.css +143 -41
- package/CheckTreePicker/styles/index.css +143 -41
- package/CheckTreePicker/styles/index.less +2 -2
- package/Checkbox/styles/index.css +159 -36
- package/Checkbox/styles/index.less +32 -13
- package/DatePicker/styles/index.css +3 -3
- package/DateRangePicker/styles/index.css +3 -3
- package/InputPicker/styles/index.css +3 -3
- package/MultiCascadeTree/package.json +7 -0
- package/MultiCascadeTree/styles/index.css +3701 -0
- package/MultiCascadeTree/styles/index.less +37 -0
- package/MultiCascader/styles/index.css +213 -108
- package/MultiCascader/styles/index.less +11 -31
- package/Pagination/styles/index.css +3 -3
- package/Radio/styles/index.css +133 -19
- package/Radio/styles/index.less +28 -12
- package/RadioGroup/styles/index.css +1 -1
- package/RadioGroup/styles/index.less +1 -1
- package/SelectPicker/styles/index.css +3 -3
- package/TagGroup/styles/index.css +1 -1
- package/TagGroup/styles/index.less +1 -1
- package/TagInput/styles/index.css +141 -39
- package/TagPicker/styles/index.css +141 -39
- package/cjs/@types/common.d.ts +12 -14
- package/cjs/CascadeTree/CascadeTree.d.ts +16 -0
- package/cjs/CascadeTree/CascadeTree.js +174 -0
- package/cjs/CascadeTree/SearchView.d.ts +17 -0
- package/cjs/CascadeTree/SearchView.js +106 -0
- package/cjs/CascadeTree/TreeView.d.ts +20 -0
- package/cjs/{Cascader → CascadeTree}/TreeView.js +42 -33
- package/cjs/CascadeTree/hooks/index.d.ts +3 -0
- package/cjs/CascadeTree/hooks/index.js +12 -0
- package/cjs/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
- package/cjs/CascadeTree/hooks/usePaths.js +42 -0
- package/cjs/CascadeTree/hooks/useSearch.d.ts +17 -0
- package/cjs/CascadeTree/hooks/useSearch.js +59 -0
- package/cjs/CascadeTree/hooks/useSelect.d.ts +23 -0
- package/cjs/CascadeTree/hooks/useSelect.js +64 -0
- package/cjs/CascadeTree/index.d.ts +4 -0
- package/cjs/CascadeTree/index.js +9 -0
- package/cjs/CascadeTree/types.d.ts +66 -0
- package/cjs/CascadeTree/types.js +2 -0
- package/cjs/CascadeTree/utils.d.ts +32 -0
- package/cjs/CascadeTree/utils.js +66 -0
- package/cjs/Cascader/Cascader.d.ts +57 -26
- package/cjs/Cascader/Cascader.js +180 -247
- package/cjs/Cascader/useActive.d.ts +15 -0
- package/cjs/Cascader/useActive.js +43 -0
- package/cjs/Checkbox/Checkbox.d.ts +67 -25
- package/cjs/Checkbox/Checkbox.js +36 -26
- package/cjs/InlineEdit/InlineEdit.d.ts +1 -1
- package/cjs/InputPicker/InputPicker.js +2 -2
- package/cjs/InputPicker/InputPickerContext.d.ts +1 -1
- package/cjs/Loader/Loader.js +5 -4
- package/cjs/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
- package/cjs/MultiCascadeTree/MultiCascadeTree.js +131 -0
- package/cjs/MultiCascadeTree/SearchView.d.ts +17 -0
- package/cjs/MultiCascadeTree/SearchView.js +117 -0
- package/cjs/MultiCascadeTree/TreeView.d.ts +22 -0
- package/cjs/{MultiCascader → MultiCascadeTree}/TreeView.js +22 -21
- package/cjs/MultiCascadeTree/hooks/index.d.ts +5 -0
- package/cjs/MultiCascadeTree/hooks/index.js +16 -0
- package/cjs/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
- package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +202 -0
- package/cjs/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
- package/cjs/MultiCascadeTree/hooks/useColumnData.js +52 -0
- package/cjs/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
- package/cjs/MultiCascadeTree/hooks/useFlattenData.js +33 -0
- package/cjs/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
- package/cjs/MultiCascadeTree/hooks/useSearch.js +52 -0
- package/cjs/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
- package/cjs/MultiCascadeTree/hooks/useSelect.js +83 -0
- package/cjs/MultiCascadeTree/index.d.ts +4 -0
- package/cjs/MultiCascadeTree/index.js +9 -0
- package/cjs/MultiCascadeTree/types.d.ts +26 -0
- package/cjs/MultiCascadeTree/types.js +2 -0
- package/cjs/MultiCascadeTree/utils.d.ts +37 -0
- package/cjs/MultiCascadeTree/utils.js +140 -0
- package/cjs/MultiCascader/MultiCascader.d.ts +57 -29
- package/cjs/MultiCascader/MultiCascader.js +175 -287
- package/cjs/Radio/Radio.d.ts +42 -16
- package/cjs/Radio/Radio.js +42 -37
- package/cjs/RadioGroup/RadioGroup.d.ts +1 -1
- package/cjs/RadioGroup/RadioGroup.js +3 -3
- package/cjs/TagPicker/index.js +1 -1
- package/cjs/Tree/Tree.d.ts +4 -4
- package/cjs/index.d.ts +6 -1
- package/cjs/index.js +8 -3
- package/cjs/internals/Picker/ListCheckItem.d.ts +2 -11
- package/cjs/internals/Picker/ListCheckItem.js +8 -6
- package/cjs/internals/Picker/PickerToggle.d.ts +4 -5
- package/cjs/toaster/ToastContainer.d.ts +9 -2
- package/cjs/toaster/index.d.ts +0 -1
- package/cjs/toaster/index.js +1 -3
- package/cjs/useToaster/index.d.ts +2 -0
- package/cjs/useToaster/index.js +9 -0
- package/cjs/{toaster → useToaster}/useToaster.d.ts +4 -4
- package/cjs/{toaster → useToaster}/useToaster.js +4 -4
- package/cjs/utils/index.d.ts +1 -0
- package/cjs/utils/index.js +5 -2
- package/dist/rsuite-no-reset-rtl.css +322 -124
- 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 +322 -124
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +322 -124
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +322 -124
- package/dist/rsuite.js +248 -50
- 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 +12 -14
- package/esm/CascadeTree/CascadeTree.d.ts +16 -0
- package/esm/CascadeTree/CascadeTree.js +167 -0
- package/esm/CascadeTree/SearchView.d.ts +17 -0
- package/esm/CascadeTree/SearchView.js +100 -0
- package/esm/CascadeTree/TreeView.d.ts +20 -0
- package/esm/{Cascader → CascadeTree}/TreeView.js +42 -33
- package/esm/CascadeTree/hooks/index.d.ts +3 -0
- package/esm/CascadeTree/hooks/index.js +4 -0
- package/esm/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
- package/esm/CascadeTree/hooks/usePaths.js +36 -0
- package/esm/CascadeTree/hooks/useSearch.d.ts +17 -0
- package/esm/CascadeTree/hooks/useSearch.js +54 -0
- package/esm/CascadeTree/hooks/useSelect.d.ts +23 -0
- package/esm/CascadeTree/hooks/useSelect.js +59 -0
- package/esm/CascadeTree/index.d.ts +4 -0
- package/esm/CascadeTree/index.js +3 -0
- package/esm/CascadeTree/types.d.ts +66 -0
- package/esm/CascadeTree/types.js +1 -0
- package/esm/CascadeTree/utils.d.ts +32 -0
- package/esm/CascadeTree/utils.js +61 -0
- package/esm/Cascader/Cascader.d.ts +57 -26
- package/esm/Cascader/Cascader.js +167 -233
- package/esm/Cascader/useActive.d.ts +15 -0
- package/esm/Cascader/useActive.js +37 -0
- package/esm/Checkbox/Checkbox.d.ts +67 -25
- package/esm/Checkbox/Checkbox.js +38 -28
- package/esm/InlineEdit/InlineEdit.d.ts +1 -1
- package/esm/InputPicker/InputPicker.js +2 -2
- package/esm/InputPicker/InputPickerContext.d.ts +1 -1
- package/esm/Loader/Loader.js +6 -5
- package/esm/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
- package/esm/MultiCascadeTree/MultiCascadeTree.js +125 -0
- package/esm/MultiCascadeTree/SearchView.d.ts +17 -0
- package/esm/MultiCascadeTree/SearchView.js +111 -0
- package/esm/MultiCascadeTree/TreeView.d.ts +22 -0
- package/esm/{MultiCascader → MultiCascadeTree}/TreeView.js +22 -21
- package/esm/MultiCascadeTree/hooks/index.d.ts +5 -0
- package/esm/MultiCascadeTree/hooks/index.js +6 -0
- package/esm/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
- package/esm/MultiCascadeTree/hooks/useCascadeValue.js +197 -0
- package/esm/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
- package/esm/MultiCascadeTree/hooks/useColumnData.js +46 -0
- package/esm/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
- package/esm/MultiCascadeTree/hooks/useFlattenData.js +28 -0
- package/esm/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
- package/esm/MultiCascadeTree/hooks/useSearch.js +47 -0
- package/esm/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
- package/esm/MultiCascadeTree/hooks/useSelect.js +77 -0
- package/esm/MultiCascadeTree/index.d.ts +4 -0
- package/esm/MultiCascadeTree/index.js +3 -0
- package/esm/MultiCascadeTree/types.d.ts +26 -0
- package/esm/MultiCascadeTree/types.js +1 -0
- package/esm/MultiCascadeTree/utils.d.ts +37 -0
- package/esm/MultiCascadeTree/utils.js +130 -0
- package/esm/MultiCascader/MultiCascader.d.ts +57 -29
- package/esm/MultiCascader/MultiCascader.js +168 -279
- package/esm/Radio/Radio.d.ts +42 -16
- package/esm/Radio/Radio.js +43 -38
- package/esm/RadioGroup/RadioGroup.d.ts +1 -1
- package/esm/RadioGroup/RadioGroup.js +5 -5
- package/esm/TagPicker/index.js +1 -1
- package/esm/Tree/Tree.d.ts +4 -4
- package/esm/index.d.ts +6 -1
- package/esm/index.js +5 -1
- package/esm/internals/Picker/ListCheckItem.d.ts +2 -11
- package/esm/internals/Picker/ListCheckItem.js +8 -6
- package/esm/internals/Picker/PickerToggle.d.ts +4 -5
- package/esm/toaster/ToastContainer.d.ts +9 -2
- package/esm/toaster/index.d.ts +0 -1
- package/esm/toaster/index.js +0 -1
- package/esm/useToaster/index.d.ts +2 -0
- package/esm/useToaster/index.js +3 -0
- package/esm/{toaster → useToaster}/useToaster.d.ts +4 -4
- package/esm/{toaster → useToaster}/useToaster.js +4 -4
- package/esm/utils/index.d.ts +1 -0
- package/esm/utils/index.js +2 -1
- package/internals/Picker/styles/index.less +1 -1
- package/package.json +1 -1
- package/styles/index.less +2 -0
- package/useToaster/package.json +7 -0
- package/useToaster/styles/index.css +239 -0
- package/useToaster/styles/index.less +1 -0
- package/cjs/Cascader/DropdownMenu.d.ts +0 -24
- package/cjs/Cascader/DropdownMenu.js +0 -175
- package/cjs/Cascader/TreeView.d.ts +0 -24
- package/cjs/Cascader/utils.js +0 -79
- package/cjs/MultiCascader/TreeView.d.ts +0 -25
- package/cjs/MultiCascader/utils.d.ts +0 -71
- package/cjs/MultiCascader/utils.js +0 -382
- package/esm/Cascader/DropdownMenu.d.ts +0 -24
- package/esm/Cascader/DropdownMenu.js +0 -168
- package/esm/Cascader/TreeView.d.ts +0 -24
- package/esm/Cascader/utils.js +0 -74
- package/esm/MultiCascader/TreeView.d.ts +0 -25
- package/esm/MultiCascader/utils.d.ts +0 -71
- package/esm/MultiCascader/utils.js +0 -369
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { getSafeRegExpString, useEventCallback } from '../../utils';
|
|
4
|
+
function useSearch(props) {
|
|
5
|
+
var _useState = useState(''),
|
|
6
|
+
searchKeyword = _useState[0],
|
|
7
|
+
setSearchKeyword = _useState[1];
|
|
8
|
+
var labelKey = props.labelKey,
|
|
9
|
+
childrenKey = props.childrenKey,
|
|
10
|
+
parentMap = props.parentMap,
|
|
11
|
+
flattenedData = props.flattenedData,
|
|
12
|
+
parentSelectable = props.parentSelectable,
|
|
13
|
+
onSearch = props.onSearch;
|
|
14
|
+
var someKeyword = function someKeyword(item, keyword) {
|
|
15
|
+
if (item[labelKey].match(new RegExp(getSafeRegExpString(keyword || searchKeyword), 'i'))) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
var parent = parentMap.get(item);
|
|
19
|
+
if (parent && someKeyword(parent)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
};
|
|
24
|
+
var getSearchResult = function getSearchResult(keyword) {
|
|
25
|
+
var items = [];
|
|
26
|
+
var result = flattenedData.filter(function (item) {
|
|
27
|
+
if (!parentSelectable && item[childrenKey]) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return someKeyword(item, keyword);
|
|
31
|
+
});
|
|
32
|
+
for (var i = 0; i < result.length; i++) {
|
|
33
|
+
items.push(result[i]);
|
|
34
|
+
|
|
35
|
+
// A maximum of 100 search results are returned.
|
|
36
|
+
if (i === 99) {
|
|
37
|
+
return items;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return items;
|
|
41
|
+
};
|
|
42
|
+
var handleSearch = useEventCallback(function (value, event) {
|
|
43
|
+
var items = getSearchResult(value);
|
|
44
|
+
setSearchKeyword(value);
|
|
45
|
+
onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, items, event);
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
searchKeyword: searchKeyword,
|
|
49
|
+
setSearchKeyword: setSearchKeyword,
|
|
50
|
+
items: getSearchResult(),
|
|
51
|
+
handleSearch: handleSearch
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export default useSearch;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { type ItemDataType } from '../../@types/common';
|
|
3
|
+
import { type SelectNode } from '../types';
|
|
4
|
+
export interface UseSelectProps<T> {
|
|
5
|
+
value?: T | null;
|
|
6
|
+
valueKey: string;
|
|
7
|
+
childrenKey: string;
|
|
8
|
+
selectedItem?: ItemDataType<T>;
|
|
9
|
+
childrenMap: any;
|
|
10
|
+
onSelect?: (node: SelectNode<T>, event: React.SyntheticEvent) => void;
|
|
11
|
+
onChange?: (value: T, event: React.SyntheticEvent) => void;
|
|
12
|
+
getChildren?: (node: ItemDataType<T>) => readonly ItemDataType<T>[] | Promise<readonly ItemDataType<T>[]>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Hook for handling the state after the option is selected
|
|
16
|
+
*/
|
|
17
|
+
declare const useSelect: <T>(props: UseSelectProps<T>) => {
|
|
18
|
+
loadingItemsSet: any;
|
|
19
|
+
activeItem: ItemDataType<T> | undefined;
|
|
20
|
+
setActiveItem: import("react").Dispatch<import("react").SetStateAction<ItemDataType<T> | undefined>>;
|
|
21
|
+
handleSelect: (...args: any[]) => any;
|
|
22
|
+
};
|
|
23
|
+
export default useSelect;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { useSet } from 'react-use-set';
|
|
4
|
+
import { useEventCallback, useIsMounted, shallowEqual } from '../../utils';
|
|
5
|
+
/**
|
|
6
|
+
* Hook for handling the state after the option is selected
|
|
7
|
+
*/
|
|
8
|
+
var useSelect = function useSelect(props) {
|
|
9
|
+
var value = props.value,
|
|
10
|
+
onSelect = props.onSelect,
|
|
11
|
+
getChildren = props.getChildren,
|
|
12
|
+
valueKey = props.valueKey,
|
|
13
|
+
onChange = props.onChange,
|
|
14
|
+
childrenKey = props.childrenKey,
|
|
15
|
+
selectedItem = props.selectedItem,
|
|
16
|
+
childrenMap = props.childrenMap; // The item that focus is on
|
|
17
|
+
var _useState = useState(selectedItem),
|
|
18
|
+
activeItem = _useState[0],
|
|
19
|
+
setActiveItem = _useState[1];
|
|
20
|
+
var isMounted = useIsMounted();
|
|
21
|
+
var loadingItemsSet = useSet();
|
|
22
|
+
var handleSelect = useEventCallback(function (node, event) {
|
|
23
|
+
var _itemData$childrenKey;
|
|
24
|
+
var itemData = node.itemData,
|
|
25
|
+
isLeafNode = node.isLeafNode;
|
|
26
|
+
setActiveItem(itemData);
|
|
27
|
+
|
|
28
|
+
// Lazy load node's children
|
|
29
|
+
if (typeof getChildren === 'function' && ((_itemData$childrenKey = itemData[childrenKey]) === null || _itemData$childrenKey === void 0 ? void 0 : _itemData$childrenKey.length) === 0 && !childrenMap.has(itemData)) {
|
|
30
|
+
loadingItemsSet.add(itemData);
|
|
31
|
+
var children = getChildren(itemData);
|
|
32
|
+
if (children instanceof Promise) {
|
|
33
|
+
children.then(function (data) {
|
|
34
|
+
if (isMounted()) {
|
|
35
|
+
loadingItemsSet.delete(itemData);
|
|
36
|
+
childrenMap.set(itemData, data);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
loadingItemsSet.delete(itemData);
|
|
41
|
+
childrenMap.set(itemData, children);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (isLeafNode) {
|
|
45
|
+
var nextValue = itemData[valueKey];
|
|
46
|
+
if (!shallowEqual(value, nextValue)) {
|
|
47
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, event);
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
loadingItemsSet: loadingItemsSet,
|
|
54
|
+
activeItem: activeItem,
|
|
55
|
+
setActiveItem: setActiveItem,
|
|
56
|
+
handleSelect: handleSelect
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export default useSelect;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ItemDataType, DataProps, WithAsProps, ToArray } from '../@types/common';
|
|
3
|
+
export interface SelectNode<T> {
|
|
4
|
+
itemData: ItemDataType<T>;
|
|
5
|
+
cascadePaths: ItemDataType<T>[];
|
|
6
|
+
isLeafNode: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CascadeColumn<T> {
|
|
9
|
+
items: readonly ItemDataType<T>[];
|
|
10
|
+
parentItem?: ItemDataType<T>;
|
|
11
|
+
layer?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface CascadeTreeProps<T, V = T> extends WithAsProps, DataProps<ItemDataType<T>> {
|
|
14
|
+
/**
|
|
15
|
+
* Initial value
|
|
16
|
+
*/
|
|
17
|
+
defaultValue?: V;
|
|
18
|
+
/**
|
|
19
|
+
* Selected value
|
|
20
|
+
*/
|
|
21
|
+
value?: V;
|
|
22
|
+
/**
|
|
23
|
+
* Sets the width of the menu
|
|
24
|
+
*/
|
|
25
|
+
columnWidth?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Sets the height of the menu
|
|
28
|
+
*/
|
|
29
|
+
columnHeight?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Disabled items
|
|
32
|
+
*/
|
|
33
|
+
disabledItemValues?: ToArray<NonNullable<T>>;
|
|
34
|
+
/**
|
|
35
|
+
* Whether dispaly search input box
|
|
36
|
+
*/
|
|
37
|
+
searchable?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Custom render columns
|
|
40
|
+
*/
|
|
41
|
+
renderColumn?: (childNodes: React.ReactNode, column: CascadeColumn<T>) => React.ReactNode;
|
|
42
|
+
/**
|
|
43
|
+
* Custom render tree node
|
|
44
|
+
*/
|
|
45
|
+
renderTreeNode?: (node: React.ReactNode, itemData: ItemDataType<T>) => React.ReactNode;
|
|
46
|
+
/**
|
|
47
|
+
* Custom render search items
|
|
48
|
+
*/
|
|
49
|
+
renderSearchItem?: (node: React.ReactNode, items: ItemDataType<T>[]) => React.ReactNode;
|
|
50
|
+
/**
|
|
51
|
+
* Called when the option is selected
|
|
52
|
+
*/
|
|
53
|
+
onSelect?: (value: ItemDataType<T>, selectedPaths: ItemDataType<T>[], event: React.SyntheticEvent) => void;
|
|
54
|
+
/**
|
|
55
|
+
* Called after the value has been changed
|
|
56
|
+
*/
|
|
57
|
+
onChange?: (value: V, event: React.SyntheticEvent) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Called when searching
|
|
60
|
+
*/
|
|
61
|
+
onSearch?: (value: string, event: React.SyntheticEvent) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Asynchronously load the children of the tree node.
|
|
64
|
+
*/
|
|
65
|
+
getChildren?: (childNodes: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
|
|
66
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use client';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ItemDataType } from '../@types/common';
|
|
3
|
+
declare type GetColumnsAndPathsOptions<T> = {
|
|
4
|
+
getParent: (item: T) => T | undefined;
|
|
5
|
+
getChildren: (item: T) => readonly T[] | undefined;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Calculate columns to be displayed:
|
|
9
|
+
*
|
|
10
|
+
* - Every ancestor level of activeItem should be displayed
|
|
11
|
+
* - The level that activeItem is at should be displayed
|
|
12
|
+
* - If activeItem is a parent node, its child level should be displayed
|
|
13
|
+
*
|
|
14
|
+
* @param items
|
|
15
|
+
* @param value
|
|
16
|
+
* @param options
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare function getColumnsAndPaths<T extends Record<string, unknown>>(items: readonly T[], pathTarget: T | undefined, options: GetColumnsAndPathsOptions<T>): {
|
|
20
|
+
columns: (readonly T[])[];
|
|
21
|
+
path: T[];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Highlight the search keyword in the label
|
|
25
|
+
*/
|
|
26
|
+
export declare function highlightLabel<T>(props: {
|
|
27
|
+
item: ItemDataType<T>;
|
|
28
|
+
labelKey: string;
|
|
29
|
+
searchKeyword: string;
|
|
30
|
+
render: (patch: React.ReactNode, index: number) => React.ReactNode;
|
|
31
|
+
}): import("react").ReactNode[];
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { getSafeRegExpString } from '../utils';
|
|
3
|
+
/**
|
|
4
|
+
* Calculate columns to be displayed:
|
|
5
|
+
*
|
|
6
|
+
* - Every ancestor level of activeItem should be displayed
|
|
7
|
+
* - The level that activeItem is at should be displayed
|
|
8
|
+
* - If activeItem is a parent node, its child level should be displayed
|
|
9
|
+
*
|
|
10
|
+
* @param items
|
|
11
|
+
* @param value
|
|
12
|
+
* @param options
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
export function getColumnsAndPaths(items, pathTarget, options) {
|
|
16
|
+
var getParent = options.getParent,
|
|
17
|
+
getChildren = options.getChildren;
|
|
18
|
+
if (!pathTarget) {
|
|
19
|
+
return {
|
|
20
|
+
columns: [items],
|
|
21
|
+
path: []
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
var columns = [];
|
|
25
|
+
var path = [pathTarget];
|
|
26
|
+
var children = getChildren(pathTarget);
|
|
27
|
+
if (children && children.length > 0) {
|
|
28
|
+
columns.unshift(children);
|
|
29
|
+
}
|
|
30
|
+
for (var parent = getParent(pathTarget); !!parent; parent = getParent(parent)) {
|
|
31
|
+
var _getChildren;
|
|
32
|
+
columns.unshift((_getChildren = getChildren(parent)) !== null && _getChildren !== void 0 ? _getChildren : []);
|
|
33
|
+
path.unshift(parent);
|
|
34
|
+
}
|
|
35
|
+
columns.unshift(items);
|
|
36
|
+
return {
|
|
37
|
+
columns: columns,
|
|
38
|
+
path: path
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Highlight the search keyword in the label
|
|
44
|
+
*/
|
|
45
|
+
export function highlightLabel(props) {
|
|
46
|
+
var item = props.item,
|
|
47
|
+
searchKeyword = props.searchKeyword,
|
|
48
|
+
labelKey = props.labelKey,
|
|
49
|
+
render = props.render;
|
|
50
|
+
var regx = new RegExp(getSafeRegExpString(searchKeyword), 'ig');
|
|
51
|
+
var labelElements = [];
|
|
52
|
+
var strArr = item[labelKey].split(regx);
|
|
53
|
+
var highStrArr = item[labelKey].match(regx);
|
|
54
|
+
for (var i = 0; i < strArr.length; i++) {
|
|
55
|
+
labelElements.push(strArr[i]);
|
|
56
|
+
if (highStrArr !== null && highStrArr !== void 0 && highStrArr[i]) {
|
|
57
|
+
labelElements.push(render(highStrArr[i], i));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return labelElements;
|
|
61
|
+
}
|
|
@@ -1,35 +1,66 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { CascadeTreeProps } from '../CascadeTree/types';
|
|
2
3
|
import { PickerLocale } from '../locales';
|
|
3
4
|
import { PickerHandle, PickerToggleProps } from '../internals/Picker';
|
|
4
|
-
import { ItemDataType, FormControlPickerProps } from '../@types/common';
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/** Whether dispaly search input box */
|
|
12
|
-
searchable?: boolean;
|
|
13
|
-
/** The menu is displayed directly when the component is initialized */
|
|
5
|
+
import { ItemDataType, DataItemValue, FormControlPickerProps } from '../@types/common';
|
|
6
|
+
export interface CascaderProps<T = DataItemValue> extends FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, CascadeTreeProps<T>, Pick<PickerToggleProps, 'label' | 'caretAs' | 'loading'> {
|
|
7
|
+
/**
|
|
8
|
+
* The panel is displayed directly when the component is initialized
|
|
9
|
+
* @deprecated Use CascadeTree instead
|
|
10
|
+
* @see CascadeTree https://rsuitejs.com/components/cascade-tree
|
|
11
|
+
*/
|
|
14
12
|
inline?: boolean;
|
|
15
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* When true, make the parent node selectable
|
|
15
|
+
*/
|
|
16
16
|
parentSelectable?: boolean;
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Custom popup style
|
|
19
|
+
*/
|
|
20
|
+
popupClassName?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Custom popup style
|
|
23
|
+
*/
|
|
24
|
+
popupStyle?: React.CSSProperties;
|
|
25
|
+
/**
|
|
26
|
+
* Custom menu class name
|
|
27
|
+
* @deprecated Use popupClassName instead
|
|
28
|
+
*/
|
|
29
|
+
menuClassName?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Custom menu style
|
|
32
|
+
* @deprecated Use popupStyle instead
|
|
33
|
+
*/
|
|
34
|
+
menuStyle?: React.CSSProperties;
|
|
35
|
+
/**
|
|
36
|
+
* Sets the width of the menu.
|
|
37
|
+
*
|
|
38
|
+
* @deprecated Use columnWidth instead
|
|
39
|
+
*/
|
|
40
|
+
menuWidth?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Sets the height of the menu
|
|
43
|
+
* @deprecated Use columnHeight instead
|
|
44
|
+
*/
|
|
45
|
+
menuHeight?: number | string;
|
|
46
|
+
/**
|
|
47
|
+
* Custom render menu
|
|
48
|
+
* @deprecated Use renderColumn instead
|
|
49
|
+
*/
|
|
50
|
+
renderMenu?: (items: readonly ItemDataType<T>[], menu: React.ReactNode, parentNode?: any, layer?: number) => React.ReactNode;
|
|
51
|
+
/**
|
|
52
|
+
* Custom render menu item
|
|
53
|
+
* @deprecated Use renderTreeNode instead
|
|
54
|
+
*/
|
|
55
|
+
renderMenuItem?: (node: React.ReactNode, item: ItemDataType<T>) => React.ReactNode;
|
|
56
|
+
/**
|
|
57
|
+
* Custom render selected items
|
|
58
|
+
*/
|
|
59
|
+
renderValue?: (value: T, selectedPaths: ItemDataType<T>[], selectedElement: React.ReactNode) => React.ReactNode;
|
|
60
|
+
/**
|
|
61
|
+
* Called when clean
|
|
62
|
+
*/
|
|
28
63
|
onClean?: (event: React.SyntheticEvent) => void;
|
|
29
|
-
/** Called when searching */
|
|
30
|
-
onSearch?: (searchKeyword: string, event: React.SyntheticEvent) => void;
|
|
31
|
-
/** Asynchronously load the children of the tree node. */
|
|
32
|
-
getChildren?: (node: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
|
|
33
64
|
}
|
|
34
65
|
export interface CascaderComponent {
|
|
35
66
|
<T>(props: CascaderProps<T> & {
|