@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.
- package/lib/AbreastLayout/index.js +20 -17
- package/lib/Antd5/config-provider/index.js +10 -6
- package/lib/Antd5/dropdown/dropdown.js +1 -1
- package/lib/Antd5/menu/menu.js +1 -1
- package/lib/Antd5/splitter/SplitBar.js +74 -15
- package/lib/Antd5/splitter/Splitter.js +27 -17
- package/lib/Antd5/splitter/hooks/useItems.js +6 -3
- package/lib/Antd5/splitter/hooks/useResizable.js +3 -3
- package/lib/Antd5/splitter/hooks/useResize.js +17 -6
- package/lib/Antd5/splitter/style/index.js +32 -6
- package/lib/Antd5/typography/hooks/useCopyClick.js +2 -2
- package/lib/Antd5/upload/Upload.js +1 -1
- package/lib/BasicLayout/index.js +29 -29
- package/lib/Button/index.js +0 -3
- package/lib/CWCascader/index.js +0 -5
- package/lib/CWCascader/rc-cascader/OptionList/Column.js +1 -1
- package/lib/CWColorPicker/SketchPicker/components/common/Checkboard.js +8 -10
- package/lib/CWColorPicker/SketchPicker/components/common/Raised.js +6 -9
- package/lib/CWColorPicker/SketchPicker/components/sketch/index.js +7 -9
- package/lib/CWColorPicker/index.js +2 -4
- package/lib/CWMessage/MessageContent/TabList/index.js +1 -1
- package/lib/CWMessage/MessageContent/index.js +1 -1
- package/lib/CWMessage/index.js +6 -14
- package/lib/CWRadioTabs/index.js +2 -5
- package/lib/CWRangePicker/Refresh/index.js +2 -1
- package/lib/CWRangePicker/TimeSpan/index.js +2 -1
- package/lib/CWRangePicker/index.js +0 -5
- package/lib/CWSelect/index.js +2 -2
- package/lib/CWTable/CWTable.js +29 -18
- package/lib/CWTable/index.js +0 -12
- package/lib/CWTree/index.js +188 -149
- package/lib/CWTree/index.style.js +4 -2
- package/lib/CWTree/utils/index.js +148 -53
- package/lib/CardSelect/index.js +8 -12
- package/lib/ChangeIcon/index.js +3 -5
- package/lib/Collapse/index.js +8 -11
- package/lib/CustomScrollBar/index.js +6 -13
- package/lib/EchartsBase/index.js +0 -3
- package/lib/Empty/index.js +0 -4
- package/lib/Flow/Flow.js +0 -3
- package/lib/Header/index.js +16 -17
- package/lib/LayoutWrapper/Footer.js +3 -8
- package/lib/LayoutWrapper/index.js +2 -58
- package/lib/Modal/assets/Close.js +0 -8
- package/lib/ModuleFederation/react-dynamic-remote-component/RemoteComponent.js +3 -3
- package/lib/ModuleFederation/react-dynamic-remote-component/load-module.js +2 -2
- package/lib/QuickTransfer/index.js +9 -11
- package/lib/QuickTransfer/utils.js +50 -29
- package/lib/ScrollLoad/index.js +17 -19
- package/lib/SearchBar/index.js +2 -5
- package/lib/SiderMenu/index.js +2 -4
- package/lib/SimpleCard/index.js +5 -12
- package/lib/SimplePagination/index.js +6 -8
- package/lib/SingleSpa/index.js +2 -2
- package/lib/Tag/CheckableTag.js +8 -10
- package/lib/Tag/index.js +0 -1
- package/lib/TimeRangeSlider/index.js +0 -3
- package/lib/TimeZoneSelect/index.js +2 -2
- package/lib/Tooltip/index.js +9 -6
- package/lib/TooltipText/index.js +2 -4
- package/lib/UniversalLayout/index.js +5 -7
- package/lib/WangEditor/index.js +10 -11
- package/lib/useChartTheme/index.js +3 -2
- package/package.json +3 -2
package/lib/CWTree/index.js
CHANGED
|
@@ -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 = ["
|
|
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 {
|
|
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
|
|
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
|
-
|
|
39
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
108
|
+
var selfOnSelect = useCallback(function (keys, e) {
|
|
95
109
|
if (onSelect) {
|
|
96
|
-
onSelect(
|
|
110
|
+
onSelect(keys, e);
|
|
97
111
|
}
|
|
98
112
|
if (selectedKeys === undefined) {
|
|
99
|
-
setSelfSelectedKeys(
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
var _treeData = useMemo(function () {
|
|
103
|
-
if (!treeData) {
|
|
104
|
-
return [];
|
|
113
|
+
setSelfSelectedKeys(keys);
|
|
105
114
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
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:
|
|
118
|
-
title:
|
|
119
|
-
},
|
|
135
|
+
key: key,
|
|
136
|
+
title: title
|
|
137
|
+
}, restProps), buildMenu(children));
|
|
120
138
|
} else {
|
|
121
139
|
return /*#__PURE__*/React.createElement(_Menu.Item, _extends({
|
|
122
|
-
key:
|
|
123
|
-
},
|
|
140
|
+
key: key
|
|
141
|
+
}, restProps), title);
|
|
124
142
|
}
|
|
125
143
|
});
|
|
126
144
|
}, []);
|
|
127
|
-
var
|
|
128
|
-
// 创建扩展菜单
|
|
145
|
+
var createMenu = useCallback(function (treeTitle, treeKey, props) {
|
|
146
|
+
// 创建扩展菜单
|
|
129
147
|
var data = menuData(treeTitle, treeKey, props);
|
|
130
|
-
if (data
|
|
148
|
+
if (Array.isArray(data)) {
|
|
131
149
|
return /*#__PURE__*/React.createElement(_Menu, {
|
|
132
|
-
style:
|
|
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
|
-
|
|
144
|
-
|
|
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
|
|
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:
|
|
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
|
-
},
|
|
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":
|
|
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 :
|
|
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,
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
289
|
+
var handleMouseEnter = useCallback(function (e) {
|
|
268
290
|
if (rest.onMouseEnter) {
|
|
269
291
|
rest.onMouseEnter(e);
|
|
270
292
|
}
|
|
271
293
|
// 显示扩展部分
|
|
272
|
-
|
|
273
|
-
|
|
294
|
+
var nodeKey = e.node.key;
|
|
295
|
+
if (nodeKey !== showExtendKey) {
|
|
296
|
+
setShowExtendKey(nodeKey);
|
|
274
297
|
}
|
|
275
|
-
|
|
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);
|
|
301
|
+
rest.onMouseLeave(e);
|
|
280
302
|
}
|
|
281
|
-
|
|
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:
|
|
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:
|
|
297
|
-
draggable:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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
|
|
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
|
-
*
|
|
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
|
-
|
|
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:
|
|
55
|
-
|
|
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": {
|