@chaoswise/ui 3.1.10 → 3.1.11

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 (64) hide show
  1. package/lib/AbreastLayout/index.js +20 -17
  2. package/lib/Antd5/config-provider/index.js +10 -6
  3. package/lib/Antd5/dropdown/dropdown.js +1 -1
  4. package/lib/Antd5/menu/menu.js +1 -1
  5. package/lib/Antd5/splitter/SplitBar.js +74 -15
  6. package/lib/Antd5/splitter/Splitter.js +27 -17
  7. package/lib/Antd5/splitter/hooks/useItems.js +6 -3
  8. package/lib/Antd5/splitter/hooks/useResizable.js +3 -3
  9. package/lib/Antd5/splitter/hooks/useResize.js +17 -6
  10. package/lib/Antd5/splitter/style/index.js +32 -6
  11. package/lib/Antd5/typography/hooks/useCopyClick.js +2 -2
  12. package/lib/Antd5/upload/Upload.js +1 -1
  13. package/lib/BasicLayout/index.js +29 -29
  14. package/lib/Button/index.js +0 -3
  15. package/lib/CWCascader/index.js +0 -5
  16. package/lib/CWCascader/rc-cascader/OptionList/Column.js +1 -1
  17. package/lib/CWColorPicker/SketchPicker/components/common/Checkboard.js +8 -10
  18. package/lib/CWColorPicker/SketchPicker/components/common/Raised.js +6 -9
  19. package/lib/CWColorPicker/SketchPicker/components/sketch/index.js +7 -9
  20. package/lib/CWColorPicker/index.js +2 -4
  21. package/lib/CWMessage/MessageContent/TabList/index.js +1 -1
  22. package/lib/CWMessage/MessageContent/index.js +1 -1
  23. package/lib/CWMessage/index.js +6 -14
  24. package/lib/CWRadioTabs/index.js +2 -5
  25. package/lib/CWRangePicker/Refresh/index.js +2 -1
  26. package/lib/CWRangePicker/TimeSpan/index.js +2 -1
  27. package/lib/CWRangePicker/index.js +0 -5
  28. package/lib/CWSelect/index.js +2 -2
  29. package/lib/CWTable/CWTable.js +29 -18
  30. package/lib/CWTable/index.js +0 -12
  31. package/lib/CWTree/index.js +188 -149
  32. package/lib/CWTree/index.style.js +4 -2
  33. package/lib/CWTree/utils/index.js +148 -53
  34. package/lib/CardSelect/index.js +8 -12
  35. package/lib/ChangeIcon/index.js +3 -5
  36. package/lib/Collapse/index.js +8 -11
  37. package/lib/CustomScrollBar/index.js +6 -13
  38. package/lib/EchartsBase/index.js +0 -3
  39. package/lib/Empty/index.js +0 -4
  40. package/lib/Flow/Flow.js +0 -3
  41. package/lib/Header/index.js +16 -17
  42. package/lib/LayoutWrapper/Footer.js +3 -8
  43. package/lib/LayoutWrapper/index.js +2 -58
  44. package/lib/Modal/assets/Close.js +0 -8
  45. package/lib/ModuleFederation/react-dynamic-remote-component/RemoteComponent.js +3 -3
  46. package/lib/ModuleFederation/react-dynamic-remote-component/load-module.js +2 -2
  47. package/lib/QuickTransfer/index.js +9 -11
  48. package/lib/QuickTransfer/utils.js +50 -29
  49. package/lib/ScrollLoad/index.js +17 -19
  50. package/lib/SearchBar/index.js +2 -5
  51. package/lib/SiderMenu/index.js +2 -4
  52. package/lib/SimpleCard/index.js +5 -12
  53. package/lib/SimplePagination/index.js +6 -8
  54. package/lib/SingleSpa/index.js +2 -2
  55. package/lib/Tag/CheckableTag.js +8 -10
  56. package/lib/Tag/index.js +0 -1
  57. package/lib/TimeRangeSlider/index.js +0 -3
  58. package/lib/TimeZoneSelect/index.js +2 -2
  59. package/lib/Tooltip/index.js +9 -6
  60. package/lib/TooltipText/index.js +2 -4
  61. package/lib/UniversalLayout/index.js +5 -7
  62. package/lib/WangEditor/index.js +10 -11
  63. package/lib/useChartTheme/index.js +3 -2
  64. package/package.json +3 -2
@@ -1,10 +1,11 @@
1
+ import _Dropdown from "@chaoswise/ui/lib/Dropdown";
1
2
  import _Tooltip from "@chaoswise/ui/lib/Tooltip";
2
3
  import _TooltipText from "@chaoswise/ui/lib/TooltipText";
3
- import _Dropdown from "@chaoswise/ui/lib/Dropdown";
4
4
  import _Menu from "@chaoswise/ui/lib/Menu";
5
5
  import _Tree from "@chaoswise/ui/lib/Tree";
6
- var _excluded = ["children", "treeData", "menuData", "extendType", "onClickMenu", "menuStyle", "menuRender", "extraFooter", "tooltipPlacement", "searchValue", "multiple", "selectedKeys", "defaultSelectedKeys", "onSelect", "searchHighlight", "draggable", "searchHighlightStyle", "className", "caseSensitive", "onExpand", "renderItem", "useTooltipText"],
7
- _excluded2 = ["icon", "title", "key", "children"];
6
+ var _excluded = ["children", "treeData", "menuData", "extendType", "onClickMenu", "menuStyle", "menuRender", "extraFooter", "tooltipPlacement", "searchValue", "multiple", "selectedKeys", "defaultSelectedKeys", "onSelect", "searchHighlight", "draggable", "searchHighlightStyle", "className", "caseSensitive", "onExpand", "renderItem", "useTooltipText", "fieldNames"],
7
+ _excluded2 = ["key", "title", "children"],
8
+ _excluded3 = ["icon", "title", "key"];
8
9
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
9
10
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
10
11
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -19,7 +20,7 @@ import { EllipsisOutlined, DownOutlined } from "@ant-design/icons";
19
20
  import PropTypes from "prop-types";
20
21
  import classnames from "classnames";
21
22
  import DragSvg from "./assets/Drag";
22
- import { createTree, createTitle } from "./utils";
23
+ import { createTitle, processTreeData } from "./utils";
23
24
  import useConfigContext from "../useConfigContext";
24
25
  import useStyle from "./index.style";
25
26
  import { useIntl } from "../locales";
@@ -28,15 +29,20 @@ var TreeNode = _Tree.TreeNode,
28
29
  var SubMenu = _Menu.SubMenu;
29
30
 
30
31
  /**
31
- * 基于antd Tree封 支持自定义功能菜单内容、主要适用于左侧导航树(符合UIUE规范)
32
+ * 基于antd Tree封装,支持自定义功能菜单内容、主要适用于左侧导航树(符合UIUE规范)
32
33
  */
33
34
 
34
35
  function CWTree(_ref) {
35
36
  var children = _ref.children,
36
37
  treeData = _ref.treeData,
37
- menuData = _ref.menuData,
38
- extendType = _ref.extendType,
39
- onClickMenu = _ref.onClickMenu,
38
+ _ref$menuData = _ref.menuData,
39
+ menuData = _ref$menuData === void 0 ? function () {
40
+ return false;
41
+ } : _ref$menuData,
42
+ _ref$extendType = _ref.extendType,
43
+ extendType = _ref$extendType === void 0 ? "button" : _ref$extendType,
44
+ _ref$onClickMenu = _ref.onClickMenu,
45
+ onClickMenu = _ref$onClickMenu === void 0 ? function () {} : _ref$onClickMenu,
40
46
  menuStyle = _ref.menuStyle,
41
47
  menuRender = _ref.menuRender,
42
48
  extraFooter = _ref.extraFooter,
@@ -64,6 +70,8 @@ function CWTree(_ref) {
64
70
  renderItem = _ref.renderItem,
65
71
  _ref$useTooltipText = _ref.useTooltipText,
66
72
  useTooltipText = _ref$useTooltipText === void 0 ? true : _ref$useTooltipText,
73
+ _ref$fieldNames = _ref.fieldNames,
74
+ fieldNames = _ref$fieldNames === void 0 ? {} : _ref$fieldNames,
67
75
  rest = _objectWithoutProperties(_ref, _excluded);
68
76
  var _useConfigContext = useConfigContext(),
69
77
  getPrefixCls = _useConfigContext.getPrefixCls;
@@ -75,8 +83,8 @@ function CWTree(_ref) {
75
83
  cssVarCls = _useStyle2[2];
76
84
  var _useState = useState(""),
77
85
  _useState2 = _slicedToArray(_useState, 2),
78
- _showExtend = _useState2[0],
79
- setShowExtend = _useState2[1];
86
+ showExtendKey = _useState2[0],
87
+ setShowExtendKey = _useState2[1];
80
88
  var _useState3 = useState([]),
81
89
  _useState4 = _slicedToArray(_useState3, 2),
82
90
  expandedKeys = _useState4[0],
@@ -86,64 +94,75 @@ function CWTree(_ref) {
86
94
  selfSelectedKeys = _useState6[0],
87
95
  setSelfSelectedKeys = _useState6[1];
88
96
  var intl = useIntl();
97
+ var memoizedSearchHighlightStyle = useMemo(function () {
98
+ return searchHighlightStyle;
99
+ }, [searchHighlightStyle]);
100
+ var memoizedMenuStyle = useMemo(function () {
101
+ return menuStyle;
102
+ }, [menuStyle]);
89
103
  useEffect(function () {
90
104
  if (selectedKeys !== undefined) {
91
105
  setSelfSelectedKeys(selectedKeys);
92
106
  }
93
107
  }, [selectedKeys]);
94
- function selfOnSelect(Keys, e) {
108
+ var selfOnSelect = useCallback(function (keys, e) {
95
109
  if (onSelect) {
96
- onSelect(Keys, e);
110
+ onSelect(keys, e);
97
111
  }
98
112
  if (selectedKeys === undefined) {
99
- setSelfSelectedKeys(Keys);
100
- }
101
- }
102
- var _treeData = useMemo(function () {
103
- if (!treeData) {
104
- return [];
113
+ setSelfSelectedKeys(keys);
105
114
  }
106
- if (!searchHighlight) {
107
- return treeData;
108
- }
109
- return createTree(treeData, searchValue, caseSensitive, rest.checkable);
110
- }, [searchHighlight, treeData, searchValue, rest.checkable, caseSensitive]);
115
+ }, [onSelect, selectedKeys]);
116
+ var processedTreeData = useMemo(function () {
117
+ return processTreeData(treeData, {
118
+ searchHighlight: searchHighlight,
119
+ searchValue: searchValue,
120
+ caseSensitive: caseSensitive,
121
+ checkable: rest.checkable,
122
+ fieldNames: fieldNames
123
+ });
124
+ }, [searchHighlight, treeData, searchValue, caseSensitive, rest.checkable, fieldNames]);
111
125
  var buildMenu = useCallback(function (array) {
112
- // 递归构建菜单解构
126
+ // 递归构建菜单结构
113
127
  return array.map(function (item) {
114
- if (item.children) {
128
+ var key = item.key,
129
+ title = item.title,
130
+ children = item.children,
131
+ restProps = _objectWithoutProperties(item, _excluded2);
132
+ if (children) {
115
133
  return /*#__PURE__*/React.createElement(SubMenu, _extends({
116
134
  popupClassName: "cw-tree-treenode-extend-menu-submenu",
117
- key: item.key,
118
- title: item.title
119
- }, item), buildMenu(item.children));
135
+ key: key,
136
+ title: title
137
+ }, restProps), buildMenu(children));
120
138
  } else {
121
139
  return /*#__PURE__*/React.createElement(_Menu.Item, _extends({
122
- key: item.key
123
- }, item), item.title);
140
+ key: key
141
+ }, restProps), title);
124
142
  }
125
143
  });
126
144
  }, []);
127
- var creatMenu = useCallback(function (treeTitle, treeKey, props) {
128
- // 创建扩展菜单
145
+ var createMenu = useCallback(function (treeTitle, treeKey, props) {
146
+ // 创建扩展菜单
129
147
  var data = menuData(treeTitle, treeKey, props);
130
- if (data.constructor === Array) {
148
+ if (Array.isArray(data)) {
131
149
  return /*#__PURE__*/React.createElement(_Menu, {
132
- style: menuStyle,
150
+ style: memoizedMenuStyle,
133
151
  onClick: function onClick(_ref2) {
134
152
  var item = _ref2.item,
135
153
  key = _ref2.key,
136
- keyPath = _ref2.keyPath,
137
154
  domEvent = _ref2.domEvent;
138
155
  domEvent.stopPropagation();
139
156
  onClickMenu(key, treeKey, item, domEvent, props);
140
157
  }
141
158
  }, buildMenu(data));
142
159
  }
143
- }, [menuData, onClickMenu, menuStyle]);
144
- var creatButton = useCallback(function (icon, treeTitle, treeKey, props) {
160
+ return null;
161
+ }, [menuData, onClickMenu, memoizedMenuStyle, buildMenu]);
162
+ var createButton = useCallback(function (icon, treeTitle, treeKey, props) {
145
163
  // 创建扩展功能按钮
146
164
  var data = menuData(treeTitle, treeKey, props);
165
+ if (!Array.isArray(data)) return null;
147
166
  return data.map(function (item) {
148
167
  return /*#__PURE__*/React.createElement("div", {
149
168
  key: item.key,
@@ -157,12 +176,26 @@ function CWTree(_ref) {
157
176
  }, item.title));
158
177
  });
159
178
  }, [menuData, onClickMenu]);
160
- var creatTitle = useCallback(function (icon, title, key, children, props) {
179
+ var renderTooltipTitle = useCallback(function (title) {
180
+ var placement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "bottomLeft";
181
+ return useTooltipText ? /*#__PURE__*/React.createElement(_TooltipText, {
182
+ placement: placement
183
+ }, title) : title;
184
+ }, [useTooltipText]);
185
+ var renderDragIcon = useMemo(function () {
186
+ if (!draggable) return null;
187
+ return /*#__PURE__*/React.createElement("span", {
188
+ className: "cw-tree-treenode-drag-icon"
189
+ }, /*#__PURE__*/React.createElement(_Tooltip, {
190
+ title: intl.get("5fe60774-0f08-450f-a9d9-998996485fec").d("拖拽移动")
191
+ }, /*#__PURE__*/React.createElement(DragSvg, null)));
192
+ }, [draggable, intl]);
193
+
194
+ // 创建标题
195
+ var createTitleComponent = useCallback(function (icon, title, key, props) {
161
196
  var menuDom = /*#__PURE__*/React.createElement(_Dropdown, {
162
- overlay: creatMenu(title, key, props),
163
- placement: "bottomLeft"
164
- // trigger={["click"]}
165
- ,
197
+ overlay: createMenu(title, key, props),
198
+ placement: "bottomLeft",
166
199
  overlayClassName: "cw-tree-treenode-extend-menu"
167
200
  }, /*#__PURE__*/React.createElement("span", {
168
201
  onClick: function onClick(e) {
@@ -171,117 +204,124 @@ function CWTree(_ref) {
171
204
  }, /*#__PURE__*/React.createElement(EllipsisOutlined, {
172
205
  className: "cw-tree-treenode-extend-menu-ellipsis"
173
206
  })));
207
+ var isExtendVisible = showExtendKey === key;
174
208
  var titleDom = /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("span", {
175
209
  className: "cw-tree-treenode-content"
176
210
  }, /*#__PURE__*/React.createElement("span", {
177
211
  className: "cw-tree-treenode-title"
178
- }, useTooltipText ? /*#__PURE__*/React.createElement(_TooltipText, {
179
- placement: tooltipPlacement ? tooltipPlacement : "bottomLeft"
180
- }, title) : title), draggable && /*#__PURE__*/React.createElement("span", {
181
- className: "cw-tree-treenode-drag-icon"
182
- }, /*#__PURE__*/React.createElement(_Tooltip, {
183
- title: intl.get("5fe60774-0f08-450f-a9d9-998996485fec").d("拖拽移动")
184
- }, /*#__PURE__*/React.createElement(DragSvg, null)))), /*#__PURE__*/React.createElement("span", {
212
+ }, renderTooltipTitle(title, tooltipPlacement)), renderDragIcon), /*#__PURE__*/React.createElement("span", {
185
213
  className: classnames("cw-tree-treenode-extend", {
186
- "cw-tree-treenode-extend-show": _showExtend === key
214
+ "cw-tree-treenode-extend-show": isExtendVisible
187
215
  })
188
- }, menuRender ? /*#__PURE__*/React.createElement(Fragment, null, menuRender(title, key, props), menuData(title, key, props) && menuDom) : extendType === "menu" ? menuDom : creatButton(icon, title, key, props)));
216
+ }, menuRender ? /*#__PURE__*/React.createElement(Fragment, null, menuRender(title, key, props), menuData(title, key, props) && menuDom) : extendType === "menu" ? menuDom : createButton(icon, title, key, props)));
189
217
  return titleDom;
190
- }, [menuData, extendType, tooltipPlacement, draggable, _showExtend, menuRender, useTooltipText, creatButton, creatMenu]);
191
- var innerTreeNode = useMemo(function () {
192
- function creatTreeNode(data) {
193
- // 创建树结构
194
- return data.map(function (_props) {
195
- var icon = _props.icon,
196
- title = _props.title,
197
- key = _props.key,
198
- children = _props.children,
199
- props = _objectWithoutProperties(_props, _excluded2);
200
- var _title = title;
201
- if (searchHighlight && typeof title === "string") {
202
- var _createTitle = createTitle(caseSensitive, searchValue, title),
203
- index = _createTitle.index,
204
- beforeTitle = _createTitle.beforeTitle,
205
- afterTitle = _createTitle.afterTitle,
206
- searchStr = _createTitle.searchStr;
207
- _title = index > -1 ? /*#__PURE__*/React.createElement("span", null, beforeTitle, /*#__PURE__*/React.createElement("span", {
208
- style: searchHighlightStyle
209
- }, searchStr), afterTitle) : /*#__PURE__*/React.createElement("span", null, title);
210
- }
218
+ }, [createMenu, menuData, extendType, showExtendKey, menuRender, createButton, renderTooltipTitle, renderDragIcon, tooltipPlacement]);
211
219
 
212
- // renderItem 自定义
213
- if (renderItem) {
214
- _title = renderItem(_title, _props);
215
- }
216
- return /*#__PURE__*/React.createElement(TreeNode, _extends({
217
- className: "cw-tree-treenode",
218
- record: _props,
219
- icon: icon ? icon : null,
220
- title: menuData(_title, key, props) || menuRender ? creatTitle(icon, _title, key, children, props) : /*#__PURE__*/React.createElement("span", {
221
- className: "cw-tree-treenode-content"
222
- }, /*#__PURE__*/React.createElement("span", {
223
- className: "cw-tree-treenode-title"
224
- }, useTooltipText ? /*#__PURE__*/React.createElement(_TooltipText, {
225
- title: title,
226
- placement: "top"
227
- }, _title) : _title)),
228
- originTitle: title,
229
- key: key
230
- }, props), children && creatTreeNode(children));
231
- });
220
+ // 搜索高亮逻辑
221
+ var renderHighlightedTitle = useCallback(function (title) {
222
+ if (!searchHighlight || typeof title !== "string") {
223
+ return title;
232
224
  }
233
- return creatTreeNode(_treeData);
234
- }, [_treeData, searchHighlight, caseSensitive, searchValue, searchHighlightStyle, menuData, menuRender, useTooltipText, renderItem, creatTitle]);
235
- var _onExpand = function _onExpand(keys, e) {
225
+ var _createTitle = createTitle(caseSensitive, searchValue, title),
226
+ index = _createTitle.index,
227
+ beforeTitle = _createTitle.beforeTitle,
228
+ afterTitle = _createTitle.afterTitle,
229
+ searchStr = _createTitle.searchStr;
230
+ return index > -1 ? /*#__PURE__*/React.createElement("span", null, beforeTitle, /*#__PURE__*/React.createElement("span", {
231
+ style: memoizedSearchHighlightStyle
232
+ }, searchStr), afterTitle) : /*#__PURE__*/React.createElement("span", null, title);
233
+ }, [searchHighlight, caseSensitive, searchValue, memoizedSearchHighlightStyle]);
234
+
235
+ // 处理核心功能(扩展菜单、搜索高亮等)
236
+ var titleRender = useCallback(function (nodeData) {
237
+ var icon = nodeData.icon,
238
+ title = nodeData.title,
239
+ key = nodeData.key,
240
+ props = _objectWithoutProperties(nodeData, _excluded3);
241
+ var processedTitle = renderHighlightedTitle(title);
242
+
243
+ // renderItem 自定义 - 在基础功能上微调标题内容
244
+ if (renderItem) {
245
+ processedTitle = renderItem(processedTitle, nodeData);
246
+ }
247
+ var hasMenu = menuData(processedTitle, key, props) || menuRender;
248
+ return hasMenu ? createTitleComponent(icon, processedTitle, key, props) : /*#__PURE__*/React.createElement("span", {
249
+ className: "cw-tree-treenode-content"
250
+ }, /*#__PURE__*/React.createElement("span", {
251
+ className: "cw-tree-treenode-title"
252
+ }, renderTooltipTitle(processedTitle, "top")));
253
+ }, [renderHighlightedTitle, renderItem, menuData, menuRender, createTitleComponent, renderTooltipTitle]);
254
+ var handleExpand = useCallback(function (keys, e) {
236
255
  setExpandedKeys(keys);
237
256
  onExpand(keys, e);
238
- };
257
+ }, [onExpand]);
258
+
259
+ // 搜索展开逻辑优化
260
+ var searchExpandedKeys = useMemo(function () {
261
+ if (!searchValue) return [];
262
+ var expandedKeys = [];
263
+ var _loop = function loop(treeData) {
264
+ treeData.forEach(function (item) {
265
+ if (item.children && item.children.length > 0) {
266
+ expandedKeys.push(item.key);
267
+ _loop(item.children);
268
+ }
269
+ });
270
+ };
271
+ _loop(processedTreeData);
272
+ return expandedKeys;
273
+ }, [searchValue, processedTreeData]);
239
274
  useEffect(function () {
240
275
  if (searchValue) {
241
- var _expandedKeys = [];
242
- // 遍历树获取所有父节点key
243
- var _loop = function loop(treeData) {
244
- treeData.forEach(function (item) {
245
- if (item.children && item.children.length > 0) {
246
- _expandedKeys.push(item.key);
247
- _loop(item.children);
248
- }
249
- });
250
- };
251
- _loop(_treeData);
252
- setExpandedKeys(_expandedKeys);
276
+ setExpandedKeys(searchExpandedKeys);
253
277
  }
254
- }, [searchValue, _treeData]);
278
+ }, [searchValue, searchExpandedKeys]);
255
279
 
256
280
  // 有搜索内容默认展开搜索节点
257
281
  var expandedConfig = useMemo(function () {
258
- // 获取全部父节点key
259
282
  if (searchValue) {
260
283
  return {
261
284
  expandedKeys: expandedKeys
262
- // autoExpandParent: true,
263
285
  };
264
286
  }
265
287
  return {};
266
288
  }, [searchValue, expandedKeys]);
267
- var handleMouseEnter = function handleMouseEnter(e) {
289
+ var handleMouseEnter = useCallback(function (e) {
268
290
  if (rest.onMouseEnter) {
269
291
  rest.onMouseEnter(e);
270
292
  }
271
293
  // 显示扩展部分
272
- if (e.node.key === _showExtend) {
273
- return;
294
+ var nodeKey = e.node.key;
295
+ if (nodeKey !== showExtendKey) {
296
+ setShowExtendKey(nodeKey);
274
297
  }
275
- setShowExtend(e.node.key);
276
- };
277
- var handleMouseLeave = function handleMouseLeave(e) {
298
+ }, [rest.onMouseEnter, showExtendKey]);
299
+ var handleMouseLeave = useCallback(function (e) {
278
300
  if (rest.onMouseLeave) {
279
- rest.onMouseLeave(e); // 传递参数给外部的 onMouseLeave
301
+ rest.onMouseLeave(e);
280
302
  }
281
- setShowExtend("");
282
- };
303
+ setShowExtendKey("");
304
+ }, [rest.onMouseLeave]);
305
+
306
+ // 拖拽配置优化
307
+ var draggableConfig = useMemo(function () {
308
+ return draggable ? {
309
+ icon: false,
310
+ nodeDraggable: function nodeDraggable() {
311
+ return true;
312
+ }
313
+ } : false;
314
+ }, [draggable]);
315
+
316
+ // 样式类名配置
317
+ var wrapperClassName = useMemo(function () {
318
+ return classnames(hashId, cssVarCls, "".concat(prefixCls, "-cw-tree-outer-wrapper"));
319
+ }, [hashId, cssVarCls, prefixCls]);
320
+ var treeClassName = useMemo(function () {
321
+ return classnames("cw-tree", className);
322
+ }, [className]);
283
323
  return wrapCSSVar(/*#__PURE__*/React.createElement("div", {
284
- className: classnames(hashId, cssVarCls, "".concat(prefixCls, "-cw-tree-outer-wrapper"))
324
+ className: wrapperClassName
285
325
  }, /*#__PURE__*/React.createElement("div", {
286
326
  className: "cw-tree-inner-wrapper"
287
327
  }, /*#__PURE__*/React.createElement("div", {
@@ -293,39 +333,24 @@ function CWTree(_ref) {
293
333
  onSelect: selfOnSelect,
294
334
  expandAction: false,
295
335
  multiple: multiple,
296
- className: classnames("cw-tree", className),
297
- draggable: draggable ? {
298
- icon: false,
299
- nodeDraggable: function nodeDraggable() {
300
- return true;
301
- }
302
- } : false,
303
- onExpand: _onExpand
304
- }, expandedConfig, rest, {
336
+ className: treeClassName,
337
+ draggable: draggableConfig,
338
+ onExpand: handleExpand
339
+ }, expandedConfig, {
340
+ showIcon: true,
341
+ treeData: processedTreeData,
342
+ titleRender: titleRender
343
+ }, rest, {
305
344
  onMouseEnter: handleMouseEnter,
306
345
  onMouseLeave: handleMouseLeave
307
- }), children ? children : innerTreeNode))), /*#__PURE__*/React.createElement("div", {
346
+ }), children))), extraFooter && /*#__PURE__*/React.createElement("div", {
308
347
  className: "cw-tree-footer"
309
348
  }, extraFooter)));
310
349
  }
311
- CWTree.defaultProps = {
312
- showIcon: true,
313
- extendType: "button",
314
- menuData: function menuData() {
315
- return false;
316
- },
317
- onClickMenu: function onClickMenu(key, treeKey, item, domEvent, props) {
318
- console.log(key, treeKey, item, domEvent, props);
319
- },
320
- searchHighlight: false,
321
- searchHighlightStyle: {
322
- color: "#F5222D"
323
- },
324
- draggable: false
325
- };
326
350
  CWTree.propTypes = {
327
351
  /**
328
- * 列表内容,每一项应当为一个对象,包含图标icon,名称title,键key,子树children。
352
+ * 列表内容,每一项应当为一个对象。默认包含图标icon,名称title,键key,子树children。
353
+ * 可通过fieldNames自定义字段名。
329
354
  * key需要遵守格式'0-1-1',每一级都从0开始排列,如:第一级第一个key为'0',它的子树第二个key为'0-1'
330
355
  */
331
356
  treeData: PropTypes.arrayOf(PropTypes.shape({
@@ -334,6 +359,15 @@ CWTree.propTypes = {
334
359
  key: PropTypes.string,
335
360
  children: PropTypes.array
336
361
  })),
362
+ /**
363
+ * 自定义字段名映射,允许指定title、key、children的字段名
364
+ * 例如: { title: 'name', key: 'id', children: 'subItems' }
365
+ */
366
+ fieldNames: PropTypes.shape({
367
+ title: PropTypes.string,
368
+ key: PropTypes.string,
369
+ children: PropTypes.string
370
+ }),
337
371
  /**
338
372
  * 自定义菜单内容。返回值为数组。function(treeTitle,treeKey,props):[{
339
373
  * title:PropTypes.oneOfType([PropTypes.string,PropTypes.node]),
@@ -395,9 +429,14 @@ CWTree.propTypes = {
395
429
  */
396
430
  onDrop: PropTypes.func,
397
431
  /**
398
- * 自定义render node节点
432
+ * 自定义render node节点标题内容(在基础功能上微调)
433
+ */
434
+ renderItem: PropTypes.func,
435
+ /**
436
+ * 自定义渲染整个节点(完全自定义,可获得内部渲染结果作为参考)
437
+ * function(nodeData, internalResult) => ReactNode
399
438
  */
400
- renderItem: PropTypes.func
439
+ titleRender: PropTypes.func
401
440
  };
402
441
  CWTree.TreeNode = TreeNode;
403
442
  CWTree.DirectoryTree = DirectoryTree;
@@ -51,8 +51,10 @@ var genCustomCWTreeStyle = function genCustomCWTreeStyle(token) {
51
51
  lineHeight: "32px",
52
52
  display: "inline-flex",
53
53
  flex: 1,
54
- width: "0",
55
- position: "static",
54
+ width: 0,
55
+ "&:has(.cw-tree-treenode-content)": {
56
+ position: "static"
57
+ },
56
58
  ".cw-tree-treenode-content": {
57
59
  width: "100%",
58
60
  ".cw-tree-treenode-title": {