@kdcloudjs/kdesign 1.5.3 → 1.5.6

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 (101) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/default-theme.js +4 -4
  3. package/dist/kdesign-complete.less +164 -88
  4. package/dist/kdesign.css +160 -86
  5. package/dist/kdesign.css.map +1 -1
  6. package/dist/kdesign.js +392 -253
  7. package/dist/kdesign.js.map +1 -1
  8. package/dist/kdesign.min.css +4 -4
  9. package/dist/kdesign.min.js +6 -6
  10. package/dist/kdesign.min.js.map +1 -1
  11. package/es/_utils/usePopper.js +79 -46
  12. package/es/alert/alert.js +2 -2
  13. package/es/alert/style/index.css +27 -11
  14. package/es/alert/style/index.less +24 -10
  15. package/es/alert/style/mixin.less +8 -2
  16. package/es/alert/style/token.less +16 -8
  17. package/es/config-provider/compDefaultProps.d.ts +1 -0
  18. package/es/config-provider/compDefaultProps.js +2 -1
  19. package/es/drawer/drawer.js +1 -0
  20. package/es/dropdown/dropdown.js +16 -6
  21. package/es/dropdown/style/index.css +13 -14
  22. package/es/dropdown/style/index.less +4 -5
  23. package/es/dropdown/style/token.less +6 -5
  24. package/es/radio/style/index.css +7 -1
  25. package/es/radio/style/index.less +9 -1
  26. package/es/search/style/index.css +3 -3
  27. package/es/select/select.js +1 -1
  28. package/es/spin/style/index.css +25 -26
  29. package/es/spin/style/index.less +18 -19
  30. package/es/spin/style/token.less +9 -3
  31. package/es/stepper/stepper.js +9 -4
  32. package/es/stepper/style/index.css +2 -0
  33. package/es/stepper/style/index.less +2 -0
  34. package/es/stepper/style/token.less +1 -2
  35. package/es/style/icon/kdicon.css +2 -1
  36. package/es/style/icon/kdicon.woff +0 -0
  37. package/es/style/themes/default.less +3 -4
  38. package/es/tabs/style/index.css +1 -0
  39. package/es/tabs/style/index.less +1 -0
  40. package/es/timeline/style/index.css +22 -21
  41. package/es/timeline/style/index.less +2 -2
  42. package/es/timeline/style/token.less +4 -7
  43. package/es/tooltip/tooltip.js +1 -1
  44. package/es/tree/style/index.css +56 -7
  45. package/es/tree/style/index.less +26 -18
  46. package/es/tree/style/mixin.less +25 -1
  47. package/es/tree/style/token.less +6 -4
  48. package/es/tree/tree.d.ts +2 -0
  49. package/es/tree/tree.js +77 -20
  50. package/es/tree/treeHooks.d.ts +1 -1
  51. package/es/tree/treeHooks.js +3 -4
  52. package/es/tree/treeNode.d.ts +1 -0
  53. package/es/tree/treeNode.js +45 -49
  54. package/es/tree/utils/treeUtils.d.ts +6 -3
  55. package/es/tree/utils/treeUtils.js +66 -42
  56. package/lib/_utils/usePopper.js +79 -46
  57. package/lib/alert/alert.js +2 -2
  58. package/lib/alert/style/index.css +27 -11
  59. package/lib/alert/style/index.less +24 -10
  60. package/lib/alert/style/mixin.less +8 -2
  61. package/lib/alert/style/token.less +16 -8
  62. package/lib/config-provider/compDefaultProps.d.ts +1 -0
  63. package/lib/config-provider/compDefaultProps.js +2 -1
  64. package/lib/drawer/drawer.js +1 -0
  65. package/lib/dropdown/dropdown.js +15 -6
  66. package/lib/dropdown/style/index.css +13 -14
  67. package/lib/dropdown/style/index.less +4 -5
  68. package/lib/dropdown/style/token.less +6 -5
  69. package/lib/radio/style/index.css +7 -1
  70. package/lib/radio/style/index.less +9 -1
  71. package/lib/search/style/index.css +3 -3
  72. package/lib/select/select.js +1 -1
  73. package/lib/spin/style/index.css +25 -26
  74. package/lib/spin/style/index.less +18 -19
  75. package/lib/spin/style/token.less +9 -3
  76. package/lib/stepper/stepper.js +9 -4
  77. package/lib/stepper/style/index.css +2 -0
  78. package/lib/stepper/style/index.less +2 -0
  79. package/lib/stepper/style/token.less +1 -2
  80. package/lib/style/icon/kdicon.css +2 -1
  81. package/lib/style/icon/kdicon.woff +0 -0
  82. package/lib/style/themes/default.less +3 -4
  83. package/lib/tabs/style/index.css +1 -0
  84. package/lib/tabs/style/index.less +1 -0
  85. package/lib/timeline/style/index.css +22 -21
  86. package/lib/timeline/style/index.less +2 -2
  87. package/lib/timeline/style/token.less +4 -7
  88. package/lib/tooltip/tooltip.js +1 -1
  89. package/lib/tree/style/index.css +56 -7
  90. package/lib/tree/style/index.less +26 -18
  91. package/lib/tree/style/mixin.less +25 -1
  92. package/lib/tree/style/token.less +6 -4
  93. package/lib/tree/tree.d.ts +2 -0
  94. package/lib/tree/tree.js +78 -20
  95. package/lib/tree/treeHooks.d.ts +1 -1
  96. package/lib/tree/treeHooks.js +3 -4
  97. package/lib/tree/treeNode.d.ts +1 -0
  98. package/lib/tree/treeNode.js +46 -48
  99. package/lib/tree/utils/treeUtils.d.ts +6 -3
  100. package/lib/tree/utils/treeUtils.js +64 -42
  101. package/package.json +1 -1
@@ -101,6 +101,24 @@
101
101
  普通组件内部自身层级应设置在0-100间
102
102
  */
103
103
  /* ----------- zIndex ——————---- end */
104
+ .node-hover-hover {
105
+ -webkit-transition: background-color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s)), color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s));
106
+ transition: background-color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s)), color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s));
107
+ }
108
+ .node-hover-hover:hover {
109
+ background-color: var(--kd-c-tree-node-color-backgroung-hover, var(--kd-g-color-hover, #f5f5f5));
110
+ cursor: pointer;
111
+ }
112
+ .node-selected {
113
+ background-color: var(--kd-c-tree-node-color-backgroung-checked, var(--kd-g-color-theme-3, #e3eeff)) !important;
114
+ color: var(--kd-c-tree-node-color-text-checked, var(--kd-g-color-theme, #5582f3));
115
+ }
116
+ .node-selected .kd-tree-node-title {
117
+ color: var(--kd-c-tree-node-color-text-checked, var(--kd-g-color-theme, #5582f3));
118
+ }
119
+ .node-selected .kd-tree-node-icon {
120
+ color: var(--kd-c-tree-node-color-text-checked, var(--kd-g-color-theme, #5582f3));
121
+ }
104
122
  .kd-tree {
105
123
  position: relative;
106
124
  overflow: auto;
@@ -136,6 +154,15 @@
136
154
  -ms-flex-align: center;
137
155
  align-items: center;
138
156
  }
157
+ .kd-tree-node-root .kd-spin-dot-spin {
158
+ border: none;
159
+ width: var(--kd-c-tree-expand-icon-loading-sizing-width, 16px);
160
+ height: var(--kd-c-tree-expand-icon-loading-sizing-height, 16px);
161
+ }
162
+ .kd-tree-node-root .kd-spin-dot-spin .kd-spin-dot-item {
163
+ width: var(--kd-c-tree-expand-icon-loading-sizing-width, 16px);
164
+ height: var(--kd-c-tree-expand-icon-loading-sizing-height, 16px);
165
+ }
139
166
  .kd-tree-node-fb-children-pointerEvents * {
140
167
  pointer-events: none;
141
168
  }
@@ -176,8 +203,8 @@
176
203
  }
177
204
  .kd-tree-node-icon {
178
205
  cursor: pointer;
179
- height: var(--kd-c-tree-expand-icon-sizing-height, 22px);
180
- width: var(--kd-c-tree-expand-icon-sizing-width, 22px);
206
+ height: var(--kd-c-tree-expand-icon-sizing-height, 16px);
207
+ width: var(--kd-c-tree-expand-icon-sizing-width, 16px);
181
208
  display: -webkit-box;
182
209
  display: -ms-flexbox;
183
210
  display: flex;
@@ -190,9 +217,13 @@
190
217
  font-size: var(--kd-c-tree-node-icon-font-size, 16px);
191
218
  color: var(--kd-c-tree-node-icon-color-text, #666666);
192
219
  }
220
+ .kd-tree-node-icon-hover:hover {
221
+ background-color: var(--kd-c-tree-node-color-backgroung-hover, var(--kd-g-color-hover, #f5f5f5));
222
+ cursor: pointer;
223
+ }
193
224
  .kd-tree-node-icon-hidden {
194
- height: var(--kd-c-tree-node-icon-sizing-height, 20px);
195
- width: var(--kd-c-tree-node-icon-sizing-width, 20px);
225
+ height: var(--kd-c-tree-node-icon-sizing-height, 16px);
226
+ width: var(--kd-c-tree-node-icon-sizing-width, 16px);
196
227
  -ms-flex-negative: 0;
197
228
  flex-shrink: 0;
198
229
  opacity: 0;
@@ -233,10 +264,28 @@
233
264
  -ms-flex-align: center;
234
265
  align-items: center;
235
266
  height: 100%;
267
+ padding-left: 4px;
268
+ }
269
+ .kd-tree-node-title-wrap-hover {
270
+ -webkit-transition: background-color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s)), color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s));
271
+ transition: background-color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s)), color var(--kd-c-tree-motion-duration, var(--kd-g-duration, 0.3s));
272
+ }
273
+ .kd-tree-node-title-wrap-hover:hover {
274
+ background-color: var(--kd-c-tree-node-color-backgroung-hover, var(--kd-g-color-hover, #f5f5f5));
275
+ cursor: pointer;
276
+ }
277
+ .kd-tree-node-title-wrap-selected {
278
+ background-color: var(--kd-c-tree-node-color-backgroung-checked, var(--kd-g-color-theme-3, #e3eeff)) !important;
279
+ color: var(--kd-c-tree-node-color-text-checked, var(--kd-g-color-theme, #5582f3));
280
+ }
281
+ .kd-tree-node-title-wrap-selected .kd-tree-node-title {
282
+ color: var(--kd-c-tree-node-color-text-checked, var(--kd-g-color-theme, #5582f3));
283
+ }
284
+ .kd-tree-node-title-wrap-selected .kd-tree-node-icon {
285
+ color: var(--kd-c-tree-node-color-text-checked, var(--kd-g-color-theme, #5582f3));
236
286
  }
237
287
  .kd-tree-node-title {
238
288
  white-space: nowrap;
239
- margin-left: 6px;
240
289
  }
241
290
  .kd-tree-node-selected {
242
291
  background-color: var(--kd-c-tree-node-color-backgroung-checked, var(--kd-g-color-theme-3, #e3eeff)) !important;
@@ -285,8 +334,8 @@
285
334
  transform: translateY(-50%);
286
335
  }
287
336
  .kd-tree-node-leaf-icon {
288
- height: var(--kd-c-tree-node-icon-sizing-height, 20px);
289
- width: var(--kd-c-tree-node-icon-sizing-width, 20px);
337
+ height: var(--kd-c-tree-node-icon-sizing-height, 16px);
338
+ width: var(--kd-c-tree-node-icon-sizing-width, 16px);
290
339
  display: -webkit-box;
291
340
  display: -ms-flexbox;
292
341
  display: flex;
@@ -28,6 +28,17 @@
28
28
  display: flex;
29
29
  justify-content: flex-start;
30
30
  align-items: center;
31
+
32
+ .@{kd-prefix}-spin-dot-spin {
33
+ border: none;
34
+ width: @tree-expand-icon-loading-width;
35
+ height: @tree-expand-icon-loading-height;
36
+
37
+ .@{kd-prefix}-spin-dot-item {
38
+ width: @tree-expand-icon-loading-width;
39
+ height: @tree-expand-icon-loading-height;
40
+ }
41
+ }
31
42
  }
32
43
  &-fb-children-pointerEvents * {
33
44
  pointer-events: none;
@@ -35,13 +46,8 @@
35
46
  &-item {
36
47
  display: flex;
37
48
  align-items: center;
38
- }
39
- &-item-hover {
40
- transition: background-color @tree-transition-duration, color @tree-transition-duration;
41
- }
42
- &-item-hover:hover {
43
- background-color: @tree-node-hover-bg-color;
44
- cursor: pointer;
49
+
50
+ .node-hover()
45
51
  }
46
52
 
47
53
  &-indent {
@@ -70,6 +76,11 @@
70
76
  align-items: center;
71
77
  font-size: @tree-node-icon-size;
72
78
  color: @tree-node-icon-color-text;
79
+
80
+ &-hover:hover {
81
+ background-color: @tree-node-hover-bg-color;
82
+ cursor: pointer;
83
+ }
73
84
  }
74
85
  &-icon-hidden {
75
86
  height: @tree-node-icon-height;
@@ -99,22 +110,19 @@
99
110
  display: flex;
100
111
  align-items: center;
101
112
  height: 100%;
113
+ padding-left: 4px;
114
+
115
+ .node-hover();
116
+
117
+ &-selected {
118
+ .node-selected()
119
+ }
102
120
  }
103
121
  &-title {
104
122
  white-space: nowrap;
105
- margin-left: 6px;
106
123
  }
107
124
  &-selected {
108
- background-color: @tree-node-checked-bg-color !important;
109
- color: @tree-node-checked-text-color;
110
-
111
- .@{tree-node-prefix-cls}-title {
112
- color: @tree-node-checked-text-color;
113
- }
114
-
115
- .@{tree-node-prefix-cls}-icon {
116
- color: @tree-node-checked-text-color;
117
- }
125
+ .node-selected()
118
126
  }
119
127
 
120
128
  &-draggabled {
@@ -1 +1,25 @@
1
- @import './token.less';
1
+ @import './token.less';
2
+
3
+ .node-hover {
4
+ &-hover {
5
+ transition: background-color @tree-transition-duration, color @tree-transition-duration;
6
+
7
+ &:hover {
8
+ background-color: @tree-node-hover-bg-color;
9
+ cursor: pointer;
10
+ }
11
+ }
12
+ }
13
+
14
+ .node-selected {
15
+ background-color: @tree-node-checked-bg-color !important;
16
+ color: @tree-node-checked-text-color;
17
+
18
+ .@{tree-node-prefix-cls}-title {
19
+ color: @tree-node-checked-text-color;
20
+ }
21
+
22
+ .@{tree-node-prefix-cls}-icon {
23
+ color: @tree-node-checked-text-color;
24
+ }
25
+ }
@@ -16,10 +16,12 @@
16
16
  @tree-node-drag-line-border-color: var(~'@{tree-prefix}-node-drag-line-color-background', #276FF5);
17
17
 
18
18
  // sizing
19
- @tree-expand-icon-height: var(~'@{tree-prefix}-expand-icon-sizing-height', 22px);
20
- @tree-expand-icon-width: var(~'@{tree-prefix}-expand-icon-sizing-width', 22px);
21
- @tree-node-icon-height: var(~'@{tree-prefix}-node-icon-sizing-height', 20px);
22
- @tree-node-icon-width: var(~'@{tree-prefix}-node-icon-sizing-width', 20px);
19
+ @tree-expand-icon-height: var(~'@{tree-prefix}-expand-icon-sizing-height', 16px);
20
+ @tree-expand-icon-width: var(~'@{tree-prefix}-expand-icon-sizing-width', 16px);
21
+ @tree-expand-icon-loading-height: var(~'@{tree-prefix}-expand-icon-loading-sizing-height', 16px);
22
+ @tree-expand-icon-loading-width: var(~'@{tree-prefix}-expand-icon-loading-sizing-width', 16px);
23
+ @tree-node-icon-height: var(~'@{tree-prefix}-node-icon-sizing-height', 16px);
24
+ @tree-node-icon-width: var(~'@{tree-prefix}-node-icon-sizing-width', 16px);
23
25
 
24
26
  // font
25
27
  @tree-font-size: var(~'@{tree-prefix}-font-size', @font-size-small);
@@ -24,6 +24,7 @@ export interface TreeProps {
24
24
  virtual?: boolean;
25
25
  scrollToKey?: string;
26
26
  selectedKeys?: string[];
27
+ loadData?: () => void;
27
28
  onCheck?: (checkedKeys: string[], { checked, node, event, halfCheckedKeys }: any) => void;
28
29
  onExpand?: (expandedKeys: string[], { expanded, node }: any) => void;
29
30
  onSelect?: ({ checked, node, event }: any) => void;
@@ -36,6 +37,7 @@ export interface TreeProps {
36
37
  setTreeNodeClassName?: (node: any) => string;
37
38
  setTreeNodeStyle?: (node: any) => Map<string, string>;
38
39
  estimatedItemSize?: number;
40
+ expandOnClickNode?: boolean;
39
41
  }
40
42
  export declare type TreeNodeData = {
41
43
  checkable?: boolean;
package/lib/tree/tree.js CHANGED
@@ -13,10 +13,12 @@ Object.defineProperty(exports, "__esModule", {
13
13
  });
14
14
  exports.default = void 0;
15
15
 
16
- var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
16
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
17
17
 
18
18
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
19
19
 
20
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
21
+
20
22
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
21
23
 
22
24
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
@@ -31,6 +33,8 @@ var _react = _interopRequireWildcard(require("react"));
31
33
 
32
34
  var _classnames = _interopRequireDefault(require("classnames"));
33
35
 
36
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
37
+
34
38
  var _ConfigContext = _interopRequireDefault(require("../config-provider/ConfigContext"));
35
39
 
36
40
  var _utils = require("../_utils");
@@ -96,7 +100,9 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
96
100
  innerEstimatedItemSize = TreeProps.estimatedItemSize,
97
101
  style = TreeProps.style,
98
102
  filterTreeNode = TreeProps.filterTreeNode,
99
- filterValue = TreeProps.filterValue;
103
+ filterValue = TreeProps.filterValue,
104
+ expandOnClickNode = TreeProps.expandOnClickNode,
105
+ loadData = TreeProps.loadData;
100
106
  var treePrefixCls = getPrefixCls(prefixCls, 'tree', customPrefixcls); // 树样式前缀
101
107
 
102
108
  var treeNodePrefixCls = getPrefixCls(prefixCls, 'tree-node', customPrefixcls); // 树节点样式前缀
@@ -105,13 +111,11 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
105
111
  var treeRootClassName = "".concat(treePrefixCls, "-root");
106
112
  var estimatedItemSize = innerEstimatedItemSize; // 节点高度
107
113
 
108
- var flattenAllData = _react.default.useMemo(function () {
114
+ var _React$useMemo = _react.default.useMemo(function () {
109
115
  return (0, _treeUtils.flattenAll)(treeData, []);
110
- }, [treeData]);
111
-
112
- var maxLevel = _react.default.useMemo(function () {
113
- return (0, _treeUtils.getMaxLevel)(flattenAllData);
114
- }, [flattenAllData]);
116
+ }, [treeData]),
117
+ flattenAllData = _React$useMemo.flattenAllData,
118
+ maxLevel = _React$useMemo.maxLevel;
115
119
 
116
120
  var _useChecked = (0, _treeHooks.useChecked)(checkStrictly, checkedKeysProps, defaultCheckedKeys, flattenAllData, maxLevel, checkable),
117
121
  _useChecked2 = (0, _slicedToArray2.default)(_useChecked, 4),
@@ -164,7 +168,21 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
164
168
  dragOverNodeKey = _React$useState10[0],
165
169
  setDragOverNodeKey = _React$useState10[1];
166
170
 
167
- var _useExpand = (0, _treeHooks.useExpand)(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit, filterTreeNode, filterValue),
171
+ var _React$useState11 = _react.default.useState(new _set.default()),
172
+ _React$useState12 = (0, _slicedToArray2.default)(_React$useState11, 2),
173
+ loadedKeys = _React$useState12[0],
174
+ setLoadedKeys = _React$useState12[1];
175
+
176
+ var _React$useState13 = _react.default.useState(new _set.default()),
177
+ _React$useState14 = (0, _slicedToArray2.default)(_React$useState13, 2),
178
+ loadingKeys = _React$useState14[0],
179
+ setLoadingKeys = _React$useState14[1];
180
+
181
+ var isSearching = _react.default.useMemo(function () {
182
+ return typeof filterTreeNode === 'function' && filterValue;
183
+ }, [filterValue]);
184
+
185
+ var _useExpand = (0, _treeHooks.useExpand)(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit, filterTreeNode, isSearching),
168
186
  _useExpand2 = (0, _slicedToArray2.default)(_useExpand, 2),
169
187
  expandedKeys = _useExpand2[0],
170
188
  setExpandedKeys = _useExpand2[1];
@@ -174,8 +192,8 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
174
192
  }, [flattenAllData, expandedKeys]);
175
193
 
176
194
  var filterData = _react.default.useMemo(function () {
177
- return (0, _treeUtils.getFilterData)(spreadAttrData, filterTreeNode, filterValue);
178
- }, [spreadAttrData, filterTreeNode, filterValue]);
195
+ return (0, _treeUtils.getFilterData)(spreadAttrData, filterTreeNode, isSearching);
196
+ }, [spreadAttrData, isSearching]);
179
197
 
180
198
  var _useViewportHeight = (0, _treeHooks.useViewportHeight)(height, listRef),
181
199
  _useViewportHeight2 = (0, _slicedToArray2.default)(_useViewportHeight, 1),
@@ -210,16 +228,55 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
210
228
  listRef.current.style.transform = "translate3d(0,".concat(tempStartOffset, "px,0)");
211
229
  }
212
230
  }, [listRef, scrollRef, virtual, estimatedItemSize]);
231
+ var handleNodeLoad = (0, _react.useCallback)(function (loadedKeys, loadingKeys, data) {
232
+ var key = data.key;
233
+
234
+ if (!loadData || loadedKeys.has(key) || loadingKeys.has(key)) {
235
+ return;
236
+ }
237
+
238
+ setLoadingKeys(function (prevLoadingKeys) {
239
+ var _context;
213
240
 
214
- var handleExpand = _react.default.useCallback(function (key, value, node) {
215
- var newExpandedKeys = value ? (0, _treeUtils.addKeys)(expandedKeys, [key]) : (0, _treeUtils.delKey)(expandedKeys, [key]);
241
+ return new _set.default((0, _concat.default)(_context = []).call(_context, (0, _toConsumableArray2.default)(prevLoadingKeys), [key]));
242
+ });
243
+ loadData(data).then(function () {
244
+ setLoadedKeys(function (prevState) {
245
+ var _context2;
246
+
247
+ return new _set.default((0, _concat.default)(_context2 = []).call(_context2, (0, _toConsumableArray2.default)(prevState), [key]));
248
+ });
249
+ setLoadingKeys(function (prevState) {
250
+ var prevLoadingKeys = (0, _cloneDeep.default)(prevState);
251
+ prevLoadingKeys.delete(key);
252
+ return prevLoadingKeys;
253
+ });
254
+ }).catch(function (e) {
255
+ setLoadingKeys(function (prevState) {
256
+ var prevLoadingKeys = (0, _cloneDeep.default)(prevState);
257
+ prevLoadingKeys.delete(key);
258
+ return prevLoadingKeys;
259
+ });
260
+ setExpandedKeys(function (preExpandedKeys) {
261
+ return (0, _treeUtils.delKey)((0, _toConsumableArray2.default)(preExpandedKeys), [key]);
262
+ });
263
+ throw e;
264
+ });
265
+ }, [loadData, setExpandedKeys]);
266
+
267
+ var handleExpand = _react.default.useCallback(function (key, expanded, node) {
268
+ var newExpandedKeys = expanded ? (0, _treeUtils.addKeys)(expandedKeys, [key]) : (0, _treeUtils.delKey)(expandedKeys, [key]);
216
269
  onExpand && onExpand(newExpandedKeys, {
217
270
  node: node,
218
- expanded: value
271
+ expanded: expanded
219
272
  });
220
273
  setScrollKey('');
221
274
  setIsInit(false);
222
- }, [expandedKeys, onExpand]);
275
+
276
+ if (expanded && loadData) {
277
+ handleNodeLoad(loadedKeys, loadingKeys, node);
278
+ }
279
+ }, [expandedKeys, onExpand, loadData, handleNodeLoad, loadedKeys, loadingKeys]);
223
280
 
224
281
  var handleCheck = _react.default.useCallback(function (key, value, node, event, pos) {
225
282
  var newCheckedKeys = value ? (0, _treeUtils.addKeys)(checkedKeys, [key]) : (0, _treeUtils.delKey)(checkedKeys, [key]);
@@ -315,10 +372,10 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
315
372
  }, [onDragEnd]);
316
373
 
317
374
  var handleDrop = _react.default.useCallback(function (event, node, dragNode, dragNodesKeys) {
318
- var _context;
375
+ var _context3;
319
376
 
320
377
  var pos = (0, _treeUtils.getPos)(flattenAllData, dragNodesKeys);
321
- var keys = (0, _concat.default)(_context = (0, _treeUtils.getAllChildKeys)(flattenAllData, pos)).call(_context, dragNodesKeys);
378
+ var keys = (0, _concat.default)(_context3 = (0, _treeUtils.getAllChildKeys)(flattenAllData, pos)).call(_context3, dragNodesKeys);
322
379
  onDrop && onDrop({
323
380
  event: event,
324
381
  node: node,
@@ -384,7 +441,6 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
384
441
  className: treeRootClassName,
385
442
  ref: listRef
386
443
  }, visibleData && (0, _map.default)(visibleData).call(visibleData, function (item) {
387
- // const props: any = {}
388
444
  var checked = (0, _treeUtils.getChecked)(checkedKeys, item.key);
389
445
  var indeterminate = (0, _treeUtils.getHalfChecked)(halfCheckedKeys, item.key);
390
446
  item.nodeKey = item.key;
@@ -399,8 +455,7 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
399
455
  item.onSelect = handleSelect;
400
456
  item.checked = checked;
401
457
  item.selected = (0, _treeUtils.getSelected)(selectedKeys, item.key);
402
- item.indeterminate = indeterminate; // item.showLine = showLine
403
-
458
+ item.indeterminate = indeterminate;
404
459
  item.disabled = getDisabled(disabled, item.disabled);
405
460
  item.showIcon = showIcon || false;
406
461
  item.checkable = getCheckable(checkable, item.checkable); // 哪个优先
@@ -415,6 +470,9 @@ var InternalTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
415
470
  item.getDragNode = getDragNode;
416
471
  item.setDragNode = setDragNode;
417
472
  item.dragOver = dragOverNodeKey === item.key && dropPosition === 0;
473
+ item.expandOnClickNode = expandOnClickNode;
474
+ item.loading = loadingKeys.has(item.key) && !loadedKeys.has(item.key);
475
+ item.loadData = loadData;
418
476
  return /*#__PURE__*/_react.default.createElement(_treeNode.default, (0, _extends2.default)({}, item, {
419
477
  key: item.key,
420
478
  ref: treeNodeRef
@@ -4,6 +4,6 @@ export declare const useViewportHeight: (height: number, listRef: React.RefObjec
4
4
  export declare const useVisibleDataMemo: (virtual: boolean, filterData: TreeNodeData[], viewportHeight: number, estimatedItemSize: number, start: number) => TreeNodeData[][];
5
5
  export declare const usePlantomHeightEffect: (plantomRef: React.RefObject<HTMLElement>, filterData: TreeNodeData[], estimatedItemSize: number) => void;
6
6
  export declare const useChecked: (checkStrictly: boolean, checkedKeysProps: string[], defaultCheckedKeys: string[], flattenAllData: any[], maxLevel: number, checkable: boolean) => readonly [string[], string[], React.Dispatch<React.SetStateAction<string[]>>, React.Dispatch<React.SetStateAction<string[]>>];
7
- export declare const useExpand: (flattenAllData: any[], expandedKeysProps: string[], defaultExpandedKeys: string[], defaultExpandAll: boolean, defaultExpandRoot: boolean, defaultExpandParent: boolean, scrollKey: string, isInit: boolean, filterTreeNode: FunctionConstructor, filterValue: string) => readonly [string[], React.Dispatch<React.SetStateAction<string[]>>];
7
+ export declare const useExpand: (flattenAllData: any[], expandedKeysProps: string[], defaultExpandedKeys: string[], defaultExpandAll: boolean, defaultExpandRoot: boolean, defaultExpandParent: boolean, scrollKey: string, isInit: boolean, filterTreeNode: FunctionConstructor, isSearching: boolean) => readonly [string[], React.Dispatch<React.SetStateAction<string[]>>];
8
8
  export declare const useScrollToKey: (scrollKey: string, index: number, estimatedItemSize: number, scrollRef: any, viewportHeight: number, treeNodePrefixCls: string) => void;
9
9
  export declare const useSelect: (selectedKeysProps: string[], defaultSelectedKeys: string[]) => readonly [string[], React.Dispatch<React.SetStateAction<string[]>>];
@@ -104,7 +104,7 @@ var useChecked = function useChecked(checkStrictly, checkedKeysProps, defaultChe
104
104
 
105
105
  exports.useChecked = useChecked;
106
106
 
107
- var useExpand = function useExpand(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit, filterTreeNode, filterValue) {
107
+ var useExpand = function useExpand(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, isInit, filterTreeNode, isSearching) {
108
108
  var expandScrollkeys = [];
109
109
 
110
110
  if (scrollKey) {
@@ -113,8 +113,8 @@ var useExpand = function useExpand(flattenAllData, expandedKeysProps, defaultExp
113
113
  }
114
114
 
115
115
  var initialExpandedKeys = _react.default.useMemo(function () {
116
- return (0, _treeUtils.getInitExpandedKeys)(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, expandScrollkeys, filterTreeNode, filterValue);
117
- }, [flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, filterTreeNode, filterValue]);
116
+ return (0, _treeUtils.getInitExpandedKeys)(flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, expandScrollkeys, filterTreeNode, isSearching);
117
+ }, [flattenAllData, expandedKeysProps, defaultExpandedKeys, defaultExpandAll, defaultExpandRoot, defaultExpandParent, scrollKey, filterTreeNode, isSearching]);
118
118
 
119
119
  var newExpandedKeys = _react.default.useMemo(function () {
120
120
  return (0, _treeUtils.getExpandedKeys)(expandedKeysProps, expandScrollkeys);
@@ -157,7 +157,6 @@ var useScrollToKey = function useScrollToKey(scrollKey, index, estimatedItemSize
157
157
  }
158
158
 
159
159
  if (treeRoot && treeNode) {
160
- // const treeRootScrollTop = treeRoot.scrollTop
161
160
  var treeRootRect = treeRoot.getBoundingClientRect();
162
161
  var treeNodeRect = treeNode.getBoundingClientRect();
163
162
 
@@ -25,6 +25,7 @@ export interface TreeNodeProps {
25
25
  pos?: string;
26
26
  estimatedItemSize?: number;
27
27
  dragOver?: boolean;
28
+ isLeaf?: boolean;
28
29
  onCheck?: (key: string, value: boolean, node: React.ReactNode, event: React.MouseEvent<MouseEvent>, pos: string) => void;
29
30
  onSelect?: (event: React.MouseEvent<MouseEvent>, node: React.ReactNode, key: string) => void;
30
31
  onExpand?: (value: boolean, node: React.ReactNode) => void;
@@ -35,6 +35,8 @@ var _checkbox = _interopRequireDefault(require("./../checkbox"));
35
35
 
36
36
  var _icon = _interopRequireDefault(require("../icon"));
37
37
 
38
+ var _spin = _interopRequireDefault(require("../spin"));
39
+
38
40
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
41
 
40
42
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -86,6 +88,8 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
86
88
  indeterminate = TreeNodeProps.indeterminate,
87
89
  estimatedItemSize = TreeNodeProps.estimatedItemSize,
88
90
  dragOver = TreeNodeProps.dragOver,
91
+ expandOnClickNode = TreeNodeProps.expandOnClickNode,
92
+ loading = TreeNodeProps.loading,
89
93
  onExpand = TreeNodeProps.onExpand,
90
94
  onCheck = TreeNodeProps.onCheck,
91
95
  onDragStart = TreeNodeProps.onDragStart,
@@ -95,7 +99,7 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
95
99
  onDragEnd = TreeNodeProps.onDragEnd,
96
100
  onDrop = TreeNodeProps.onDrop,
97
101
  onSelect = TreeNodeProps.onSelect,
98
- others = __rest(TreeNodeProps, ["nodeKey", "prefixCls", "selectable", "checkable", "className", "icon", "switcherIcon", "disabled", "draggable", "pos", "checked", "level", "getDragNode", "hasChildNode", "expand", "title", "showLine", "showIcon", "selected", "setDragNode", "style", "indeterminate", "estimatedItemSize", "dragOver", "onExpand", "onCheck", "onDragStart", "onDragOver", "onDragLeave", "onDragEnter", "onDragEnd", "onDrop", "onSelect"]);
102
+ others = __rest(TreeNodeProps, ["nodeKey", "prefixCls", "selectable", "checkable", "className", "icon", "switcherIcon", "disabled", "draggable", "pos", "checked", "level", "getDragNode", "hasChildNode", "expand", "title", "showLine", "showIcon", "selected", "setDragNode", "style", "indeterminate", "estimatedItemSize", "dragOver", "expandOnClickNode", "loading", "onExpand", "onCheck", "onDragStart", "onDragOver", "onDragLeave", "onDragEnter", "onDragEnd", "onDrop", "onSelect"]);
99
103
 
100
104
  var nodeData = _react.default.useMemo(function () {
101
105
  return (0, _extends2.default)({
@@ -113,7 +117,6 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
113
117
  indeterminate: indeterminate,
114
118
  icon: icon,
115
119
  switcherIcon: switcherIcon,
116
- // showLine,
117
120
  showIcon: showIcon,
118
121
  selected: selected
119
122
  }, others);
@@ -195,57 +198,46 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
195
198
  }
196
199
 
197
200
  return indentArr;
198
- }; // line的两种模式, 图标被替换和图标不被替换
201
+ };
202
+
203
+ var isLeaf = (0, _react.useCallback)(function () {
204
+ var isLeaf = TreeNodeProps.isLeaf,
205
+ loadData = TreeNodeProps.loadData,
206
+ hasChildNode = TreeNodeProps.hasChildNode;
207
+
208
+ if (isLeaf === false) {
209
+ return false;
210
+ }
199
211
 
212
+ return isLeaf || !loadData && !hasChildNode;
213
+ }, [TreeNodeProps]); // line的两种模式, 图标被替换和图标不被替换
200
214
 
201
215
  var renderExpandIcon = function renderExpandIcon() {
202
- // todo 图标被替换则 line样式改变
203
- // if(switcherIcon){
204
- // }
205
- if (hasChildNode) {
206
- var _classNames2;
207
-
208
- // todo showLine模式 使用+ -符号图标
209
- // if(!!showLine){
210
- // return (
211
- // <span
212
- // onClick={handleClick}
213
- // className={classNames(`${treeNodePrefixCls}-icon`)}
214
- // >
215
- // {expand ? <Icon type='search' /> : <Icon type='add' />}
216
- // </span>
217
- // )
218
- // }
216
+ if (loading) {
217
+ return /*#__PURE__*/_react.default.createElement(_spin.default, {
218
+ type: "component"
219
+ });
220
+ }
221
+
222
+ var showExpandIcon = !isLeaf();
223
+
224
+ if (showExpandIcon) {
225
+ var _classNames3;
226
+
219
227
  if (Array.isArray(switcherIcon) && switcherIcon.length === 2) {
220
228
  return /*#__PURE__*/_react.default.createElement("span", {
221
- className: (0, _classnames.default)("".concat(treeNodePrefixCls, "-icon"))
229
+ className: (0, _classnames.default)("".concat(treeNodePrefixCls, "-icon"), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-icon-hover"), !expandOnClickNode)),
230
+ onClick: expandOnClickNode ? undefined : handleExpandIconClick
222
231
  }, expandState ? renderIcon(switcherIcon[1]) : renderIcon(switcherIcon[0]));
223
232
  }
224
233
 
225
234
  return /*#__PURE__*/_react.default.createElement("span", {
226
- className: (0, _classnames.default)("".concat(treeNodePrefixCls, "-icon"), (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, "".concat(treeNodePrefixCls, "-animation-expand"), expandState), (0, _defineProperty2.default)(_classNames2, "".concat(treeNodePrefixCls, "-animation-collapse"), !expandState), _classNames2))
235
+ className: (0, _classnames.default)("".concat(treeNodePrefixCls, "-icon"), (_classNames3 = {}, (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-animation-expand"), expandState), (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-animation-collapse"), !expandState), (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-icon-hover"), !expandOnClickNode), _classNames3)),
236
+ onClick: expandOnClickNode ? undefined : handleExpandIconClick
227
237
  }, renderIcon(switcherIcon || /*#__PURE__*/_react.default.createElement(_icon.default, {
228
238
  type: "arrow-right-solid"
229
239
  })));
230
240
  } else {
231
- // if(typeof showLine === 'object' && !showLine.showLeafIcon){
232
- // return (
233
- // <span
234
- // className={classNames(`${treeNodePrefixCls}-icon-hidden`)}
235
- // >
236
- // {/* todo renderLeafLine() */}
237
- // {renderIcon(leafIcon)}
238
- // </span>
239
- // )
240
- // }else if(typeof showLine === 'object' && showLine.showLeafIcon || showLine === true){
241
- // return (
242
- // <span
243
- // className={classNames(`${treeNodePrefixCls}-leaf-icon`)}
244
- // >
245
- // {renderIcon(leafIcon)}
246
- // </span>
247
- // )
248
- // }
249
241
  // 叶子结点 隐藏展开按钮
250
242
  return /*#__PURE__*/_react.default.createElement("span", {
251
243
  className: "".concat(treeNodePrefixCls, "-icon-hidden")
@@ -260,11 +252,11 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
260
252
  };
261
253
 
262
254
  var renderNode = function renderNode() {
263
- var _classNames3;
255
+ var _classNames4, _classNames5;
264
256
 
265
257
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
266
258
  draggable: draggable && !disabled,
267
- className: (0, _classnames.default)((_classNames3 = {}, (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-draggabled"), true), (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-root"), true), (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-fb-children-pointerEvents"), forbiddenChildrenPointerEvents), (0, _defineProperty2.default)(_classNames3, "".concat(treeNodePrefixCls, "-drag-over"), dragOver), _classNames3)),
259
+ className: (0, _classnames.default)((_classNames4 = {}, (0, _defineProperty2.default)(_classNames4, "".concat(treeNodePrefixCls, "-draggabled"), true), (0, _defineProperty2.default)(_classNames4, "".concat(treeNodePrefixCls, "-root"), true), (0, _defineProperty2.default)(_classNames4, "".concat(treeNodePrefixCls, "-fb-children-pointerEvents"), forbiddenChildrenPointerEvents), (0, _defineProperty2.default)(_classNames4, "".concat(treeNodePrefixCls, "-drag-over"), dragOver), _classNames4)),
268
260
  onDragStart: handleDragStart,
269
261
  onDragEnd: handleDragEnd,
270
262
  onDragOver: handleDragOver,
@@ -273,7 +265,8 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
273
265
  onDrop: handleDrop,
274
266
  ref: dragRef
275
267
  }, indent(), renderExpandIcon(), showIcon && renderNodeIcon(), /*#__PURE__*/_react.default.createElement("div", {
276
- className: "".concat(treeNodePrefixCls, "-title-wrap")
268
+ className: (0, _classnames.default)((_classNames5 = {}, (0, _defineProperty2.default)(_classNames5, "".concat(treeNodePrefixCls, "-title-wrap"), true), (0, _defineProperty2.default)(_classNames5, "".concat(treeNodePrefixCls, "-title-wrap-hover"), !expandOnClickNode && !disabled), (0, _defineProperty2.default)(_classNames5, "".concat(treeNodePrefixCls, "-title-wrap-selected"), selected && selectable && !disabled && !expandOnClickNode), _classNames5)),
269
+ onClick: expandOnClickNode ? undefined : handleClick
277
270
  }, checkable ? /*#__PURE__*/_react.default.createElement(_checkbox.default, {
278
271
  onChange: handleOnchange,
279
272
  checked: checked,
@@ -303,12 +296,17 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
303
296
  };
304
297
  });
305
298
 
306
- var handleClick = _react.default.useCallback(function (e) {
307
- e.stopPropagation();
299
+ var handleExpandIconClick = (0, _react.useCallback)(function (e) {
300
+ e === null || e === void 0 ? void 0 : e.stopPropagation();
308
301
  setExpandState(!expandState);
309
302
  onExpand && onExpand(nodeKey, !expandState, nodeData);
303
+ }, [expandState, nodeData, nodeKey, onExpand, setExpandState]);
304
+
305
+ var handleClick = _react.default.useCallback(function (e) {
306
+ e.stopPropagation();
307
+ expandOnClickNode && handleExpandIconClick();
310
308
  handleSelect(e);
311
- }, [setExpandState, expandState, onExpand, nodeKey, nodeData, handleSelect]);
309
+ }, [expandOnClickNode, handleExpandIconClick, handleSelect]);
312
310
 
313
311
  var handleDragStart = _react.default.useCallback(function (e) {
314
312
  if (!draggable) return;
@@ -364,11 +362,11 @@ var TreeNode = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
364
362
  }, [onDrop, nodeData, nodeKey]);
365
363
 
366
364
  return /*#__PURE__*/_react.default.createElement("div", {
367
- className: (0, _classnames.default)("".concat(treeNodePrefixCls, "-item"), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-item-hover"), !disabled && selectable), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-selected"), selected && selectable && !disabled), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-disabled"), disabled), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-opened"), expandState), (0, _concat.default)(_context = "".concat(treeNodePrefixCls, "-item-")).call(_context, nodeKey), className),
365
+ className: (0, _classnames.default)("".concat(treeNodePrefixCls, "-item"), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-item-hover"), !disabled && selectable && expandOnClickNode), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-selected"), selected && selectable && !disabled && expandOnClickNode), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-disabled"), disabled), (0, _defineProperty2.default)({}, "".concat(treeNodePrefixCls, "-opened"), expandState), (0, _concat.default)(_context = "".concat(treeNodePrefixCls, "-item-")).call(_context, nodeKey), className),
368
366
  style: (0, _extends2.default)({
369
367
  height: "".concat(estimatedItemSize, "px")
370
368
  }, style),
371
- onClick: handleClick
369
+ onClick: expandOnClickNode ? handleClick : undefined
372
370
  }, renderNode());
373
371
  });
374
372