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.
Files changed (223) hide show
  1. package/AutoComplete/styles/index.css +3 -3
  2. package/CHANGELOG.md +33 -0
  3. package/CascadeTree/package.json +7 -0
  4. package/CascadeTree/styles/index.css +273 -0
  5. package/CascadeTree/styles/index.less +77 -0
  6. package/CascadeTree/styles/search.less +45 -0
  7. package/Cascader/styles/index.css +190 -195
  8. package/Cascader/styles/index.less +1 -122
  9. package/CheckPicker/styles/index.css +142 -40
  10. package/CheckPicker/styles/index.less +1 -1
  11. package/CheckTree/styles/index.css +143 -41
  12. package/CheckTreePicker/styles/index.css +143 -41
  13. package/CheckTreePicker/styles/index.less +2 -2
  14. package/Checkbox/styles/index.css +159 -36
  15. package/Checkbox/styles/index.less +32 -13
  16. package/DatePicker/styles/index.css +3 -3
  17. package/DateRangePicker/styles/index.css +3 -3
  18. package/InputPicker/styles/index.css +3 -3
  19. package/MultiCascadeTree/package.json +7 -0
  20. package/MultiCascadeTree/styles/index.css +3701 -0
  21. package/MultiCascadeTree/styles/index.less +37 -0
  22. package/MultiCascader/styles/index.css +213 -108
  23. package/MultiCascader/styles/index.less +11 -31
  24. package/Pagination/styles/index.css +3 -3
  25. package/Radio/styles/index.css +133 -19
  26. package/Radio/styles/index.less +28 -12
  27. package/RadioGroup/styles/index.css +1 -1
  28. package/RadioGroup/styles/index.less +1 -1
  29. package/SelectPicker/styles/index.css +3 -3
  30. package/TagGroup/styles/index.css +1 -1
  31. package/TagGroup/styles/index.less +1 -1
  32. package/TagInput/styles/index.css +141 -39
  33. package/TagPicker/styles/index.css +141 -39
  34. package/cjs/@types/common.d.ts +12 -14
  35. package/cjs/CascadeTree/CascadeTree.d.ts +16 -0
  36. package/cjs/CascadeTree/CascadeTree.js +174 -0
  37. package/cjs/CascadeTree/SearchView.d.ts +17 -0
  38. package/cjs/CascadeTree/SearchView.js +106 -0
  39. package/cjs/CascadeTree/TreeView.d.ts +20 -0
  40. package/cjs/{Cascader → CascadeTree}/TreeView.js +42 -33
  41. package/cjs/CascadeTree/hooks/index.d.ts +3 -0
  42. package/cjs/CascadeTree/hooks/index.js +12 -0
  43. package/cjs/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  44. package/cjs/CascadeTree/hooks/usePaths.js +42 -0
  45. package/cjs/CascadeTree/hooks/useSearch.d.ts +17 -0
  46. package/cjs/CascadeTree/hooks/useSearch.js +59 -0
  47. package/cjs/CascadeTree/hooks/useSelect.d.ts +23 -0
  48. package/cjs/CascadeTree/hooks/useSelect.js +64 -0
  49. package/cjs/CascadeTree/index.d.ts +4 -0
  50. package/cjs/CascadeTree/index.js +9 -0
  51. package/cjs/CascadeTree/types.d.ts +66 -0
  52. package/cjs/CascadeTree/types.js +2 -0
  53. package/cjs/CascadeTree/utils.d.ts +32 -0
  54. package/cjs/CascadeTree/utils.js +66 -0
  55. package/cjs/Cascader/Cascader.d.ts +57 -26
  56. package/cjs/Cascader/Cascader.js +180 -247
  57. package/cjs/Cascader/useActive.d.ts +15 -0
  58. package/cjs/Cascader/useActive.js +43 -0
  59. package/cjs/Checkbox/Checkbox.d.ts +67 -25
  60. package/cjs/Checkbox/Checkbox.js +36 -26
  61. package/cjs/InlineEdit/InlineEdit.d.ts +1 -1
  62. package/cjs/InputPicker/InputPicker.js +2 -2
  63. package/cjs/InputPicker/InputPickerContext.d.ts +1 -1
  64. package/cjs/Loader/Loader.js +5 -4
  65. package/cjs/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  66. package/cjs/MultiCascadeTree/MultiCascadeTree.js +131 -0
  67. package/cjs/MultiCascadeTree/SearchView.d.ts +17 -0
  68. package/cjs/MultiCascadeTree/SearchView.js +117 -0
  69. package/cjs/MultiCascadeTree/TreeView.d.ts +22 -0
  70. package/cjs/{MultiCascader → MultiCascadeTree}/TreeView.js +22 -21
  71. package/cjs/MultiCascadeTree/hooks/index.d.ts +5 -0
  72. package/cjs/MultiCascadeTree/hooks/index.js +16 -0
  73. package/cjs/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  74. package/cjs/MultiCascadeTree/hooks/useCascadeValue.js +202 -0
  75. package/cjs/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  76. package/cjs/MultiCascadeTree/hooks/useColumnData.js +52 -0
  77. package/cjs/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  78. package/cjs/MultiCascadeTree/hooks/useFlattenData.js +33 -0
  79. package/cjs/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  80. package/cjs/MultiCascadeTree/hooks/useSearch.js +52 -0
  81. package/cjs/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  82. package/cjs/MultiCascadeTree/hooks/useSelect.js +83 -0
  83. package/cjs/MultiCascadeTree/index.d.ts +4 -0
  84. package/cjs/MultiCascadeTree/index.js +9 -0
  85. package/cjs/MultiCascadeTree/types.d.ts +26 -0
  86. package/cjs/MultiCascadeTree/types.js +2 -0
  87. package/cjs/MultiCascadeTree/utils.d.ts +37 -0
  88. package/cjs/MultiCascadeTree/utils.js +140 -0
  89. package/cjs/MultiCascader/MultiCascader.d.ts +57 -29
  90. package/cjs/MultiCascader/MultiCascader.js +175 -287
  91. package/cjs/Radio/Radio.d.ts +42 -16
  92. package/cjs/Radio/Radio.js +42 -37
  93. package/cjs/RadioGroup/RadioGroup.d.ts +1 -1
  94. package/cjs/RadioGroup/RadioGroup.js +3 -3
  95. package/cjs/TagPicker/index.js +1 -1
  96. package/cjs/Tree/Tree.d.ts +4 -4
  97. package/cjs/index.d.ts +6 -1
  98. package/cjs/index.js +8 -3
  99. package/cjs/internals/Picker/ListCheckItem.d.ts +2 -11
  100. package/cjs/internals/Picker/ListCheckItem.js +8 -6
  101. package/cjs/internals/Picker/PickerToggle.d.ts +4 -5
  102. package/cjs/toaster/ToastContainer.d.ts +9 -2
  103. package/cjs/toaster/index.d.ts +0 -1
  104. package/cjs/toaster/index.js +1 -3
  105. package/cjs/useToaster/index.d.ts +2 -0
  106. package/cjs/useToaster/index.js +9 -0
  107. package/cjs/{toaster → useToaster}/useToaster.d.ts +4 -4
  108. package/cjs/{toaster → useToaster}/useToaster.js +4 -4
  109. package/cjs/utils/index.d.ts +1 -0
  110. package/cjs/utils/index.js +5 -2
  111. package/dist/rsuite-no-reset-rtl.css +322 -124
  112. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  113. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  114. package/dist/rsuite-no-reset.css +322 -124
  115. package/dist/rsuite-no-reset.min.css +1 -1
  116. package/dist/rsuite-no-reset.min.css.map +1 -1
  117. package/dist/rsuite-rtl.css +322 -124
  118. package/dist/rsuite-rtl.min.css +1 -1
  119. package/dist/rsuite-rtl.min.css.map +1 -1
  120. package/dist/rsuite.css +322 -124
  121. package/dist/rsuite.js +248 -50
  122. package/dist/rsuite.js.map +1 -1
  123. package/dist/rsuite.min.css +1 -1
  124. package/dist/rsuite.min.css.map +1 -1
  125. package/dist/rsuite.min.js +1 -1
  126. package/dist/rsuite.min.js.map +1 -1
  127. package/esm/@types/common.d.ts +12 -14
  128. package/esm/CascadeTree/CascadeTree.d.ts +16 -0
  129. package/esm/CascadeTree/CascadeTree.js +167 -0
  130. package/esm/CascadeTree/SearchView.d.ts +17 -0
  131. package/esm/CascadeTree/SearchView.js +100 -0
  132. package/esm/CascadeTree/TreeView.d.ts +20 -0
  133. package/esm/{Cascader → CascadeTree}/TreeView.js +42 -33
  134. package/esm/CascadeTree/hooks/index.d.ts +3 -0
  135. package/esm/CascadeTree/hooks/index.js +4 -0
  136. package/esm/{Cascader/utils.d.ts → CascadeTree/hooks/usePaths.d.ts} +3 -25
  137. package/esm/CascadeTree/hooks/usePaths.js +36 -0
  138. package/esm/CascadeTree/hooks/useSearch.d.ts +17 -0
  139. package/esm/CascadeTree/hooks/useSearch.js +54 -0
  140. package/esm/CascadeTree/hooks/useSelect.d.ts +23 -0
  141. package/esm/CascadeTree/hooks/useSelect.js +59 -0
  142. package/esm/CascadeTree/index.d.ts +4 -0
  143. package/esm/CascadeTree/index.js +3 -0
  144. package/esm/CascadeTree/types.d.ts +66 -0
  145. package/esm/CascadeTree/types.js +1 -0
  146. package/esm/CascadeTree/utils.d.ts +32 -0
  147. package/esm/CascadeTree/utils.js +61 -0
  148. package/esm/Cascader/Cascader.d.ts +57 -26
  149. package/esm/Cascader/Cascader.js +167 -233
  150. package/esm/Cascader/useActive.d.ts +15 -0
  151. package/esm/Cascader/useActive.js +37 -0
  152. package/esm/Checkbox/Checkbox.d.ts +67 -25
  153. package/esm/Checkbox/Checkbox.js +38 -28
  154. package/esm/InlineEdit/InlineEdit.d.ts +1 -1
  155. package/esm/InputPicker/InputPicker.js +2 -2
  156. package/esm/InputPicker/InputPickerContext.d.ts +1 -1
  157. package/esm/Loader/Loader.js +6 -5
  158. package/esm/MultiCascadeTree/MultiCascadeTree.d.ts +9 -0
  159. package/esm/MultiCascadeTree/MultiCascadeTree.js +125 -0
  160. package/esm/MultiCascadeTree/SearchView.d.ts +17 -0
  161. package/esm/MultiCascadeTree/SearchView.js +111 -0
  162. package/esm/MultiCascadeTree/TreeView.d.ts +22 -0
  163. package/esm/{MultiCascader → MultiCascadeTree}/TreeView.js +22 -21
  164. package/esm/MultiCascadeTree/hooks/index.d.ts +5 -0
  165. package/esm/MultiCascadeTree/hooks/index.js +6 -0
  166. package/esm/MultiCascadeTree/hooks/useCascadeValue.d.ts +18 -0
  167. package/esm/MultiCascadeTree/hooks/useCascadeValue.js +197 -0
  168. package/esm/MultiCascadeTree/hooks/useColumnData.d.ts +16 -0
  169. package/esm/MultiCascadeTree/hooks/useColumnData.js +46 -0
  170. package/esm/MultiCascadeTree/hooks/useFlattenData.d.ts +9 -0
  171. package/esm/MultiCascadeTree/hooks/useFlattenData.js +28 -0
  172. package/esm/MultiCascadeTree/hooks/useSearch.d.ts +17 -0
  173. package/esm/MultiCascadeTree/hooks/useSearch.js +47 -0
  174. package/esm/MultiCascadeTree/hooks/useSelect.d.ts +19 -0
  175. package/esm/MultiCascadeTree/hooks/useSelect.js +77 -0
  176. package/esm/MultiCascadeTree/index.d.ts +4 -0
  177. package/esm/MultiCascadeTree/index.js +3 -0
  178. package/esm/MultiCascadeTree/types.d.ts +26 -0
  179. package/esm/MultiCascadeTree/types.js +1 -0
  180. package/esm/MultiCascadeTree/utils.d.ts +37 -0
  181. package/esm/MultiCascadeTree/utils.js +130 -0
  182. package/esm/MultiCascader/MultiCascader.d.ts +57 -29
  183. package/esm/MultiCascader/MultiCascader.js +168 -279
  184. package/esm/Radio/Radio.d.ts +42 -16
  185. package/esm/Radio/Radio.js +43 -38
  186. package/esm/RadioGroup/RadioGroup.d.ts +1 -1
  187. package/esm/RadioGroup/RadioGroup.js +5 -5
  188. package/esm/TagPicker/index.js +1 -1
  189. package/esm/Tree/Tree.d.ts +4 -4
  190. package/esm/index.d.ts +6 -1
  191. package/esm/index.js +5 -1
  192. package/esm/internals/Picker/ListCheckItem.d.ts +2 -11
  193. package/esm/internals/Picker/ListCheckItem.js +8 -6
  194. package/esm/internals/Picker/PickerToggle.d.ts +4 -5
  195. package/esm/toaster/ToastContainer.d.ts +9 -2
  196. package/esm/toaster/index.d.ts +0 -1
  197. package/esm/toaster/index.js +0 -1
  198. package/esm/useToaster/index.d.ts +2 -0
  199. package/esm/useToaster/index.js +3 -0
  200. package/esm/{toaster → useToaster}/useToaster.d.ts +4 -4
  201. package/esm/{toaster → useToaster}/useToaster.js +4 -4
  202. package/esm/utils/index.d.ts +1 -0
  203. package/esm/utils/index.js +2 -1
  204. package/internals/Picker/styles/index.less +1 -1
  205. package/package.json +1 -1
  206. package/styles/index.less +2 -0
  207. package/useToaster/package.json +7 -0
  208. package/useToaster/styles/index.css +239 -0
  209. package/useToaster/styles/index.less +1 -0
  210. package/cjs/Cascader/DropdownMenu.d.ts +0 -24
  211. package/cjs/Cascader/DropdownMenu.js +0 -175
  212. package/cjs/Cascader/TreeView.d.ts +0 -24
  213. package/cjs/Cascader/utils.js +0 -79
  214. package/cjs/MultiCascader/TreeView.d.ts +0 -25
  215. package/cjs/MultiCascader/utils.d.ts +0 -71
  216. package/cjs/MultiCascader/utils.js +0 -382
  217. package/esm/Cascader/DropdownMenu.d.ts +0 -24
  218. package/esm/Cascader/DropdownMenu.js +0 -168
  219. package/esm/Cascader/TreeView.d.ts +0 -24
  220. package/esm/Cascader/utils.js +0 -74
  221. package/esm/MultiCascader/TreeView.d.ts +0 -25
  222. package/esm/MultiCascader/utils.d.ts +0 -71
  223. package/esm/MultiCascader/utils.js +0 -369
@@ -14,15 +14,11 @@ var _utils = require("../utils");
14
14
  var _Picker = require("../internals/Picker");
15
15
  var _utils2 = require("./utils");
16
16
  var emptyArray = [];
17
-
18
- /**
19
- * TODO: reuse Menu from Cascader for consistent behavior
20
- */
21
17
  var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
22
18
  var _props$as = props.as,
23
19
  Component = _props$as === void 0 ? 'div' : _props$as,
24
20
  _props$classPrefix = props.classPrefix,
25
- classPrefix = _props$classPrefix === void 0 ? 'menu' : _props$classPrefix,
21
+ classPrefix = _props$classPrefix === void 0 ? 'tree' : _props$classPrefix,
26
22
  className = props.className,
27
23
  cascade = props.cascade,
28
24
  _props$cascadeData = props.cascadeData,
@@ -33,10 +29,10 @@ var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
33
29
  childrenKey = _props$childrenKey === void 0 ? 'children' : _props$childrenKey,
34
30
  _props$disabledItemVa = props.disabledItemValues,
35
31
  disabledItemValues = _props$disabledItemVa === void 0 ? emptyArray : _props$disabledItemVa,
36
- _props$menuWidth = props.menuWidth,
37
- menuWidth = _props$menuWidth === void 0 ? 156 : _props$menuWidth,
38
- _props$menuHeight = props.menuHeight,
39
- menuHeight = _props$menuHeight === void 0 ? 200 : _props$menuHeight,
32
+ _props$columnWidth = props.columnWidth,
33
+ columnWidth = _props$columnWidth === void 0 ? 156 : _props$columnWidth,
34
+ _props$columnHeight = props.columnHeight,
35
+ columnHeight = _props$columnHeight === void 0 ? 200 : _props$columnHeight,
40
36
  _props$uncheckableIte = props.uncheckableItemValues,
41
37
  uncheckableItemValues = _props$uncheckableIte === void 0 ? emptyArray : _props$uncheckableIte,
42
38
  value = props.value,
@@ -45,11 +41,11 @@ var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
45
41
  _props$labelKey = props.labelKey,
46
42
  labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
47
43
  style = props.style,
48
- renderMenuItem = props.renderMenuItem,
49
- renderMenu = props.renderMenu,
44
+ renderTreeNode = props.renderTreeNode,
45
+ renderColumn = props.renderColumn,
50
46
  _onCheck = props.onCheck,
51
47
  onSelect = props.onSelect,
52
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "cascade", "cascadeData", "cascadePaths", "childrenKey", "disabledItemValues", "menuWidth", "menuHeight", "uncheckableItemValues", "value", "valueKey", "labelKey", "style", "renderMenuItem", "renderMenu", "onCheck", "onSelect"]);
48
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "cascade", "cascadeData", "cascadePaths", "childrenKey", "disabledItemValues", "columnWidth", "columnHeight", "uncheckableItemValues", "value", "valueKey", "labelKey", "style", "renderTreeNode", "renderColumn", "onCheck", "onSelect"]);
53
49
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
54
50
  merge = _useClassNames.merge,
55
51
  prefix = _useClassNames.prefix;
@@ -125,20 +121,21 @@ var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
125
121
  onCheck: function onCheck(_value, event, checked) {
126
122
  return _onCheck === null || _onCheck === void 0 ? void 0 : _onCheck(node, event, checked);
127
123
  },
128
- checkable: !uncheckable
129
- }, renderMenuItem ? renderMenuItem(label, node) : label, children ? /*#__PURE__*/_react.default.createElement(Icon, {
124
+ checkable: !uncheckable,
125
+ labelClickable: false
126
+ }, renderTreeNode ? renderTreeNode(label, node) : label, children ? /*#__PURE__*/_react.default.createElement(Icon, {
130
127
  className: prefix('caret'),
131
128
  spin: node.loading
132
129
  }) : null);
133
130
  };
134
131
  var columnStyles = {
135
- height: menuHeight,
136
- width: menuWidth
132
+ height: columnHeight,
133
+ width: columnWidth
137
134
  };
138
135
  var cascadeNodes = cascadeData.map(function (children, layer) {
139
136
  var uncheckableCount = 0;
140
137
  var onlyKey = layer + "_" + children.length;
141
- var menu = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children.map(function (item, index) {
138
+ var childNodes = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children.map(function (item, index) {
142
139
  var uncheckable = uncheckableItemValues.some(function (uncheckableValue) {
143
140
  return (0, _utils.shallowEqual)(uncheckableValue, item[valueKey]);
144
141
  });
@@ -155,7 +152,7 @@ var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
155
152
  size: children.length
156
153
  });
157
154
  }));
158
- var parentNode = cascadePaths[layer - 1];
155
+ var parentItem = cascadePaths[layer - 1];
159
156
  var columnClasses = prefix('column', {
160
157
  'column-uncheckable': uncheckableCount === children.length
161
158
  });
@@ -165,14 +162,18 @@ var TreeView = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
165
162
  className: columnClasses,
166
163
  "data-layer": layer,
167
164
  style: columnStyles
168
- }, renderMenu ? renderMenu(children, menu, parentNode, layer) : menu);
165
+ }, renderColumn ? renderColumn(childNodes, {
166
+ items: children,
167
+ parentItem: parentItem,
168
+ layer: layer
169
+ }) : childNodes);
169
170
  });
170
171
  var styles = (0, _extends2.default)({}, style, {
171
- width: cascadeData.length * menuWidth
172
+ width: cascadeData.length * columnWidth
172
173
  });
173
174
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
174
175
  role: "tree",
175
- id: id + "-" + popupType,
176
+ id: id ? id + "-" + popupType : undefined,
176
177
  "aria-labelledby": labelId,
177
178
  "aria-multiselectable": multiple
178
179
  }, 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,16 @@
1
+ 'use client';
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ exports.__esModule = true;
6
+ exports.useSearch = exports.useCascadeValue = exports.useColumnData = exports.useSelect = exports.useFlattenData = void 0;
7
+ var _useFlattenData = _interopRequireDefault(require("./useFlattenData"));
8
+ exports.useFlattenData = _useFlattenData.default;
9
+ var _useSelect = _interopRequireDefault(require("./useSelect"));
10
+ exports.useSelect = _useSelect.default;
11
+ var _useColumnData = _interopRequireDefault(require("./useColumnData"));
12
+ exports.useColumnData = _useColumnData.default;
13
+ var _useCascadeValue = _interopRequireDefault(require("./useCascadeValue"));
14
+ exports.useCascadeValue = _useCascadeValue.default;
15
+ var _useSearch = _interopRequireDefault(require("./useSearch"));
16
+ exports.useSearch = _useSearch.default;
@@ -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,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,4 @@
1
+ import MultiCascadeTree from './MultiCascadeTree';
2
+ export type { ItemDataType } from '../@types/common';
3
+ export type { MultiCascadeTreeProps } from './types';
4
+ export default MultiCascadeTree;
@@ -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;