rsuite 5.56.0 → 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/CHANGELOG.md +16 -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 +187 -192
- package/Cascader/styles/index.less +1 -122
- 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 +72 -69
- package/MultiCascader/styles/index.less +11 -31
- 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/InlineEdit/InlineEdit.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 +20 -20
- 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/Tree/Tree.d.ts +4 -4
- package/cjs/index.d.ts +6 -1
- package/cjs/index.js +8 -3
- 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 +64 -61
- 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 +64 -61
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +64 -61
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +64 -61
- package/dist/rsuite.js +242 -44
- 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/InlineEdit/InlineEdit.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 +20 -20
- 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/Tree/Tree.d.ts +4 -4
- package/esm/index.d.ts +6 -1
- package/esm/index.js +5 -1
- 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/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,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { DataItemValue } from '../@types/common';
|
|
3
|
+
import type { MultiCascadeTreeProps } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* The `MultiCascadeTree` component is used to select multiple values from cascading options.
|
|
6
|
+
* @see https://rsuitejs.com/components/multi-cascade-tree/
|
|
7
|
+
*/
|
|
8
|
+
declare const MultiCascadeTree: React.ForwardRefExoticComponent<MultiCascadeTreeProps<DataItemValue, DataItemValue[]> & React.RefAttributes<unknown>>;
|
|
9
|
+
export default MultiCascadeTree;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import TreeView from './TreeView';
|
|
6
|
+
import { useCascadeValue, useSelect, useSearch } from './hooks';
|
|
7
|
+
import { useClassNames, useControlled } from '../utils';
|
|
8
|
+
import SearchView from './SearchView';
|
|
9
|
+
var emptyArray = [];
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `MultiCascadeTree` component is used to select multiple values from cascading options.
|
|
13
|
+
* @see https://rsuitejs.com/components/multi-cascade-tree/
|
|
14
|
+
*/
|
|
15
|
+
var MultiCascadeTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
16
|
+
var _props$as = props.as,
|
|
17
|
+
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
18
|
+
_props$data = props.data,
|
|
19
|
+
data = _props$data === void 0 ? emptyArray : _props$data,
|
|
20
|
+
defaultValue = props.defaultValue,
|
|
21
|
+
className = props.className,
|
|
22
|
+
_props$classPrefix = props.classPrefix,
|
|
23
|
+
classPrefix = _props$classPrefix === void 0 ? 'cascade-tree' : _props$classPrefix,
|
|
24
|
+
valueProp = props.value,
|
|
25
|
+
_props$valueKey = props.valueKey,
|
|
26
|
+
valueKey = _props$valueKey === void 0 ? 'value' : _props$valueKey,
|
|
27
|
+
_props$labelKey = props.labelKey,
|
|
28
|
+
labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
|
|
29
|
+
_props$childrenKey = props.childrenKey,
|
|
30
|
+
childrenKey = _props$childrenKey === void 0 ? 'children' : _props$childrenKey,
|
|
31
|
+
_props$disabledItemVa = props.disabledItemValues,
|
|
32
|
+
disabledItemValues = _props$disabledItemVa === void 0 ? emptyArray : _props$disabledItemVa,
|
|
33
|
+
_props$cascade = props.cascade,
|
|
34
|
+
cascade = _props$cascade === void 0 ? true : _props$cascade,
|
|
35
|
+
columnWidth = props.columnWidth,
|
|
36
|
+
columnHeight = props.columnHeight,
|
|
37
|
+
searchable = props.searchable,
|
|
38
|
+
_props$uncheckableIte = props.uncheckableItemValues,
|
|
39
|
+
uncheckableItemValues = _props$uncheckableIte === void 0 ? emptyArray : _props$uncheckableIte,
|
|
40
|
+
getChildren = props.getChildren,
|
|
41
|
+
renderColumn = props.renderColumn,
|
|
42
|
+
renderTreeNode = props.renderTreeNode,
|
|
43
|
+
onSelect = props.onSelect,
|
|
44
|
+
onCheck = props.onCheck,
|
|
45
|
+
onChange = props.onChange,
|
|
46
|
+
onSearch = props.onSearch,
|
|
47
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "data", "defaultValue", "className", "classPrefix", "value", "valueKey", "labelKey", "childrenKey", "disabledItemValues", "cascade", "columnWidth", "columnHeight", "searchable", "uncheckableItemValues", "getChildren", "renderColumn", "renderTreeNode", "onSelect", "onCheck", "onChange", "onSearch"]);
|
|
48
|
+
var itemKeys = {
|
|
49
|
+
childrenKey: childrenKey,
|
|
50
|
+
labelKey: labelKey,
|
|
51
|
+
valueKey: valueKey
|
|
52
|
+
};
|
|
53
|
+
var _useSelect = useSelect({
|
|
54
|
+
data: data,
|
|
55
|
+
childrenKey: childrenKey,
|
|
56
|
+
labelKey: labelKey,
|
|
57
|
+
valueKey: valueKey,
|
|
58
|
+
onSelect: onSelect,
|
|
59
|
+
getChildren: getChildren
|
|
60
|
+
}),
|
|
61
|
+
selectedPaths = _useSelect.selectedPaths,
|
|
62
|
+
flattenData = _useSelect.flattenData,
|
|
63
|
+
columnData = _useSelect.columnData,
|
|
64
|
+
handleSelect = _useSelect.handleSelect;
|
|
65
|
+
var _useControlled = useControlled(valueProp, defaultValue),
|
|
66
|
+
controlledValue = _useControlled[0];
|
|
67
|
+
var cascadeValueProps = _extends({}, itemKeys, {
|
|
68
|
+
uncheckableItemValues: uncheckableItemValues,
|
|
69
|
+
cascade: cascade,
|
|
70
|
+
value: controlledValue,
|
|
71
|
+
onCheck: onCheck,
|
|
72
|
+
onChange: onChange
|
|
73
|
+
});
|
|
74
|
+
var _useCascadeValue = useCascadeValue(cascadeValueProps, flattenData),
|
|
75
|
+
value = _useCascadeValue.value,
|
|
76
|
+
handleCheck = _useCascadeValue.handleCheck;
|
|
77
|
+
var _useSearch = useSearch({
|
|
78
|
+
labelKey: labelKey,
|
|
79
|
+
valueKey: valueKey,
|
|
80
|
+
childrenKey: childrenKey,
|
|
81
|
+
flattenedData: flattenData,
|
|
82
|
+
uncheckableItemValues: uncheckableItemValues,
|
|
83
|
+
onSearch: onSearch
|
|
84
|
+
}),
|
|
85
|
+
items = _useSearch.items,
|
|
86
|
+
searchKeyword = _useSearch.searchKeyword,
|
|
87
|
+
handleSearch = _useSearch.handleSearch;
|
|
88
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
89
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
90
|
+
merge = _useClassNames.merge;
|
|
91
|
+
var classes = merge(className, withClassPrefix('multi'));
|
|
92
|
+
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
93
|
+
ref: ref,
|
|
94
|
+
className: classes
|
|
95
|
+
}, rest), searchable && /*#__PURE__*/React.createElement(SearchView, {
|
|
96
|
+
data: items,
|
|
97
|
+
value: value,
|
|
98
|
+
searchKeyword: searchKeyword,
|
|
99
|
+
valueKey: valueKey,
|
|
100
|
+
labelKey: labelKey,
|
|
101
|
+
childrenKey: childrenKey,
|
|
102
|
+
disabledItemValues: disabledItemValues,
|
|
103
|
+
onCheck: handleCheck,
|
|
104
|
+
onSearch: handleSearch
|
|
105
|
+
}), !searchKeyword && /*#__PURE__*/React.createElement(TreeView, {
|
|
106
|
+
cascade: cascade,
|
|
107
|
+
columnWidth: columnWidth,
|
|
108
|
+
columnHeight: columnHeight,
|
|
109
|
+
uncheckableItemValues: uncheckableItemValues,
|
|
110
|
+
disabledItemValues: disabledItemValues,
|
|
111
|
+
valueKey: valueKey,
|
|
112
|
+
labelKey: labelKey,
|
|
113
|
+
childrenKey: childrenKey,
|
|
114
|
+
classPrefix: classPrefix,
|
|
115
|
+
cascadeData: columnData,
|
|
116
|
+
cascadePaths: selectedPaths,
|
|
117
|
+
value: value,
|
|
118
|
+
onSelect: handleSelect,
|
|
119
|
+
onCheck: handleCheck,
|
|
120
|
+
renderColumn: renderColumn,
|
|
121
|
+
renderTreeNode: renderTreeNode
|
|
122
|
+
}));
|
|
123
|
+
});
|
|
124
|
+
MultiCascadeTree.displayName = 'MultiCascadeTree';
|
|
125
|
+
export default MultiCascadeTree;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ItemDataType, WithAsProps } from '../@types/common';
|
|
3
|
+
interface SearchViewProps<T> extends WithAsProps {
|
|
4
|
+
searchKeyword: string;
|
|
5
|
+
labelKey: string;
|
|
6
|
+
valueKey: string;
|
|
7
|
+
childrenKey: string;
|
|
8
|
+
value: T[];
|
|
9
|
+
data: ItemDataType<T>[];
|
|
10
|
+
disabledItemValues: any[];
|
|
11
|
+
cascade?: boolean;
|
|
12
|
+
onSearch: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
13
|
+
onCheck: (item: ItemDataType<T>, event: React.SyntheticEvent, checked: boolean) => void;
|
|
14
|
+
inputRef?: React.RefObject<HTMLInputElement>;
|
|
15
|
+
}
|
|
16
|
+
declare function SearchView<T>(props: SearchViewProps<T>): JSX.Element;
|
|
17
|
+
export default SearchView;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { useClassNames, useCustom } from '../utils';
|
|
6
|
+
import { getNodeParents } from '../utils/treeUtils';
|
|
7
|
+
import SearchBox from '../internals/SearchBox';
|
|
8
|
+
import Checkbox from '../Checkbox';
|
|
9
|
+
import { isSomeChildChecked } from './utils';
|
|
10
|
+
import { highlightLabel } from '../CascadeTree/utils';
|
|
11
|
+
function SearchView(props) {
|
|
12
|
+
var _props$as = props.as,
|
|
13
|
+
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
14
|
+
_props$classPrefix = props.classPrefix,
|
|
15
|
+
classPrefix = _props$classPrefix === void 0 ? 'cascade-search-view' : _props$classPrefix,
|
|
16
|
+
className = props.className,
|
|
17
|
+
searchKeyword = props.searchKeyword,
|
|
18
|
+
childrenKey = props.childrenKey,
|
|
19
|
+
labelKey = props.labelKey,
|
|
20
|
+
valueKey = props.valueKey,
|
|
21
|
+
value = props.value,
|
|
22
|
+
data = props.data,
|
|
23
|
+
disabledItemValues = props.disabledItemValues,
|
|
24
|
+
inputRef = props.inputRef,
|
|
25
|
+
cascade = props.cascade,
|
|
26
|
+
onSearch = props.onSearch,
|
|
27
|
+
onCheck = props.onCheck,
|
|
28
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "searchKeyword", "childrenKey", "labelKey", "valueKey", "value", "data", "disabledItemValues", "inputRef", "cascade", "onSearch", "onCheck"]);
|
|
29
|
+
var _useClassNames = useClassNames(classPrefix),
|
|
30
|
+
merge = _useClassNames.merge,
|
|
31
|
+
prefix = _useClassNames.prefix,
|
|
32
|
+
withClassPrefix = _useClassNames.withClassPrefix,
|
|
33
|
+
rootPrefix = _useClassNames.rootPrefix;
|
|
34
|
+
var classes = merge(className, withClassPrefix());
|
|
35
|
+
var _useCustom = useCustom('Picker'),
|
|
36
|
+
locale = _useCustom.locale;
|
|
37
|
+
var renderSearchRow = function renderSearchRow(item, key) {
|
|
38
|
+
var _extends2;
|
|
39
|
+
var nodes = getNodeParents(item);
|
|
40
|
+
var label = highlightLabel({
|
|
41
|
+
item: item,
|
|
42
|
+
labelKey: labelKey,
|
|
43
|
+
searchKeyword: searchKeyword,
|
|
44
|
+
render: function render(patch, index) {
|
|
45
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
46
|
+
key: index,
|
|
47
|
+
className: prefix('match')
|
|
48
|
+
}, patch);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
nodes.push(_extends({}, item, (_extends2 = {}, _extends2[labelKey] = label, _extends2)));
|
|
52
|
+
var active = value.some(function (value) {
|
|
53
|
+
if (cascade) {
|
|
54
|
+
return nodes.some(function (node) {
|
|
55
|
+
return node[valueKey] === value;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return item[valueKey] === value;
|
|
59
|
+
});
|
|
60
|
+
var disabled = disabledItemValues.some(function (value) {
|
|
61
|
+
return nodes.some(function (node) {
|
|
62
|
+
return node[valueKey] === value;
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
var rowClasses = prefix('row', {
|
|
66
|
+
'row-disabled': disabled
|
|
67
|
+
});
|
|
68
|
+
var indeterminate = cascade && !active && isSomeChildChecked(item, value, {
|
|
69
|
+
valueKey: valueKey,
|
|
70
|
+
childrenKey: childrenKey
|
|
71
|
+
});
|
|
72
|
+
var handleChange = function handleChange(_value, checked, event) {
|
|
73
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(item, event, checked);
|
|
74
|
+
};
|
|
75
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
76
|
+
role: "treeitem",
|
|
77
|
+
"aria-disabled": disabled,
|
|
78
|
+
key: key,
|
|
79
|
+
className: rowClasses,
|
|
80
|
+
"data-key": item[valueKey]
|
|
81
|
+
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
82
|
+
disabled: disabled,
|
|
83
|
+
checked: active,
|
|
84
|
+
value: item[valueKey],
|
|
85
|
+
indeterminate: indeterminate,
|
|
86
|
+
onChange: handleChange
|
|
87
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
88
|
+
className: prefix('col-group')
|
|
89
|
+
}, nodes.map(function (node, index) {
|
|
90
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
91
|
+
key: "col-" + index,
|
|
92
|
+
className: prefix('col')
|
|
93
|
+
}, node[labelKey]);
|
|
94
|
+
}))));
|
|
95
|
+
};
|
|
96
|
+
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
97
|
+
className: classes
|
|
98
|
+
}, rest), /*#__PURE__*/React.createElement(SearchBox, {
|
|
99
|
+
placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
|
|
100
|
+
onChange: onSearch,
|
|
101
|
+
value: searchKeyword,
|
|
102
|
+
inputRef: inputRef
|
|
103
|
+
}), searchKeyword !== '' && /*#__PURE__*/React.createElement("div", {
|
|
104
|
+
className: prefix('panel'),
|
|
105
|
+
"data-layer": 0,
|
|
106
|
+
role: "tree"
|
|
107
|
+
}, data.length ? data.map(renderSearchRow) : /*#__PURE__*/React.createElement("div", {
|
|
108
|
+
className: merge(prefix('none'), rootPrefix('picker-none'))
|
|
109
|
+
}, locale.noResultsText)));
|
|
110
|
+
}
|
|
111
|
+
export default SearchView;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ItemDataType, WithAsProps, RsRefForwardingComponent } from '../@types/common';
|
|
3
|
+
import type { CascadeColumn } from '../CascadeTree/types';
|
|
4
|
+
export interface TreeViewProps<T = any> extends WithAsProps {
|
|
5
|
+
disabledItemValues?: T[];
|
|
6
|
+
value: T[];
|
|
7
|
+
childrenKey: string;
|
|
8
|
+
valueKey: string;
|
|
9
|
+
labelKey: string;
|
|
10
|
+
columnWidth?: number;
|
|
11
|
+
columnHeight?: number | string;
|
|
12
|
+
cascade?: boolean;
|
|
13
|
+
cascadeData: (readonly ItemDataType<T>[])[];
|
|
14
|
+
cascadePaths?: ItemDataType<T>[];
|
|
15
|
+
uncheckableItemValues: T[];
|
|
16
|
+
renderTreeNode?: (node: React.ReactNode, item: ItemDataType<T>) => React.ReactNode;
|
|
17
|
+
renderColumn?: (childNodes: React.ReactNode, column: CascadeColumn<T>) => React.ReactNode;
|
|
18
|
+
onCheck?: (node: ItemDataType<T>, event: React.SyntheticEvent, checked: boolean) => void;
|
|
19
|
+
onSelect?: (node: ItemDataType<T>, cascadePaths: ItemDataType<T>[], event: React.SyntheticEvent) => void;
|
|
20
|
+
}
|
|
21
|
+
declare const TreeView: RsRefForwardingComponent<'div', TreeViewProps>;
|
|
22
|
+
export default TreeView;
|
|
@@ -9,15 +9,11 @@ import { useClassNames, shallowEqual, useCustom, useEventCallback } from '../uti
|
|
|
9
9
|
import { ListCheckItem, useCombobox } from '../internals/Picker';
|
|
10
10
|
import { isSomeParentChecked, isSomeChildChecked } from './utils';
|
|
11
11
|
var emptyArray = [];
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* TODO: reuse Menu from Cascader for consistent behavior
|
|
15
|
-
*/
|
|
16
12
|
var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
17
13
|
var _props$as = props.as,
|
|
18
14
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
19
15
|
_props$classPrefix = props.classPrefix,
|
|
20
|
-
classPrefix = _props$classPrefix === void 0 ? '
|
|
16
|
+
classPrefix = _props$classPrefix === void 0 ? 'tree' : _props$classPrefix,
|
|
21
17
|
className = props.className,
|
|
22
18
|
cascade = props.cascade,
|
|
23
19
|
_props$cascadeData = props.cascadeData,
|
|
@@ -28,10 +24,10 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
28
24
|
childrenKey = _props$childrenKey === void 0 ? 'children' : _props$childrenKey,
|
|
29
25
|
_props$disabledItemVa = props.disabledItemValues,
|
|
30
26
|
disabledItemValues = _props$disabledItemVa === void 0 ? emptyArray : _props$disabledItemVa,
|
|
31
|
-
_props$
|
|
32
|
-
|
|
33
|
-
_props$
|
|
34
|
-
|
|
27
|
+
_props$columnWidth = props.columnWidth,
|
|
28
|
+
columnWidth = _props$columnWidth === void 0 ? 156 : _props$columnWidth,
|
|
29
|
+
_props$columnHeight = props.columnHeight,
|
|
30
|
+
columnHeight = _props$columnHeight === void 0 ? 200 : _props$columnHeight,
|
|
35
31
|
_props$uncheckableIte = props.uncheckableItemValues,
|
|
36
32
|
uncheckableItemValues = _props$uncheckableIte === void 0 ? emptyArray : _props$uncheckableIte,
|
|
37
33
|
value = props.value,
|
|
@@ -40,11 +36,11 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
40
36
|
_props$labelKey = props.labelKey,
|
|
41
37
|
labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
|
|
42
38
|
style = props.style,
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
renderTreeNode = props.renderTreeNode,
|
|
40
|
+
renderColumn = props.renderColumn,
|
|
45
41
|
_onCheck = props.onCheck,
|
|
46
42
|
onSelect = props.onSelect,
|
|
47
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "cascade", "cascadeData", "cascadePaths", "childrenKey", "disabledItemValues", "
|
|
43
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "cascade", "cascadeData", "cascadePaths", "childrenKey", "disabledItemValues", "columnWidth", "columnHeight", "uncheckableItemValues", "value", "valueKey", "labelKey", "style", "renderTreeNode", "renderColumn", "onCheck", "onSelect"]);
|
|
48
44
|
var _useClassNames = useClassNames(classPrefix),
|
|
49
45
|
merge = _useClassNames.merge,
|
|
50
46
|
prefix = _useClassNames.prefix;
|
|
@@ -122,19 +118,19 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
122
118
|
},
|
|
123
119
|
checkable: !uncheckable,
|
|
124
120
|
labelClickable: false
|
|
125
|
-
},
|
|
121
|
+
}, renderTreeNode ? renderTreeNode(label, node) : label, children ? /*#__PURE__*/React.createElement(Icon, {
|
|
126
122
|
className: prefix('caret'),
|
|
127
123
|
spin: node.loading
|
|
128
124
|
}) : null);
|
|
129
125
|
};
|
|
130
126
|
var columnStyles = {
|
|
131
|
-
height:
|
|
132
|
-
width:
|
|
127
|
+
height: columnHeight,
|
|
128
|
+
width: columnWidth
|
|
133
129
|
};
|
|
134
130
|
var cascadeNodes = cascadeData.map(function (children, layer) {
|
|
135
131
|
var uncheckableCount = 0;
|
|
136
132
|
var onlyKey = layer + "_" + children.length;
|
|
137
|
-
var
|
|
133
|
+
var childNodes = /*#__PURE__*/React.createElement(React.Fragment, null, children.map(function (item, index) {
|
|
138
134
|
var uncheckable = uncheckableItemValues.some(function (uncheckableValue) {
|
|
139
135
|
return shallowEqual(uncheckableValue, item[valueKey]);
|
|
140
136
|
});
|
|
@@ -151,7 +147,7 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
151
147
|
size: children.length
|
|
152
148
|
});
|
|
153
149
|
}));
|
|
154
|
-
var
|
|
150
|
+
var parentItem = cascadePaths[layer - 1];
|
|
155
151
|
var columnClasses = prefix('column', {
|
|
156
152
|
'column-uncheckable': uncheckableCount === children.length
|
|
157
153
|
});
|
|
@@ -161,14 +157,18 @@ var TreeView = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
161
157
|
className: columnClasses,
|
|
162
158
|
"data-layer": layer,
|
|
163
159
|
style: columnStyles
|
|
164
|
-
},
|
|
160
|
+
}, renderColumn ? renderColumn(childNodes, {
|
|
161
|
+
items: children,
|
|
162
|
+
parentItem: parentItem,
|
|
163
|
+
layer: layer
|
|
164
|
+
}) : childNodes);
|
|
165
165
|
});
|
|
166
166
|
var styles = _extends({}, style, {
|
|
167
|
-
width: cascadeData.length *
|
|
167
|
+
width: cascadeData.length * columnWidth
|
|
168
168
|
});
|
|
169
169
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
|
170
170
|
role: "tree",
|
|
171
|
-
id: id + "-" + popupType,
|
|
171
|
+
id: id ? id + "-" + popupType : undefined,
|
|
172
172
|
"aria-labelledby": labelId,
|
|
173
173
|
"aria-multiselectable": multiple
|
|
174
174
|
}, rest, {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as useFlattenData } from './useFlattenData';
|
|
2
|
+
export { default as useSelect } from './useSelect';
|
|
3
|
+
export { default as useColumnData } from './useColumnData';
|
|
4
|
+
export { default as useCascadeValue } from './useCascadeValue';
|
|
5
|
+
export { default as useSearch } from './useSearch';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
export { default as useFlattenData } from './useFlattenData';
|
|
3
|
+
export { default as useSelect } from './useSelect';
|
|
4
|
+
export { default as useColumnData } from './useColumnData';
|
|
5
|
+
export { default as useCascadeValue } from './useCascadeValue';
|
|
6
|
+
export { default as useSearch } from './useSearch';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { MultiCascadeTreeProps, ItemKeys } from '../types';
|
|
3
|
+
import { type ItemType } from '../utils';
|
|
4
|
+
/**
|
|
5
|
+
* A hook that converts the value into a cascading value
|
|
6
|
+
* @param props
|
|
7
|
+
* @param flattenData
|
|
8
|
+
*/
|
|
9
|
+
declare function useCascadeValue<T>(props: Partial<MultiCascadeTreeProps<T>> & ItemKeys, flattenData: ItemType<T>[]): {
|
|
10
|
+
value: T[];
|
|
11
|
+
setValue: import("react").Dispatch<import("react").SetStateAction<T[]>>;
|
|
12
|
+
splitValue: (item: ItemType<T>, checked: boolean, value: T[]) => {
|
|
13
|
+
value: T[];
|
|
14
|
+
removedValue: T[];
|
|
15
|
+
};
|
|
16
|
+
handleCheck: (...args: any[]) => any;
|
|
17
|
+
};
|
|
18
|
+
export default useCascadeValue;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import uniq from 'lodash/uniq';
|
|
4
|
+
import remove from 'lodash/remove';
|
|
5
|
+
import { useEventCallback } from '../../utils';
|
|
6
|
+
import { getParents, removeAllChildrenValue, getOtherItemValuesByUnselectChild } from '../utils';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A hook that converts the value into a cascading value
|
|
10
|
+
* @param props
|
|
11
|
+
* @param flattenData
|
|
12
|
+
*/
|
|
13
|
+
function useCascadeValue(props, flattenData) {
|
|
14
|
+
var valueKey = props.valueKey,
|
|
15
|
+
childrenKey = props.childrenKey,
|
|
16
|
+
uncheckableItemValues = props.uncheckableItemValues,
|
|
17
|
+
cascade = props.cascade,
|
|
18
|
+
valueProp = props.value,
|
|
19
|
+
onChange = props.onChange,
|
|
20
|
+
onCheck = props.onCheck;
|
|
21
|
+
/**
|
|
22
|
+
* Get the values of all children
|
|
23
|
+
*/
|
|
24
|
+
var getChildrenValue = useCallback(function (item) {
|
|
25
|
+
var values = [];
|
|
26
|
+
if (!item[childrenKey]) {
|
|
27
|
+
return values;
|
|
28
|
+
}
|
|
29
|
+
item[childrenKey].forEach(function (n) {
|
|
30
|
+
if (uncheckableItemValues && !uncheckableItemValues.some(function (v) {
|
|
31
|
+
return v === n[valueKey];
|
|
32
|
+
})) {
|
|
33
|
+
values.push(n[valueKey]);
|
|
34
|
+
}
|
|
35
|
+
values = values.concat(getChildrenValue(n));
|
|
36
|
+
});
|
|
37
|
+
return values;
|
|
38
|
+
}, [childrenKey, uncheckableItemValues, valueKey]);
|
|
39
|
+
var splitValue = useCallback(function (item, checked, value) {
|
|
40
|
+
var itemValue = item[valueKey];
|
|
41
|
+
var childrenValue = getChildrenValue(item);
|
|
42
|
+
var parents = getParents(item);
|
|
43
|
+
var nextValue = [].concat(value);
|
|
44
|
+
var removedValue = [];
|
|
45
|
+
if (checked) {
|
|
46
|
+
nextValue.push(itemValue);
|
|
47
|
+
|
|
48
|
+
// Delete all values under the current node
|
|
49
|
+
removedValue = removedValue.concat(removeAllChildrenValue(nextValue, item, {
|
|
50
|
+
valueKey: valueKey,
|
|
51
|
+
childrenKey: childrenKey
|
|
52
|
+
}) || []);
|
|
53
|
+
|
|
54
|
+
// Traverse all ancestor nodes of the current node
|
|
55
|
+
// Then determine whether all the child nodes of these nodes are selected, and then they themselves must be selected
|
|
56
|
+
var _loop = function _loop(i) {
|
|
57
|
+
// Whether the parent node can be selected
|
|
58
|
+
var isCheckableParent = !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
|
|
59
|
+
return v === parents[i][valueKey];
|
|
60
|
+
}));
|
|
61
|
+
if (isCheckableParent) {
|
|
62
|
+
var isCheckAll = parents[i][childrenKey]
|
|
63
|
+
// Filter out options that are marked as not selectable
|
|
64
|
+
.filter(function (n) {
|
|
65
|
+
return !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
|
|
66
|
+
return v === n[valueKey];
|
|
67
|
+
}));
|
|
68
|
+
})
|
|
69
|
+
// Check if all nodes are selected
|
|
70
|
+
.every(function (n) {
|
|
71
|
+
return nextValue.some(function (v) {
|
|
72
|
+
return v === n[valueKey];
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
if (isCheckAll) {
|
|
76
|
+
// Add parent node value
|
|
77
|
+
nextValue.push(parents[i][valueKey]);
|
|
78
|
+
|
|
79
|
+
// Delete all values under the parent node
|
|
80
|
+
removedValue = removedValue.concat(removeAllChildrenValue(nextValue, parents[i], {
|
|
81
|
+
valueKey: valueKey,
|
|
82
|
+
childrenKey: childrenKey
|
|
83
|
+
}) || []);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
for (var i = 0; i < parents.length; i++) {
|
|
88
|
+
_loop(i);
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
var tempValue = childrenValue.concat(parents.map(function (item) {
|
|
92
|
+
return item[valueKey];
|
|
93
|
+
}));
|
|
94
|
+
nextValue = nextValue.concat(getOtherItemValuesByUnselectChild(item, nextValue, {
|
|
95
|
+
valueKey: valueKey,
|
|
96
|
+
childrenKey: childrenKey
|
|
97
|
+
}));
|
|
98
|
+
|
|
99
|
+
// Delete related child and parent nodes
|
|
100
|
+
removedValue = remove(nextValue, function (v) {
|
|
101
|
+
// Delete yourself
|
|
102
|
+
if (v === itemValue) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return tempValue.some(function (n) {
|
|
106
|
+
return n === v;
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
var uniqValue = uniq(nextValue);
|
|
111
|
+
var uniqRemovedValue = uniq(removedValue);
|
|
112
|
+
return {
|
|
113
|
+
value: uniqValue,
|
|
114
|
+
removedValue: uniqRemovedValue
|
|
115
|
+
};
|
|
116
|
+
}, [valueKey, childrenKey, uncheckableItemValues, getChildrenValue]);
|
|
117
|
+
var transformValue = useCallback(function (value) {
|
|
118
|
+
if (value === void 0) {
|
|
119
|
+
value = [];
|
|
120
|
+
}
|
|
121
|
+
if (!cascade) {
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
var tempRemovedValue = [];
|
|
125
|
+
var nextValue = [];
|
|
126
|
+
var _loop2 = function _loop2(i) {
|
|
127
|
+
// If the value in the current value is already in the deleted list, it will not be processed
|
|
128
|
+
if (tempRemovedValue.some(function (v) {
|
|
129
|
+
return v === value[i];
|
|
130
|
+
})) {
|
|
131
|
+
return "continue";
|
|
132
|
+
}
|
|
133
|
+
var item = flattenData.find(function (v) {
|
|
134
|
+
return v[valueKey] === value[i];
|
|
135
|
+
});
|
|
136
|
+
if (!item) {
|
|
137
|
+
return "continue";
|
|
138
|
+
}
|
|
139
|
+
var sv = splitValue(item, true, value);
|
|
140
|
+
tempRemovedValue = uniq(tempRemovedValue.concat(sv.removedValue));
|
|
141
|
+
|
|
142
|
+
// Get all relevant values
|
|
143
|
+
nextValue = uniq(nextValue.concat(sv.value));
|
|
144
|
+
};
|
|
145
|
+
for (var i = 0; i < value.length; i++) {
|
|
146
|
+
var _ret = _loop2(i);
|
|
147
|
+
if (_ret === "continue") continue;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Finally traverse all nextValue, and delete if its parent node is also nextValue
|
|
151
|
+
return nextValue.filter(function (v) {
|
|
152
|
+
var item = flattenData.find(function (n) {
|
|
153
|
+
return n[valueKey] === v;
|
|
154
|
+
});
|
|
155
|
+
if (item !== null && item !== void 0 && item.parent && nextValue.some(function (v) {
|
|
156
|
+
var _item$parent;
|
|
157
|
+
return v === ((_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[valueKey]);
|
|
158
|
+
})) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
});
|
|
163
|
+
}, [cascade, flattenData, splitValue, valueKey]);
|
|
164
|
+
var _useState = useState(transformValue(valueProp) || []),
|
|
165
|
+
value = _useState[0],
|
|
166
|
+
setValue = _useState[1];
|
|
167
|
+
useEffect(function () {
|
|
168
|
+
// Update value when valueProp is updated.
|
|
169
|
+
setValue(transformValue(valueProp) || []);
|
|
170
|
+
}, [transformValue, valueProp]);
|
|
171
|
+
var handleCheck = useEventCallback(function (node, event, checked) {
|
|
172
|
+
var nodeValue = node[valueKey];
|
|
173
|
+
var nextValue = [];
|
|
174
|
+
if (cascade) {
|
|
175
|
+
nextValue = splitValue(node, checked, value).value;
|
|
176
|
+
} else {
|
|
177
|
+
nextValue = [].concat(value);
|
|
178
|
+
if (checked) {
|
|
179
|
+
nextValue.push(nodeValue);
|
|
180
|
+
} else {
|
|
181
|
+
nextValue = nextValue.filter(function (n) {
|
|
182
|
+
return n !== nodeValue;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
setValue(nextValue);
|
|
187
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
188
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
|
|
189
|
+
});
|
|
190
|
+
return {
|
|
191
|
+
value: value,
|
|
192
|
+
setValue: setValue,
|
|
193
|
+
splitValue: splitValue,
|
|
194
|
+
handleCheck: handleCheck
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export default useCascadeValue;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type MayHasParent<T extends Record<string, unknown>> = T & {
|
|
3
|
+
parent?: MayHasParent<T>;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* A hook for column data
|
|
7
|
+
* @param flattenData
|
|
8
|
+
*/
|
|
9
|
+
declare function useColumnData<T extends MayHasParent<Record<string, unknown>>>(flattenData: T[]): {
|
|
10
|
+
columnData: (readonly T[])[];
|
|
11
|
+
addColumn: (column: T[], index: number) => void;
|
|
12
|
+
removeColumnByIndex: (index: number) => void;
|
|
13
|
+
setColumnData: import("react").Dispatch<import("react").SetStateAction<(readonly T[])[]>>;
|
|
14
|
+
enforceUpdateColumnData: (nextData: T[]) => void;
|
|
15
|
+
};
|
|
16
|
+
export default useColumnData;
|