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
@@ -1,71 +0,0 @@
1
- /// <reference types="react" />
2
- import { MultiCascaderProps, ValueType } from './MultiCascader';
3
- import { ItemDataType } from '../@types/common';
4
- export interface ItemType extends ItemDataType {
5
- parent?: ItemType;
6
- }
7
- interface ItemKeys {
8
- valueKey: string;
9
- labelKey: string;
10
- childrenKey: string;
11
- }
12
- declare type MayHasParent<T extends Record<string, unknown>> = T & {
13
- parent?: MayHasParent<T>;
14
- };
15
- /**
16
- * Get all parents of a node
17
- * @param node
18
- */
19
- export declare const getParents: <T extends Record<string, unknown>>(node: MayHasParent<T>) => MayHasParent<T>[];
20
- /**
21
- * Check if any child nodes are selected.
22
- * @param node
23
- * @param value
24
- * @param itemKeys
25
- */
26
- export declare const isSomeChildChecked: <T extends Record<string, unknown>>(node: T, value: ValueType, itemKeys: Omit<ItemKeys, 'labelKey'>) => any;
27
- /**
28
- * Check if the parent is selected.
29
- * @param node
30
- * @param value
31
- * @param itemKeys
32
- */
33
- export declare const isSomeParentChecked: <T extends Record<string, unknown>>(node: MayHasParent<T>, value: ValueType, itemKeys: Pick<ItemKeys, 'valueKey'>) => any;
34
- export declare const getOtherItemValuesByUnselectChild: <T>(itemNode: ItemType, value: any, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[];
35
- /**
36
- * Remove the values of all children.
37
- */
38
- export declare const removeAllChildrenValue: <T>(value: T[], item: ItemType, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[] | undefined;
39
- /**
40
- * A hook to flatten tree structure data
41
- * @param data
42
- */
43
- export declare function useFlattenData<T>(data: T[], itemKeys: ItemKeys): {
44
- addFlattenData: (children: T[], parent: T) => void;
45
- flattenData: T[];
46
- };
47
- /**
48
- * A hook for column data
49
- * @param flattenData
50
- */
51
- export declare function useColumnData<T extends MayHasParent<Record<string, unknown>>>(flattenData: T[]): {
52
- columnData: (readonly T[])[];
53
- addColumn: (column: T[], index: number) => void;
54
- removeColumnByIndex: (index: number) => void;
55
- setColumnData: import("react").Dispatch<import("react").SetStateAction<(readonly T[])[]>>;
56
- enforceUpdateColumnData: (nextData: T[]) => void;
57
- };
58
- /**
59
- * A hook that converts the value into a cascading value
60
- * @param props
61
- * @param flattenData
62
- */
63
- export declare function useCascadeValue<T>(props: Partial<MultiCascaderProps<T[]>> & ItemKeys, flattenData: ItemType[]): {
64
- value: T[];
65
- setValue: import("react").Dispatch<import("react").SetStateAction<T[]>>;
66
- splitValue: (item: ItemType, checked: boolean, value: T[]) => {
67
- value: T[];
68
- removedValue: T[];
69
- };
70
- };
71
- export {};
@@ -1,369 +0,0 @@
1
- 'use client';
2
- import { useState, useEffect, useCallback } from 'react';
3
- import uniq from 'lodash/uniq';
4
- import remove from 'lodash/remove';
5
- import slice from 'lodash/slice';
6
- import { UNSAFE_flattenTree } from '../utils/treeUtils';
7
- import { attachParent } from '../utils/attachParent';
8
- /**
9
- * Get all parents of a node
10
- * @param node
11
- */
12
- export var getParents = function getParents(node) {
13
- var parents = [];
14
- if (!node.parent) {
15
- return parents;
16
- }
17
- parents.push(node.parent);
18
- parents = parents.concat(getParents(node.parent));
19
- return parents;
20
- };
21
-
22
- /**
23
- * Check if any child nodes are selected.
24
- * @param node
25
- * @param value
26
- * @param itemKeys
27
- */
28
- export var isSomeChildChecked = function isSomeChildChecked(node, value, itemKeys) {
29
- var childrenKey = itemKeys.childrenKey,
30
- valueKey = itemKeys.valueKey;
31
- if (!node[childrenKey] || !value) {
32
- return false;
33
- }
34
- return node[childrenKey].some(function (child) {
35
- var _child$childrenKey;
36
- if (value.some(function (n) {
37
- return n === child[valueKey];
38
- })) {
39
- return true;
40
- }
41
- if ((_child$childrenKey = child[childrenKey]) !== null && _child$childrenKey !== void 0 && _child$childrenKey.length) {
42
- return isSomeChildChecked(child, value, itemKeys);
43
- }
44
- return false;
45
- });
46
- };
47
-
48
- /**
49
- * Check if the parent is selected.
50
- * @param node
51
- * @param value
52
- * @param itemKeys
53
- */
54
- export var isSomeParentChecked = function isSomeParentChecked(node, value, itemKeys) {
55
- var valueKey = itemKeys.valueKey;
56
- if (!value) {
57
- return false;
58
- }
59
- if (value.some(function (n) {
60
- return n === node[valueKey];
61
- })) {
62
- return true;
63
- }
64
- if (node.parent) {
65
- return isSomeParentChecked(node.parent, value, itemKeys);
66
- }
67
- return false;
68
- };
69
- export var getOtherItemValuesByUnselectChild = function getOtherItemValuesByUnselectChild(itemNode, value, itemKeys) {
70
- var valueKey = itemKeys.valueKey,
71
- childrenKey = itemKeys.childrenKey;
72
- var parentValues = [];
73
- var itemValues = [];
74
-
75
- // Find the parent node of the current node by value
76
- function findParent(item) {
77
- parentValues.push(item[valueKey]);
78
- if (value.some(function (v) {
79
- return v === item[valueKey];
80
- })) {
81
- return item;
82
- }
83
- if (item.parent) {
84
- var p = findParent(item.parent);
85
- if (p) {
86
- return p;
87
- }
88
- }
89
- return null;
90
- }
91
-
92
- // Get child nodes through parent node
93
- function pushChildValue(item) {
94
- if (!item[childrenKey]) {
95
- return;
96
- }
97
- item[childrenKey].forEach(function (n) {
98
- // Determine whether it is a direct parent
99
- if (parentValues.some(function (v) {
100
- return v === n[valueKey];
101
- }) && n[childrenKey]) {
102
- pushChildValue(n);
103
- } else if (n[valueKey] !== itemNode[valueKey]) {
104
- itemValues.push(n[valueKey]);
105
- }
106
- });
107
- }
108
- var parent = findParent(itemNode);
109
- if (!parent) {
110
- return [];
111
- }
112
- pushChildValue(parent);
113
- return itemValues;
114
- };
115
-
116
- /**
117
- * Remove the values of all children.
118
- */
119
- export var removeAllChildrenValue = function removeAllChildrenValue(value, item, itemKeys) {
120
- var valueKey = itemKeys.valueKey,
121
- childrenKey = itemKeys.childrenKey;
122
- var removedValue = [];
123
- if (!item[childrenKey]) {
124
- return;
125
- }
126
- item[childrenKey].forEach(function (n) {
127
- removedValue = removedValue.concat(remove(value, function (v) {
128
- return v === n[valueKey];
129
- }));
130
- if (n[childrenKey]) {
131
- removeAllChildrenValue(value, n, itemKeys);
132
- }
133
- });
134
- return removedValue;
135
- };
136
-
137
- /**
138
- * A hook to flatten tree structure data
139
- * @param data
140
- */
141
- export function useFlattenData(data, itemKeys) {
142
- var childrenKey = itemKeys.childrenKey;
143
- var _useState = useState(UNSAFE_flattenTree(data, itemKeys.childrenKey)),
144
- flattenData = _useState[0],
145
- setFlattenData = _useState[1];
146
- var addFlattenData = useCallback(function (children, parent) {
147
- var nodes = children.map(function (child) {
148
- return attachParent(child, parent);
149
- });
150
- parent[childrenKey] = nodes;
151
- setFlattenData([].concat(flattenData, nodes));
152
- }, [childrenKey, flattenData]);
153
- useEffect(function () {
154
- setFlattenData(UNSAFE_flattenTree(data, itemKeys.childrenKey));
155
- }, [data, itemKeys.childrenKey]);
156
- return {
157
- addFlattenData: addFlattenData,
158
- flattenData: flattenData
159
- };
160
- }
161
-
162
- /**
163
- * A hook for column data
164
- * @param flattenData
165
- */
166
- export function useColumnData(flattenData) {
167
- // The columns displayed in the cascading panel.
168
- var _useState2 = useState([flattenData.filter(function (item) {
169
- return !item.parent;
170
- })]),
171
- columnData = _useState2[0],
172
- setColumnData = _useState2[1];
173
- /**
174
- * Add a list of options to the cascading panel. Used for lazy loading options.
175
- * @param column
176
- * @param index The index of the current column.
177
- */
178
- function addColumn(column, index) {
179
- setColumnData([].concat(slice(columnData, 0, index), [column]));
180
- }
181
-
182
- /**
183
- * Remove subsequent columns of the specified column
184
- * @param index
185
- */
186
- function removeColumnByIndex(index) {
187
- setColumnData([].concat(slice(columnData, 0, index)));
188
- }
189
- function enforceUpdateColumnData(nextData) {
190
- var nextFlattenData = UNSAFE_flattenTree(nextData);
191
- setColumnData([nextFlattenData.filter(function (item) {
192
- return !item.parent;
193
- })]);
194
- }
195
- return {
196
- columnData: columnData,
197
- addColumn: addColumn,
198
- removeColumnByIndex: removeColumnByIndex,
199
- setColumnData: setColumnData,
200
- enforceUpdateColumnData: enforceUpdateColumnData
201
- };
202
- }
203
-
204
- /**
205
- * A hook that converts the value into a cascading value
206
- * @param props
207
- * @param flattenData
208
- */
209
- export function useCascadeValue(props, flattenData) {
210
- var valueKey = props.valueKey,
211
- childrenKey = props.childrenKey,
212
- uncheckableItemValues = props.uncheckableItemValues,
213
- cascade = props.cascade,
214
- valueProp = props.value;
215
- /**
216
- * Get the values of all children
217
- */
218
- var getChildrenValue = useCallback(function (item) {
219
- var values = [];
220
- if (!item[childrenKey]) {
221
- return values;
222
- }
223
- item[childrenKey].forEach(function (n) {
224
- if (uncheckableItemValues && !uncheckableItemValues.some(function (v) {
225
- return v === n[valueKey];
226
- })) {
227
- values.push(n[valueKey]);
228
- }
229
- values = values.concat(getChildrenValue(n));
230
- });
231
- return values;
232
- }, [childrenKey, uncheckableItemValues, valueKey]);
233
- var splitValue = useCallback(function (item, checked, value) {
234
- var itemValue = item[valueKey];
235
- var childrenValue = getChildrenValue(item);
236
- var parents = getParents(item);
237
- var nextValue = [].concat(value);
238
- var removedValue = [];
239
- if (checked) {
240
- nextValue.push(itemValue);
241
-
242
- // Delete all values under the current node
243
- removedValue = removedValue.concat(removeAllChildrenValue(nextValue, item, {
244
- valueKey: valueKey,
245
- childrenKey: childrenKey
246
- }) || []);
247
-
248
- // Traverse all ancestor nodes of the current node
249
- // Then determine whether all the child nodes of these nodes are selected, and then they themselves must be selected
250
- var _loop = function _loop(i) {
251
- // Whether the parent node can be selected
252
- var isCheckableParent = !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
253
- return v === parents[i][valueKey];
254
- }));
255
- if (isCheckableParent) {
256
- var isCheckAll = parents[i][childrenKey]
257
- // Filter out options that are marked as not selectable
258
- .filter(function (n) {
259
- return !(uncheckableItemValues !== null && uncheckableItemValues !== void 0 && uncheckableItemValues.some(function (v) {
260
- return v === n[valueKey];
261
- }));
262
- })
263
- // Check if all nodes are selected
264
- .every(function (n) {
265
- return nextValue.some(function (v) {
266
- return v === n[valueKey];
267
- });
268
- });
269
- if (isCheckAll) {
270
- // Add parent node value
271
- nextValue.push(parents[i][valueKey]);
272
-
273
- // Delete all values under the parent node
274
- removedValue = removedValue.concat(removeAllChildrenValue(nextValue, parents[i], {
275
- valueKey: valueKey,
276
- childrenKey: childrenKey
277
- }) || []);
278
- }
279
- }
280
- };
281
- for (var i = 0; i < parents.length; i++) {
282
- _loop(i);
283
- }
284
- } else {
285
- var tempValue = childrenValue.concat(parents.map(function (item) {
286
- return item[valueKey];
287
- }));
288
- nextValue = nextValue.concat(getOtherItemValuesByUnselectChild(item, nextValue, {
289
- valueKey: valueKey,
290
- childrenKey: childrenKey
291
- }));
292
-
293
- // Delete related child and parent nodes
294
- removedValue = remove(nextValue, function (v) {
295
- // Delete yourself
296
- if (v === itemValue) {
297
- return true;
298
- }
299
- return tempValue.some(function (n) {
300
- return n === v;
301
- });
302
- });
303
- }
304
- var uniqValue = uniq(nextValue);
305
- var uniqRemovedValue = uniq(removedValue);
306
- return {
307
- value: uniqValue,
308
- removedValue: uniqRemovedValue
309
- };
310
- }, [valueKey, childrenKey, uncheckableItemValues, getChildrenValue]);
311
- var transformValue = useCallback(function (value) {
312
- if (value === void 0) {
313
- value = [];
314
- }
315
- if (!cascade) {
316
- return value;
317
- }
318
- var tempRemovedValue = [];
319
- var nextValue = [];
320
- var _loop2 = function _loop2(i) {
321
- // If the value in the current value is already in the deleted list, it will not be processed
322
- if (tempRemovedValue.some(function (v) {
323
- return v === value[i];
324
- })) {
325
- return "continue";
326
- }
327
- var item = flattenData.find(function (v) {
328
- return v[valueKey] === value[i];
329
- });
330
- if (!item) {
331
- return "continue";
332
- }
333
- var sv = splitValue(item, true, value);
334
- tempRemovedValue = uniq(tempRemovedValue.concat(sv.removedValue));
335
-
336
- // Get all relevant values
337
- nextValue = uniq(nextValue.concat(sv.value));
338
- };
339
- for (var i = 0; i < value.length; i++) {
340
- var _ret = _loop2(i);
341
- if (_ret === "continue") continue;
342
- }
343
-
344
- // Finally traverse all nextValue, and delete if its parent node is also nextValue
345
- return nextValue.filter(function (v) {
346
- var item = flattenData.find(function (n) {
347
- return n[valueKey] === v;
348
- });
349
- if (item !== null && item !== void 0 && item.parent && nextValue.some(function (v) {
350
- return v === item.parent && item.parent[valueKey];
351
- })) {
352
- return false;
353
- }
354
- return true;
355
- });
356
- }, [cascade, flattenData, splitValue, valueKey]);
357
- var _useState3 = useState(transformValue(valueProp) || []),
358
- value = _useState3[0],
359
- setValue = _useState3[1];
360
- useEffect(function () {
361
- // Update value when valueProp is updated.
362
- setValue(transformValue(valueProp) || []);
363
- }, [transformValue, valueProp]);
364
- return {
365
- value: value,
366
- setValue: setValue,
367
- splitValue: splitValue
368
- };
369
- }