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,202 @@
|
|
|
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 _uniq = _interopRequireDefault(require("lodash/uniq"));
|
|
9
|
+
var _remove = _interopRequireDefault(require("lodash/remove"));
|
|
10
|
+
var _utils = require("../../utils");
|
|
11
|
+
var _utils2 = require("../utils");
|
|
12
|
+
/**
|
|
13
|
+
* A hook that converts the value into a cascading value
|
|
14
|
+
* @param props
|
|
15
|
+
* @param flattenData
|
|
16
|
+
*/
|
|
17
|
+
function useCascadeValue(props, flattenData) {
|
|
18
|
+
var valueKey = props.valueKey,
|
|
19
|
+
childrenKey = props.childrenKey,
|
|
20
|
+
uncheckableItemValues = props.uncheckableItemValues,
|
|
21
|
+
cascade = props.cascade,
|
|
22
|
+
valueProp = props.value,
|
|
23
|
+
onChange = props.onChange,
|
|
24
|
+
onCheck = props.onCheck;
|
|
25
|
+
/**
|
|
26
|
+
* Get the values of all children
|
|
27
|
+
*/
|
|
28
|
+
var getChildrenValue = (0, _react.useCallback)(function (item) {
|
|
29
|
+
var values = [];
|
|
30
|
+
if (!item[childrenKey]) {
|
|
31
|
+
return values;
|
|
32
|
+
}
|
|
33
|
+
item[childrenKey].forEach(function (n) {
|
|
34
|
+
if (uncheckableItemValues && !uncheckableItemValues.some(function (v) {
|
|
35
|
+
return v === n[valueKey];
|
|
36
|
+
})) {
|
|
37
|
+
values.push(n[valueKey]);
|
|
38
|
+
}
|
|
39
|
+
values = values.concat(getChildrenValue(n));
|
|
40
|
+
});
|
|
41
|
+
return values;
|
|
42
|
+
}, [childrenKey, uncheckableItemValues, valueKey]);
|
|
43
|
+
var splitValue = (0, _react.useCallback)(function (item, checked, value) {
|
|
44
|
+
var itemValue = item[valueKey];
|
|
45
|
+
var childrenValue = getChildrenValue(item);
|
|
46
|
+
var parents = (0, _utils2.getParents)(item);
|
|
47
|
+
var nextValue = [].concat(value);
|
|
48
|
+
var removedValue = [];
|
|
49
|
+
if (checked) {
|
|
50
|
+
nextValue.push(itemValue);
|
|
51
|
+
|
|
52
|
+
// Delete all values under the current node
|
|
53
|
+
removedValue = removedValue.concat((0, _utils2.removeAllChildrenValue)(nextValue, item, {
|
|
54
|
+
valueKey: valueKey,
|
|
55
|
+
childrenKey: childrenKey
|
|
56
|
+
}) || []);
|
|
57
|
+
|
|
58
|
+
// Traverse all ancestor nodes of the current node
|
|
59
|
+
// Then determine whether all the child nodes of these nodes are selected, and then they themselves must be selected
|
|
60
|
+
var _loop = function _loop(i) {
|
|
61
|
+
// Whether the parent node can be selected
|
|
62
|
+
var isCheckableParent = !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
|
|
63
|
+
return v === parents[i][valueKey];
|
|
64
|
+
}));
|
|
65
|
+
if (isCheckableParent) {
|
|
66
|
+
var isCheckAll = parents[i][childrenKey]
|
|
67
|
+
// Filter out options that are marked as not selectable
|
|
68
|
+
.filter(function (n) {
|
|
69
|
+
return !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
|
|
70
|
+
return v === n[valueKey];
|
|
71
|
+
}));
|
|
72
|
+
})
|
|
73
|
+
// Check if all nodes are selected
|
|
74
|
+
.every(function (n) {
|
|
75
|
+
return nextValue.some(function (v) {
|
|
76
|
+
return v === n[valueKey];
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
if (isCheckAll) {
|
|
80
|
+
// Add parent node value
|
|
81
|
+
nextValue.push(parents[i][valueKey]);
|
|
82
|
+
|
|
83
|
+
// Delete all values under the parent node
|
|
84
|
+
removedValue = removedValue.concat((0, _utils2.removeAllChildrenValue)(nextValue, parents[i], {
|
|
85
|
+
valueKey: valueKey,
|
|
86
|
+
childrenKey: childrenKey
|
|
87
|
+
}) || []);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
for (var i = 0; i < parents.length; i++) {
|
|
92
|
+
_loop(i);
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
var tempValue = childrenValue.concat(parents.map(function (item) {
|
|
96
|
+
return item[valueKey];
|
|
97
|
+
}));
|
|
98
|
+
nextValue = nextValue.concat((0, _utils2.getOtherItemValuesByUnselectChild)(item, nextValue, {
|
|
99
|
+
valueKey: valueKey,
|
|
100
|
+
childrenKey: childrenKey
|
|
101
|
+
}));
|
|
102
|
+
|
|
103
|
+
// Delete related child and parent nodes
|
|
104
|
+
removedValue = (0, _remove.default)(nextValue, function (v) {
|
|
105
|
+
// Delete yourself
|
|
106
|
+
if (v === itemValue) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return tempValue.some(function (n) {
|
|
110
|
+
return n === v;
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
var uniqValue = (0, _uniq.default)(nextValue);
|
|
115
|
+
var uniqRemovedValue = (0, _uniq.default)(removedValue);
|
|
116
|
+
return {
|
|
117
|
+
value: uniqValue,
|
|
118
|
+
removedValue: uniqRemovedValue
|
|
119
|
+
};
|
|
120
|
+
}, [valueKey, childrenKey, uncheckableItemValues, getChildrenValue]);
|
|
121
|
+
var transformValue = (0, _react.useCallback)(function (value) {
|
|
122
|
+
if (value === void 0) {
|
|
123
|
+
value = [];
|
|
124
|
+
}
|
|
125
|
+
if (!cascade) {
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
var tempRemovedValue = [];
|
|
129
|
+
var nextValue = [];
|
|
130
|
+
var _loop2 = function _loop2(i) {
|
|
131
|
+
// If the value in the current value is already in the deleted list, it will not be processed
|
|
132
|
+
if (tempRemovedValue.some(function (v) {
|
|
133
|
+
return v === value[i];
|
|
134
|
+
})) {
|
|
135
|
+
return "continue";
|
|
136
|
+
}
|
|
137
|
+
var item = flattenData.find(function (v) {
|
|
138
|
+
return v[valueKey] === value[i];
|
|
139
|
+
});
|
|
140
|
+
if (!item) {
|
|
141
|
+
return "continue";
|
|
142
|
+
}
|
|
143
|
+
var sv = splitValue(item, true, value);
|
|
144
|
+
tempRemovedValue = (0, _uniq.default)(tempRemovedValue.concat(sv.removedValue));
|
|
145
|
+
|
|
146
|
+
// Get all relevant values
|
|
147
|
+
nextValue = (0, _uniq.default)(nextValue.concat(sv.value));
|
|
148
|
+
};
|
|
149
|
+
for (var i = 0; i < value.length; i++) {
|
|
150
|
+
var _ret = _loop2(i);
|
|
151
|
+
if (_ret === "continue") continue;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Finally traverse all nextValue, and delete if its parent node is also nextValue
|
|
155
|
+
return nextValue.filter(function (v) {
|
|
156
|
+
var item = flattenData.find(function (n) {
|
|
157
|
+
return n[valueKey] === v;
|
|
158
|
+
});
|
|
159
|
+
if (item !== null && item !== void 0 && item.parent && nextValue.some(function (v) {
|
|
160
|
+
var _item$parent;
|
|
161
|
+
return v === ((_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[valueKey]);
|
|
162
|
+
})) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
return true;
|
|
166
|
+
});
|
|
167
|
+
}, [cascade, flattenData, splitValue, valueKey]);
|
|
168
|
+
var _useState = (0, _react.useState)(transformValue(valueProp) || []),
|
|
169
|
+
value = _useState[0],
|
|
170
|
+
setValue = _useState[1];
|
|
171
|
+
(0, _react.useEffect)(function () {
|
|
172
|
+
// Update value when valueProp is updated.
|
|
173
|
+
setValue(transformValue(valueProp) || []);
|
|
174
|
+
}, [transformValue, valueProp]);
|
|
175
|
+
var handleCheck = (0, _utils.useEventCallback)(function (node, event, checked) {
|
|
176
|
+
var nodeValue = node[valueKey];
|
|
177
|
+
var nextValue = [];
|
|
178
|
+
if (cascade) {
|
|
179
|
+
nextValue = splitValue(node, checked, value).value;
|
|
180
|
+
} else {
|
|
181
|
+
nextValue = [].concat(value);
|
|
182
|
+
if (checked) {
|
|
183
|
+
nextValue.push(nodeValue);
|
|
184
|
+
} else {
|
|
185
|
+
nextValue = nextValue.filter(function (n) {
|
|
186
|
+
return n !== nodeValue;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
setValue(nextValue);
|
|
191
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
192
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(nextValue, node, checked, event);
|
|
193
|
+
});
|
|
194
|
+
return {
|
|
195
|
+
value: value,
|
|
196
|
+
setValue: setValue,
|
|
197
|
+
splitValue: splitValue,
|
|
198
|
+
handleCheck: handleCheck
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
var _default = useCascadeValue;
|
|
202
|
+
exports.default = _default;
|
|
@@ -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;
|
|
@@ -0,0 +1,52 @@
|
|
|
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 _slice = _interopRequireDefault(require("lodash/slice"));
|
|
9
|
+
var _treeUtils = require("../../utils/treeUtils");
|
|
10
|
+
/**
|
|
11
|
+
* A hook for column data
|
|
12
|
+
* @param flattenData
|
|
13
|
+
*/
|
|
14
|
+
function useColumnData(flattenData) {
|
|
15
|
+
// The columns displayed in the cascading panel.
|
|
16
|
+
var _useState = (0, _react.useState)([flattenData.filter(function (item) {
|
|
17
|
+
return !item.parent;
|
|
18
|
+
})]),
|
|
19
|
+
columnData = _useState[0],
|
|
20
|
+
setColumnData = _useState[1];
|
|
21
|
+
/**
|
|
22
|
+
* Add a list of options to the cascading panel. Used for lazy loading options.
|
|
23
|
+
* @param column
|
|
24
|
+
* @param index The index of the current column.
|
|
25
|
+
*/
|
|
26
|
+
function addColumn(column, index) {
|
|
27
|
+
setColumnData([].concat((0, _slice.default)(columnData, 0, index), [column]));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Remove subsequent columns of the specified column
|
|
32
|
+
* @param index
|
|
33
|
+
*/
|
|
34
|
+
function removeColumnByIndex(index) {
|
|
35
|
+
setColumnData([].concat((0, _slice.default)(columnData, 0, index)));
|
|
36
|
+
}
|
|
37
|
+
function enforceUpdateColumnData(nextData) {
|
|
38
|
+
var nextFlattenData = (0, _treeUtils.UNSAFE_flattenTree)(nextData);
|
|
39
|
+
setColumnData([nextFlattenData.filter(function (item) {
|
|
40
|
+
return !item.parent;
|
|
41
|
+
})]);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
columnData: columnData,
|
|
45
|
+
addColumn: addColumn,
|
|
46
|
+
removeColumnByIndex: removeColumnByIndex,
|
|
47
|
+
setColumnData: setColumnData,
|
|
48
|
+
enforceUpdateColumnData: enforceUpdateColumnData
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
var _default = useColumnData;
|
|
52
|
+
exports.default = _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ItemKeys } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* A hook to flatten tree structure data
|
|
4
|
+
*/
|
|
5
|
+
declare function useFlattenData<T>(data: T[], itemKeys: ItemKeys): {
|
|
6
|
+
addFlattenData: (children: T[], parent: T) => void;
|
|
7
|
+
flattenData: T[];
|
|
8
|
+
};
|
|
9
|
+
export default useFlattenData;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
var _treeUtils = require("../../utils/treeUtils");
|
|
8
|
+
var _attachParent = require("../../utils/attachParent");
|
|
9
|
+
/**
|
|
10
|
+
* A hook to flatten tree structure data
|
|
11
|
+
*/
|
|
12
|
+
function useFlattenData(data, itemKeys) {
|
|
13
|
+
var childrenKey = itemKeys.childrenKey;
|
|
14
|
+
var _useState = (0, _react.useState)((0, _treeUtils.UNSAFE_flattenTree)(data, itemKeys.childrenKey)),
|
|
15
|
+
flattenData = _useState[0],
|
|
16
|
+
setFlattenData = _useState[1];
|
|
17
|
+
var addFlattenData = (0, _react.useCallback)(function (children, parent) {
|
|
18
|
+
var nodes = children.map(function (child) {
|
|
19
|
+
return (0, _attachParent.attachParent)(child, parent);
|
|
20
|
+
});
|
|
21
|
+
parent[childrenKey] = nodes;
|
|
22
|
+
setFlattenData([].concat(flattenData, nodes));
|
|
23
|
+
}, [childrenKey, flattenData]);
|
|
24
|
+
(0, _react.useEffect)(function () {
|
|
25
|
+
setFlattenData((0, _treeUtils.UNSAFE_flattenTree)(data, itemKeys.childrenKey));
|
|
26
|
+
}, [data, itemKeys.childrenKey]);
|
|
27
|
+
return {
|
|
28
|
+
addFlattenData: addFlattenData,
|
|
29
|
+
flattenData: flattenData
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
var _default = useFlattenData;
|
|
33
|
+
exports.default = _default;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ItemDataType } from '../../@types/common';
|
|
3
|
+
interface SearchPanelProps<T> {
|
|
4
|
+
labelKey: string;
|
|
5
|
+
valueKey: string;
|
|
6
|
+
childrenKey: string;
|
|
7
|
+
flattenedData: ItemDataType<T>[];
|
|
8
|
+
uncheckableItemValues?: any[];
|
|
9
|
+
onSearch?: (value: string, event: React.SyntheticEvent) => void;
|
|
10
|
+
}
|
|
11
|
+
declare function useSearch<T>(props: SearchPanelProps<T>): {
|
|
12
|
+
searchKeyword: string;
|
|
13
|
+
setSearchKeyword: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
14
|
+
items: ItemDataType<T>[];
|
|
15
|
+
handleSearch: (...args: any[]) => any;
|
|
16
|
+
};
|
|
17
|
+
export default useSearch;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
var _utils = require("../../utils");
|
|
8
|
+
function useSearch(props) {
|
|
9
|
+
var _useState = (0, _react.useState)(''),
|
|
10
|
+
searchKeyword = _useState[0],
|
|
11
|
+
setSearchKeyword = _useState[1];
|
|
12
|
+
var labelKey = props.labelKey,
|
|
13
|
+
valueKey = props.valueKey,
|
|
14
|
+
flattenedData = props.flattenedData,
|
|
15
|
+
uncheckableItemValues = props.uncheckableItemValues,
|
|
16
|
+
onSearch = props.onSearch;
|
|
17
|
+
var getSearchResult = function getSearchResult() {
|
|
18
|
+
var items = [];
|
|
19
|
+
var result = flattenedData.filter(function (item) {
|
|
20
|
+
if (uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (value) {
|
|
21
|
+
return item[valueKey] === value;
|
|
22
|
+
})) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (item[labelKey].match(new RegExp((0, _utils.getSafeRegExpString)(searchKeyword), 'i'))) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
});
|
|
30
|
+
for (var i = 0; i < result.length; i++) {
|
|
31
|
+
items.push(result[i]);
|
|
32
|
+
|
|
33
|
+
// A maximum of 100 search results are returned.
|
|
34
|
+
if (i === 99) {
|
|
35
|
+
return items;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return items;
|
|
39
|
+
};
|
|
40
|
+
var handleSearch = (0, _utils.useEventCallback)(function (value, event) {
|
|
41
|
+
setSearchKeyword(value);
|
|
42
|
+
onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, event);
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
searchKeyword: searchKeyword,
|
|
46
|
+
setSearchKeyword: setSearchKeyword,
|
|
47
|
+
items: getSearchResult(),
|
|
48
|
+
handleSearch: handleSearch
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
var _default = useSearch;
|
|
52
|
+
exports.default = _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ItemDataType } from '../../@types/common';
|
|
3
|
+
export interface UseSelectProps<T> {
|
|
4
|
+
data: ItemDataType<T>[];
|
|
5
|
+
childrenKey: string;
|
|
6
|
+
labelKey: string;
|
|
7
|
+
valueKey: string;
|
|
8
|
+
onSelect?: (node: ItemDataType<T>, cascadePaths: ItemDataType<T>[], event: React.SyntheticEvent) => void;
|
|
9
|
+
getChildren?: (node: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
|
|
10
|
+
}
|
|
11
|
+
declare const useSelect: <T>(props: UseSelectProps<T>) => {
|
|
12
|
+
columnData: (readonly ItemDataType<T>[])[];
|
|
13
|
+
setColumnData: React.Dispatch<React.SetStateAction<(readonly ItemDataType<T>[])[]>>;
|
|
14
|
+
flattenData: ItemDataType<T>[];
|
|
15
|
+
selectedPaths: ItemDataType<T>[] | undefined;
|
|
16
|
+
setSelectedPaths: React.Dispatch<React.SetStateAction<ItemDataType<T>[] | undefined>>;
|
|
17
|
+
handleSelect: (...args: any[]) => any;
|
|
18
|
+
};
|
|
19
|
+
export default useSelect;
|
|
@@ -0,0 +1,83 @@
|
|
|
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 _utils = require("../../utils");
|
|
9
|
+
var _useFlattenData2 = _interopRequireDefault(require("./useFlattenData"));
|
|
10
|
+
var _useColumnData2 = _interopRequireDefault(require("./useColumnData"));
|
|
11
|
+
var useSelect = function useSelect(props) {
|
|
12
|
+
var data = props.data,
|
|
13
|
+
childrenKey = props.childrenKey,
|
|
14
|
+
labelKey = props.labelKey,
|
|
15
|
+
valueKey = props.valueKey,
|
|
16
|
+
onSelect = props.onSelect,
|
|
17
|
+
getChildren = props.getChildren;
|
|
18
|
+
var itemKeys = {
|
|
19
|
+
childrenKey: childrenKey,
|
|
20
|
+
labelKey: labelKey,
|
|
21
|
+
valueKey: valueKey
|
|
22
|
+
};
|
|
23
|
+
var _useFlattenData = (0, _useFlattenData2.default)(data, itemKeys),
|
|
24
|
+
flattenData = _useFlattenData.flattenData,
|
|
25
|
+
addFlattenData = _useFlattenData.addFlattenData; // The columns displayed in the cascading panel.
|
|
26
|
+
var _useColumnData = (0, _useColumnData2.default)(flattenData),
|
|
27
|
+
columnData = _useColumnData.columnData,
|
|
28
|
+
addColumn = _useColumnData.addColumn,
|
|
29
|
+
setColumnData = _useColumnData.setColumnData,
|
|
30
|
+
removeColumnByIndex = _useColumnData.removeColumnByIndex,
|
|
31
|
+
enforceUpdateColumnData = _useColumnData.enforceUpdateColumnData;
|
|
32
|
+
(0, _utils.useUpdateEffect)(function () {
|
|
33
|
+
enforceUpdateColumnData(data);
|
|
34
|
+
}, [data]);
|
|
35
|
+
var isMounted = (0, _utils.useIsMounted)();
|
|
36
|
+
|
|
37
|
+
// The path after cascading data selection.
|
|
38
|
+
var _useState = (0, _react.useState)(),
|
|
39
|
+
selectedPaths = _useState[0],
|
|
40
|
+
setSelectedPaths = _useState[1];
|
|
41
|
+
var handleSelect = (0, _utils.useEventCallback)(function (node, cascadePaths, event) {
|
|
42
|
+
var _node$childrenKey, _node$childrenKey2;
|
|
43
|
+
setSelectedPaths(cascadePaths);
|
|
44
|
+
var columnIndex = cascadePaths.length;
|
|
45
|
+
|
|
46
|
+
// Lazy load node's children
|
|
47
|
+
if (typeof getChildren === 'function' && ((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) === 0) {
|
|
48
|
+
node.loading = true;
|
|
49
|
+
var children = getChildren(node);
|
|
50
|
+
if (children instanceof Promise) {
|
|
51
|
+
children.then(function (data) {
|
|
52
|
+
node.loading = false;
|
|
53
|
+
node[childrenKey] = data;
|
|
54
|
+
if (isMounted()) {
|
|
55
|
+
addFlattenData(data, node);
|
|
56
|
+
addColumn(data, columnIndex);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
node.loading = false;
|
|
61
|
+
node[childrenKey] = children;
|
|
62
|
+
addFlattenData(children, node);
|
|
63
|
+
addColumn(children, columnIndex);
|
|
64
|
+
}
|
|
65
|
+
} else if ((_node$childrenKey2 = node[childrenKey]) !== null && _node$childrenKey2 !== void 0 && _node$childrenKey2.length) {
|
|
66
|
+
addColumn(node[childrenKey], columnIndex);
|
|
67
|
+
} else {
|
|
68
|
+
// Removes subsequent columns of the current column when the clicked node is a leaf node.
|
|
69
|
+
removeColumnByIndex(columnIndex);
|
|
70
|
+
}
|
|
71
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
columnData: columnData,
|
|
75
|
+
setColumnData: setColumnData,
|
|
76
|
+
flattenData: flattenData,
|
|
77
|
+
selectedPaths: selectedPaths,
|
|
78
|
+
setSelectedPaths: setSelectedPaths,
|
|
79
|
+
handleSelect: handleSelect
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
var _default = useSelect;
|
|
83
|
+
exports.default = _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
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 _MultiCascadeTree = _interopRequireDefault(require("./MultiCascadeTree"));
|
|
8
|
+
var _default = _MultiCascadeTree.default;
|
|
9
|
+
exports.default = _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { CascadeTreeProps } from '../CascadeTree/types';
|
|
3
|
+
import type { ItemDataType, ToArray, WithAsProps } from '../@types/common';
|
|
4
|
+
export interface ItemKeys {
|
|
5
|
+
valueKey: string;
|
|
6
|
+
labelKey: string;
|
|
7
|
+
childrenKey: string;
|
|
8
|
+
}
|
|
9
|
+
export interface MultiCascadeTreeProps<T, V = T[]> extends WithAsProps, CascadeTreeProps<T, V> {
|
|
10
|
+
/**
|
|
11
|
+
* When set to true, selecting a child node will update the state of the parent node.
|
|
12
|
+
*/
|
|
13
|
+
cascade?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Disabled items
|
|
16
|
+
*/
|
|
17
|
+
disabledItemValues?: ToArray<NonNullable<T>>;
|
|
18
|
+
/**
|
|
19
|
+
* Set the option value for the check box not to be rendered
|
|
20
|
+
*/
|
|
21
|
+
uncheckableItemValues?: T[];
|
|
22
|
+
/**
|
|
23
|
+
* Called after the checkbox state changes.
|
|
24
|
+
*/
|
|
25
|
+
onCheck?: (value: T[], node: ItemDataType<T>, checked: boolean, event: React.SyntheticEvent) => void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ItemDataType } from '../@types/common';
|
|
2
|
+
export interface ItemType<T = any> extends ItemDataType<T> {
|
|
3
|
+
parent?: ItemType<T>;
|
|
4
|
+
}
|
|
5
|
+
interface ItemKeys {
|
|
6
|
+
valueKey: string;
|
|
7
|
+
labelKey: string;
|
|
8
|
+
childrenKey: string;
|
|
9
|
+
}
|
|
10
|
+
declare type MayHasParent<T extends Record<string, unknown>> = T & {
|
|
11
|
+
parent?: MayHasParent<T>;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Get all parents of a node
|
|
15
|
+
* @param node
|
|
16
|
+
*/
|
|
17
|
+
export declare const getParents: <T extends Record<string, unknown>>(node: MayHasParent<T>) => MayHasParent<T>[];
|
|
18
|
+
/**
|
|
19
|
+
* Check if any child nodes are selected.
|
|
20
|
+
* @param node
|
|
21
|
+
* @param value
|
|
22
|
+
* @param itemKeys
|
|
23
|
+
*/
|
|
24
|
+
export declare const isSomeChildChecked: <T extends Record<string, unknown>>(node: T, value: T[], itemKeys: Omit<ItemKeys, 'labelKey'>) => any;
|
|
25
|
+
/**
|
|
26
|
+
* Check if the parent is selected.
|
|
27
|
+
* @param node
|
|
28
|
+
* @param value
|
|
29
|
+
* @param itemKeys
|
|
30
|
+
*/
|
|
31
|
+
export declare const isSomeParentChecked: <T extends Record<string, unknown>>(node: MayHasParent<T>, value: T[], itemKeys: Pick<ItemKeys, 'valueKey'>) => any;
|
|
32
|
+
export declare const getOtherItemValuesByUnselectChild: <T>(itemNode: ItemType, value: any, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[];
|
|
33
|
+
/**
|
|
34
|
+
* Remove the values of all children.
|
|
35
|
+
*/
|
|
36
|
+
export declare const removeAllChildrenValue: <T>(value: T[], item: ItemType, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[] | undefined;
|
|
37
|
+
export {};
|