hc-busin-components 1.0.4 → 1.0.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.
- package/dist/Actions/index.js +46 -87
- package/dist/Actions/index.less +33 -0
- package/dist/DeleteConfirm/index.js +4 -3
- package/dist/DeleteConfirm/index.less +8 -0
- package/dist/PageHeader/index.less +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/utils/storage/index.d.ts +11 -0
- package/dist/utils/storage/index.js +67 -0
- package/dist/utils/tree/index.d.ts +59 -0
- package/dist/utils/tree/index.js +375 -0
- package/package.json +1 -1
package/dist/Actions/index.js
CHANGED
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
var _excluded = ["disabled", "children", "onClick", "style"],
|
|
2
|
-
_excluded2 = ["onClick", "disabled", "children"]
|
|
3
|
-
_excluded3 = ["onClick", "disabled", "style", "children"],
|
|
4
|
-
_excluded4 = ["onClick", "disabled", "children"];
|
|
5
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
-
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."); }
|
|
7
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
9
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
2
|
+
_excluded2 = ["onClick", "disabled", "children"];
|
|
11
3
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
12
4
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
13
5
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
14
6
|
import { MoreOutlined } from '@ant-design/icons';
|
|
15
7
|
import { Divider, Dropdown, Space } from 'antd';
|
|
16
|
-
import React
|
|
8
|
+
import React from 'react';
|
|
17
9
|
import "./index.less";
|
|
18
10
|
var LinkButton = function LinkButton(_ref) {
|
|
19
11
|
var _ref$disabled = _ref.disabled,
|
|
@@ -28,29 +20,38 @@ var LinkButton = function LinkButton(_ref) {
|
|
|
28
20
|
onClick: disabled ? undefined : onClick
|
|
29
21
|
}, args), linkChildren);
|
|
30
22
|
};
|
|
23
|
+
var isLinkButtonElement = function isLinkButtonElement(item) {
|
|
24
|
+
return /*#__PURE__*/React.isValidElement(item) && item.type === LinkButton;
|
|
25
|
+
};
|
|
26
|
+
var normalizeChildren = function normalizeChildren(children) {
|
|
27
|
+
return React.Children.toArray(children).filter(React.isValidElement);
|
|
28
|
+
};
|
|
29
|
+
var renderInlineAction = function renderInlineAction(item, index) {
|
|
30
|
+
var _item$key2;
|
|
31
|
+
if (isLinkButtonElement(item)) {
|
|
32
|
+
var _item$key;
|
|
33
|
+
var _item$props = item.props,
|
|
34
|
+
onClick = _item$props.onClick,
|
|
35
|
+
_item$props$disabled = _item$props.disabled,
|
|
36
|
+
disabled = _item$props$disabled === void 0 ? false : _item$props$disabled,
|
|
37
|
+
linkChildren = _item$props.children,
|
|
38
|
+
rest = _objectWithoutProperties(_item$props, _excluded2);
|
|
39
|
+
return /*#__PURE__*/React.createElement(LinkButton, _extends({
|
|
40
|
+
key: (_item$key = item.key) !== null && _item$key !== void 0 ? _item$key : index,
|
|
41
|
+
onClick: onClick,
|
|
42
|
+
disabled: disabled
|
|
43
|
+
}, rest), linkChildren);
|
|
44
|
+
}
|
|
45
|
+
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
46
|
+
key: (_item$key2 = item.key) !== null && _item$key2 !== void 0 ? _item$key2 : index
|
|
47
|
+
}, item);
|
|
48
|
+
};
|
|
31
49
|
var Actions = function Actions(_ref2) {
|
|
32
50
|
var children = _ref2.children,
|
|
33
51
|
_ref2$threshold = _ref2.threshold,
|
|
34
52
|
threshold = _ref2$threshold === void 0 ? 3 : _ref2$threshold;
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
list = _useState2[0],
|
|
38
|
-
setList = _useState2[1];
|
|
39
|
-
useEffect(function () {
|
|
40
|
-
if (!children) {
|
|
41
|
-
setList([]);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (Array.isArray(children)) {
|
|
45
|
-
var lt = children.filter(function (item) {
|
|
46
|
-
return item !== null && typeof item !== 'boolean' && /*#__PURE__*/React.isValidElement(item);
|
|
47
|
-
});
|
|
48
|
-
setList(lt);
|
|
49
|
-
} else if ( /*#__PURE__*/React.isValidElement(children) && children.props.children) {
|
|
50
|
-
setList([children]);
|
|
51
|
-
} else {
|
|
52
|
-
setList([]);
|
|
53
|
-
}
|
|
53
|
+
var list = React.useMemo(function () {
|
|
54
|
+
return normalizeChildren(children);
|
|
54
55
|
}, [children]);
|
|
55
56
|
if (list.length <= threshold) {
|
|
56
57
|
return /*#__PURE__*/React.createElement(Space, {
|
|
@@ -61,51 +62,10 @@ var Actions = function Actions(_ref2) {
|
|
|
61
62
|
split: /*#__PURE__*/React.createElement(Divider, {
|
|
62
63
|
type: "vertical"
|
|
63
64
|
})
|
|
64
|
-
}, list.map(
|
|
65
|
-
var _item$props = item.props,
|
|
66
|
-
onClick = _item$props.onClick,
|
|
67
|
-
_item$props$disabled = _item$props.disabled,
|
|
68
|
-
disabled = _item$props$disabled === void 0 ? false : _item$props$disabled,
|
|
69
|
-
linkChildren = _item$props.children,
|
|
70
|
-
rest = _objectWithoutProperties(_item$props, _excluded2);
|
|
71
|
-
return /*#__PURE__*/React.createElement(LinkButton, _extends({
|
|
72
|
-
key: index,
|
|
73
|
-
onClick: onClick,
|
|
74
|
-
disabled: disabled
|
|
75
|
-
}, rest), linkChildren);
|
|
76
|
-
}));
|
|
65
|
+
}, list.map(renderInlineAction));
|
|
77
66
|
}
|
|
78
67
|
var l1 = list.slice(0, threshold);
|
|
79
68
|
var l2 = list.slice(threshold);
|
|
80
|
-
var items = l2.map(function (item, index) {
|
|
81
|
-
var _item$props2 = item.props,
|
|
82
|
-
onClick = _item$props2.onClick,
|
|
83
|
-
_item$props2$disabled = _item$props2.disabled,
|
|
84
|
-
disabled = _item$props2$disabled === void 0 ? false : _item$props2$disabled,
|
|
85
|
-
style = _item$props2.style,
|
|
86
|
-
labelChildren = _item$props2.children,
|
|
87
|
-
rest = _objectWithoutProperties(_item$props2, _excluded3);
|
|
88
|
-
void onClick;
|
|
89
|
-
return {
|
|
90
|
-
key: String(index),
|
|
91
|
-
disabled: disabled,
|
|
92
|
-
label: /*#__PURE__*/React.createElement("span", _extends({
|
|
93
|
-
className: disabled ? 'displayed-name' : '',
|
|
94
|
-
style: style
|
|
95
|
-
}, rest), labelChildren)
|
|
96
|
-
};
|
|
97
|
-
});
|
|
98
|
-
var onMenuClick = function onMenuClick(_ref3) {
|
|
99
|
-
var key = _ref3.key,
|
|
100
|
-
domEvent = _ref3.domEvent;
|
|
101
|
-
domEvent === null || domEvent === void 0 || domEvent.stopPropagation();
|
|
102
|
-
var idx = Number(key);
|
|
103
|
-
var item = l2[idx];
|
|
104
|
-
if (item && !item.props.disabled) {
|
|
105
|
-
var _item$props$onClick, _item$props3;
|
|
106
|
-
(_item$props$onClick = (_item$props3 = item.props).onClick) === null || _item$props$onClick === void 0 || _item$props$onClick.call(_item$props3);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
69
|
return /*#__PURE__*/React.createElement(Space, {
|
|
110
70
|
align: "center",
|
|
111
71
|
style: {
|
|
@@ -114,23 +74,22 @@ var Actions = function Actions(_ref2) {
|
|
|
114
74
|
split: /*#__PURE__*/React.createElement(Divider, {
|
|
115
75
|
type: "vertical"
|
|
116
76
|
})
|
|
117
|
-
}, l1.map(
|
|
118
|
-
var _item$props4 = item.props,
|
|
119
|
-
onClick = _item$props4.onClick,
|
|
120
|
-
_item$props4$disabled = _item$props4.disabled,
|
|
121
|
-
disabled = _item$props4$disabled === void 0 ? false : _item$props4$disabled,
|
|
122
|
-
linkChildren = _item$props4.children,
|
|
123
|
-
rest = _objectWithoutProperties(_item$props4, _excluded4);
|
|
124
|
-
return /*#__PURE__*/React.createElement(LinkButton, _extends({
|
|
125
|
-
key: index,
|
|
126
|
-
onClick: onClick,
|
|
127
|
-
disabled: disabled
|
|
128
|
-
}, rest), linkChildren);
|
|
129
|
-
}), /*#__PURE__*/React.createElement(Dropdown, {
|
|
77
|
+
}, l1.map(renderInlineAction), /*#__PURE__*/React.createElement(Dropdown, {
|
|
130
78
|
trigger: ['click'],
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
79
|
+
overlayClassName: "actions-dropdown",
|
|
80
|
+
dropdownRender: function dropdownRender() {
|
|
81
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
82
|
+
className: "actions-dropdown-content",
|
|
83
|
+
onClick: function onClick(event) {
|
|
84
|
+
return event.stopPropagation();
|
|
85
|
+
}
|
|
86
|
+
}, l2.map(function (item, index) {
|
|
87
|
+
var _item$key3;
|
|
88
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
89
|
+
key: (_item$key3 = item.key) !== null && _item$key3 !== void 0 ? _item$key3 : index,
|
|
90
|
+
className: "actions-dropdown-item"
|
|
91
|
+
}, renderInlineAction(item, index));
|
|
92
|
+
}));
|
|
134
93
|
}
|
|
135
94
|
}, /*#__PURE__*/React.createElement(MoreOutlined, {
|
|
136
95
|
style: {
|
package/dist/Actions/index.less
CHANGED
|
@@ -7,3 +7,36 @@
|
|
|
7
7
|
color: var(--ant-color-text-disabled);
|
|
8
8
|
cursor: not-allowed;
|
|
9
9
|
}
|
|
10
|
+
|
|
11
|
+
.actions-dropdown-content {
|
|
12
|
+
display: inline-block;
|
|
13
|
+
width: fit-content;
|
|
14
|
+
min-width: unset;
|
|
15
|
+
max-width: max-content;
|
|
16
|
+
padding: 4px 0;
|
|
17
|
+
background: var(--ant-color-bg-elevated, #fff);
|
|
18
|
+
border-radius: var(--ant-border-radius-lg, 8px);
|
|
19
|
+
box-shadow: var(--ant-box-shadow-secondary, 0 6px 16px 0 rgb(0 0 0 / 8%));
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.actions-dropdown-item {
|
|
24
|
+
padding: 5px 12px;
|
|
25
|
+
white-space: nowrap;
|
|
26
|
+
line-height: 22px;
|
|
27
|
+
transition: background-color 0.2s;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.actions-dropdown-item:hover {
|
|
31
|
+
background: var(--ant-control-item-bg-hover, rgb(0 0 0 / 4%));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.actions-dropdown-item .name-link,
|
|
35
|
+
.actions-dropdown-item .displayed-name {
|
|
36
|
+
display: inline-block;
|
|
37
|
+
width: 100%;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.actions-dropdown .ant-dropdown-arrow::before {
|
|
41
|
+
background: var(--ant-color-bg-elevated, #fff);
|
|
42
|
+
}
|
|
@@ -47,6 +47,7 @@ var DeleteConfirm = function DeleteConfirm(props) {
|
|
|
47
47
|
var common = _objectSpread(_objectSpread({}, deleteConfirmLocaleZhCN.common), antdLocale === null || antdLocale === void 0 ? void 0 : antdLocale.common);
|
|
48
48
|
var deleteLabel = deleteText !== null && deleteText !== void 0 ? deleteText : common.delete;
|
|
49
49
|
var cancelLabel = common.cancel;
|
|
50
|
+
var triggerClassName = [type === 'link' ? 'hc-delete-link-btn' : '', isIcon && isDelete ? 'hc-delete-icon-btn' : '', className].filter(Boolean).join(' ');
|
|
50
51
|
if (disabled) {
|
|
51
52
|
return /*#__PURE__*/React.createElement(Popover, {
|
|
52
53
|
placement: placement,
|
|
@@ -58,7 +59,7 @@ var DeleteConfirm = function DeleteConfirm(props) {
|
|
|
58
59
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
59
60
|
type: type,
|
|
60
61
|
danger: danger,
|
|
61
|
-
className:
|
|
62
|
+
className: triggerClassName,
|
|
62
63
|
disabled: true
|
|
63
64
|
}, deleteLabel));
|
|
64
65
|
}
|
|
@@ -93,7 +94,7 @@ var DeleteConfirm = function DeleteConfirm(props) {
|
|
|
93
94
|
danger: danger,
|
|
94
95
|
size: size,
|
|
95
96
|
ghost: ghost,
|
|
96
|
-
className:
|
|
97
|
+
className: triggerClassName,
|
|
97
98
|
icon: /*#__PURE__*/React.createElement(Icon, {
|
|
98
99
|
name: "v35_TrashCan"
|
|
99
100
|
})
|
|
@@ -102,7 +103,7 @@ var DeleteConfirm = function DeleteConfirm(props) {
|
|
|
102
103
|
danger: danger,
|
|
103
104
|
size: size,
|
|
104
105
|
ghost: ghost,
|
|
105
|
-
className:
|
|
106
|
+
className: triggerClassName
|
|
106
107
|
}, deleteLabel));
|
|
107
108
|
};
|
|
108
109
|
export { deleteConfirmLocaleZhCN } from "./locale";
|
package/dist/index.d.ts
CHANGED
|
@@ -54,5 +54,8 @@ export { default as CascaderCluster, cascaderClusterLocaleZhCN, CASCADER_CLUSTER
|
|
|
54
54
|
export type { CascaderClusterProps, CascaderClusterTexts, CascaderClusterFilterCache, CascaderClusterStorage, CascaderClusterDataInterface, CascaderClusterServices, CascaderClusterRequest, } from './CascaderCluster';
|
|
55
55
|
export { default as LogicalResourceFilter, logicalResourceLocaleZhCN } from './LogicalResourceFilter';
|
|
56
56
|
export type { LogicalResourceFilterProps, LogicalResourceFilterTexts, LogicalResourceInitParams, LogicalResourceChangeValue, LogicalDatacenterItem, LogicalClusterItem, } from './LogicalResourceFilter';
|
|
57
|
+
export { default as storage } from './utils/storage/index';
|
|
58
|
+
export { default as tree } from './utils/tree/index';
|
|
59
|
+
export type { TreeNode } from './utils/tree/index';
|
|
57
60
|
import useTableParams from './CombinTable/hooks/useTableParams';
|
|
58
61
|
export { useTableParams };
|
package/dist/index.js
CHANGED
|
@@ -31,5 +31,7 @@ export { default as IconPopTips } from "./IconPopTips";
|
|
|
31
31
|
export { default as ComponentUninstalled, componentUninstalledLocaleZhCN } from "./ComponentUninstalled";
|
|
32
32
|
export { default as CascaderCluster, cascaderClusterLocaleZhCN, CASCADER_CLUSTER_API, createCascaderClusterServices, buildCascaderClusterDataInterface } from "./CascaderCluster";
|
|
33
33
|
export { default as LogicalResourceFilter, logicalResourceLocaleZhCN } from "./LogicalResourceFilter";
|
|
34
|
+
export { default as storage } from "./utils/storage/index";
|
|
35
|
+
export { default as tree } from "./utils/tree/index";
|
|
34
36
|
import useTableParams from "./CombinTable/hooks/useTableParams";
|
|
35
37
|
export { useTableParams };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
getLocal: (key: string) => any;
|
|
3
|
+
setLocal: (key: string, value: any) => void;
|
|
4
|
+
removeLocal: (key: string, isClear?: boolean) => void;
|
|
5
|
+
clearLocal: () => void;
|
|
6
|
+
getSession: (key: string, returnStr?: boolean | undefined) => any;
|
|
7
|
+
setSession: (key: string, value: any) => void;
|
|
8
|
+
removeSession: (key: string, isClear?: boolean) => void;
|
|
9
|
+
clearSession: () => void;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
var getLocal = function getLocal(key) {
|
|
3
|
+
var value = window.localStorage.getItem(key) || '';
|
|
4
|
+
try {
|
|
5
|
+
return JSON.parse(value);
|
|
6
|
+
} catch (error) {
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var setLocal = function setLocal(key, value) {
|
|
11
|
+
if (_typeof(value) === 'object' || Array.isArray(value)) {
|
|
12
|
+
window.localStorage.setItem(key, JSON.stringify(value));
|
|
13
|
+
} else {
|
|
14
|
+
window.localStorage.setItem(key, value);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var removeLocal = function removeLocal(key) {
|
|
18
|
+
var isClear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
19
|
+
if (isClear) {
|
|
20
|
+
window.localStorage.clear();
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
window.localStorage.removeItem(key);
|
|
24
|
+
};
|
|
25
|
+
var clearLocal = function clearLocal() {
|
|
26
|
+
window.localStorage.clear();
|
|
27
|
+
};
|
|
28
|
+
var getSession = function getSession(key, returnStr) {
|
|
29
|
+
var value = window.sessionStorage.getItem(key) || '';
|
|
30
|
+
if (returnStr) {
|
|
31
|
+
// 大数字存取 parse 丢失精度,如组织id
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(value);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var setSession = function setSession(key, value) {
|
|
41
|
+
if (_typeof(value) === 'object' || Array.isArray(value)) {
|
|
42
|
+
window.sessionStorage.setItem(key, JSON.stringify(value));
|
|
43
|
+
} else {
|
|
44
|
+
window.sessionStorage.setItem(key, value);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var removeSession = function removeSession(key) {
|
|
48
|
+
var isClear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
49
|
+
if (isClear) {
|
|
50
|
+
window.sessionStorage.clear();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
window.sessionStorage.removeItem(key);
|
|
54
|
+
};
|
|
55
|
+
var clearSession = function clearSession() {
|
|
56
|
+
window.sessionStorage.clear();
|
|
57
|
+
};
|
|
58
|
+
export default {
|
|
59
|
+
getLocal: getLocal,
|
|
60
|
+
setLocal: setLocal,
|
|
61
|
+
removeLocal: removeLocal,
|
|
62
|
+
clearLocal: clearLocal,
|
|
63
|
+
getSession: getSession,
|
|
64
|
+
setSession: setSession,
|
|
65
|
+
removeSession: removeSession,
|
|
66
|
+
clearSession: clearSession
|
|
67
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 树节点的基础类型定义
|
|
3
|
+
*/
|
|
4
|
+
export interface TreeNode<T = any> {
|
|
5
|
+
id?: string | number;
|
|
6
|
+
children?: TreeNode<T>[];
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
export declare const isLeaf: <T = any>(node: TreeNode<T>) => boolean;
|
|
10
|
+
export declare const hasChildren: <T = any>(node: TreeNode<T>) => boolean;
|
|
11
|
+
export declare const getFirstLeaf: <T = any>(node: TreeNode<T>) => TreeNode<T> | null;
|
|
12
|
+
export declare const getAllLeaves: <T = any>(tree: TreeNode<T> | TreeNode<T>[]) => TreeNode<T>[];
|
|
13
|
+
export declare function getKeyAllValues<T = any>(tree: TreeNode<T>[], key?: string): any[];
|
|
14
|
+
export declare function findNodeInTree<T = any>(tree: TreeNode<T>[], key: string | undefined, value: any): TreeNode<T> | null;
|
|
15
|
+
export declare const getNodeInTree: typeof findNodeInTree;
|
|
16
|
+
export declare const findAllNodes: <T = any>(tree: TreeNode<T> | TreeNode<T>[], predicate: (node: TreeNode<T>) => boolean) => TreeNode<T>[];
|
|
17
|
+
export declare const findParentNode: <T = any>(tree: TreeNode<T>[], predicate: string | number | ((node: TreeNode<T>) => boolean)) => TreeNode<T> | null;
|
|
18
|
+
export declare const getNodePath: <T = any>(tree: TreeNode<T>[], predicate: string | number | ((node: TreeNode<T>) => boolean)) => TreeNode<T>[];
|
|
19
|
+
export declare function flattenTree<T = any>(tree: TreeNode<T> | TreeNode<T>[], includeChildren?: boolean): TreeNode<T>[];
|
|
20
|
+
export declare const arrayToTree: <T = any>(list: any[], options?: {
|
|
21
|
+
idKey?: string | undefined;
|
|
22
|
+
parentIdKey?: string | undefined;
|
|
23
|
+
childrenKey?: string | undefined;
|
|
24
|
+
rootParentId?: any;
|
|
25
|
+
}) => TreeNode<T>[];
|
|
26
|
+
export declare const filterTree: <T = any>(tree: TreeNode<T> | TreeNode<T>[], predicate: (node: TreeNode<T>) => boolean) => TreeNode<T>[];
|
|
27
|
+
export declare const mapTree: <T = any, R = any>(tree: TreeNode<T> | TreeNode<T>[], mapper: (node: TreeNode<T>, parent?: TreeNode<R> | undefined) => TreeNode<R>) => TreeNode<R>[];
|
|
28
|
+
export declare const traverseTree: <T = any>(tree: TreeNode<T> | TreeNode<T>[], callback: (node: TreeNode<T>, parent?: TreeNode<T> | undefined) => void | boolean, parent?: TreeNode<T> | undefined) => void;
|
|
29
|
+
export declare const traverseTreePostorder: <T = any>(tree: TreeNode<T> | TreeNode<T>[], callback: (node: TreeNode<T>, parent?: TreeNode<T> | undefined) => void) => void;
|
|
30
|
+
export declare const getTreeDepth: <T = any>(tree: TreeNode<T> | TreeNode<T>[]) => number;
|
|
31
|
+
export declare const cloneTree: <T = any>(tree: TreeNode<T> | TreeNode<T>[]) => TreeNode<T> | TreeNode<T>[];
|
|
32
|
+
export declare const sortTree: <T = any>(tree: TreeNode<T> | TreeNode<T>[], compareFn: (a: TreeNode<T>, b: TreeNode<T>) => number, recursive?: boolean) => TreeNode<T>[];
|
|
33
|
+
declare const tree: {
|
|
34
|
+
arrayToTree: <T = any>(list: any[], options?: {
|
|
35
|
+
idKey?: string | undefined;
|
|
36
|
+
parentIdKey?: string | undefined;
|
|
37
|
+
childrenKey?: string | undefined;
|
|
38
|
+
rootParentId?: any;
|
|
39
|
+
}) => TreeNode<T>[];
|
|
40
|
+
cloneTree: <T_1 = any>(tree: TreeNode<T_1> | TreeNode<T_1>[]) => TreeNode<T_1> | TreeNode<T_1>[];
|
|
41
|
+
filterTree: <T_2 = any>(tree: TreeNode<T_2> | TreeNode<T_2>[], predicate: (node: TreeNode<T_2>) => boolean) => TreeNode<T_2>[];
|
|
42
|
+
findAllNodes: <T_3 = any>(tree: TreeNode<T_3> | TreeNode<T_3>[], predicate: (node: TreeNode<T_3>) => boolean) => TreeNode<T_3>[];
|
|
43
|
+
findNodeInTree: typeof findNodeInTree;
|
|
44
|
+
findParentNode: <T_4 = any>(tree: TreeNode<T_4>[], predicate: string | number | ((node: TreeNode<T_4>) => boolean)) => TreeNode<T_4> | null;
|
|
45
|
+
flattenTree: typeof flattenTree;
|
|
46
|
+
getAllLeaves: <T_5 = any>(tree: TreeNode<T_5> | TreeNode<T_5>[]) => TreeNode<T_5>[];
|
|
47
|
+
getFirstLeaf: <T_6 = any>(node: TreeNode<T_6>) => TreeNode<T_6> | null;
|
|
48
|
+
getKeyAllValues: typeof getKeyAllValues;
|
|
49
|
+
getNodeInTree: typeof findNodeInTree;
|
|
50
|
+
getNodePath: <T_7 = any>(tree: TreeNode<T_7>[], predicate: string | number | ((node: TreeNode<T_7>) => boolean)) => TreeNode<T_7>[];
|
|
51
|
+
getTreeDepth: <T_8 = any>(tree: TreeNode<T_8> | TreeNode<T_8>[]) => number;
|
|
52
|
+
hasChildren: <T_9 = any>(node: TreeNode<T_9>) => boolean;
|
|
53
|
+
isLeaf: <T_10 = any>(node: TreeNode<T_10>) => boolean;
|
|
54
|
+
mapTree: <T_11 = any, R = any>(tree: TreeNode<T_11> | TreeNode<T_11>[], mapper: (node: TreeNode<T_11>, parent?: TreeNode<R> | undefined) => TreeNode<R>) => TreeNode<R>[];
|
|
55
|
+
sortTree: <T_12 = any>(tree: TreeNode<T_12> | TreeNode<T_12>[], compareFn: (a: TreeNode<T_12>, b: TreeNode<T_12>) => number, recursive?: boolean) => TreeNode<T_12>[];
|
|
56
|
+
traverseTree: <T_13 = any>(tree: TreeNode<T_13> | TreeNode<T_13>[], callback: (node: TreeNode<T_13>, parent?: TreeNode<T_13> | undefined) => void | boolean, parent?: TreeNode<T_13> | undefined) => void;
|
|
57
|
+
traverseTreePostorder: <T_14 = any>(tree: TreeNode<T_14> | TreeNode<T_14>[], callback: (node: TreeNode<T_14>, parent?: TreeNode<T_14> | undefined) => void) => void;
|
|
58
|
+
};
|
|
59
|
+
export default tree;
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
3
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
5
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
10
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
11
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
/**
|
|
15
|
+
* 树节点的基础类型定义
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export var isLeaf = function isLeaf(node) {
|
|
19
|
+
return !node.children || node.children.length === 0;
|
|
20
|
+
};
|
|
21
|
+
export var hasChildren = function hasChildren(node) {
|
|
22
|
+
return !isLeaf(node);
|
|
23
|
+
};
|
|
24
|
+
export var getFirstLeaf = function getFirstLeaf(node) {
|
|
25
|
+
if (!node) return null;
|
|
26
|
+
if (isLeaf(node)) {
|
|
27
|
+
return node;
|
|
28
|
+
}
|
|
29
|
+
return getFirstLeaf(node.children[0]);
|
|
30
|
+
};
|
|
31
|
+
export var getAllLeaves = function getAllLeaves(tree) {
|
|
32
|
+
var leaves = [];
|
|
33
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
34
|
+
var traverse = function traverse(node) {
|
|
35
|
+
if (isLeaf(node)) {
|
|
36
|
+
leaves.push(node);
|
|
37
|
+
} else if (node.children) {
|
|
38
|
+
node.children.forEach(function (child) {
|
|
39
|
+
return traverse(child);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
nodes.forEach(function (node) {
|
|
44
|
+
return traverse(node);
|
|
45
|
+
});
|
|
46
|
+
return leaves;
|
|
47
|
+
};
|
|
48
|
+
export function getKeyAllValues(tree) {
|
|
49
|
+
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id';
|
|
50
|
+
var result = [];
|
|
51
|
+
var collect = function collect(nodes) {
|
|
52
|
+
var _iterator = _createForOfIteratorHelper(nodes),
|
|
53
|
+
_step;
|
|
54
|
+
try {
|
|
55
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
56
|
+
var item = _step.value;
|
|
57
|
+
result.push(item[key]);
|
|
58
|
+
if (item.children && item.children.length > 0) {
|
|
59
|
+
collect(item.children);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} catch (err) {
|
|
63
|
+
_iterator.e(err);
|
|
64
|
+
} finally {
|
|
65
|
+
_iterator.f();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
collect(tree);
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
export function findNodeInTree(tree) {
|
|
72
|
+
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id';
|
|
73
|
+
var value = arguments.length > 2 ? arguments[2] : undefined;
|
|
74
|
+
var _iterator2 = _createForOfIteratorHelper(tree),
|
|
75
|
+
_step2;
|
|
76
|
+
try {
|
|
77
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
78
|
+
var item = _step2.value;
|
|
79
|
+
if (item[key] === value) {
|
|
80
|
+
return item;
|
|
81
|
+
}
|
|
82
|
+
if (item.children && item.children.length > 0) {
|
|
83
|
+
var result = findNodeInTree(item.children, key, value);
|
|
84
|
+
if (result) {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} catch (err) {
|
|
90
|
+
_iterator2.e(err);
|
|
91
|
+
} finally {
|
|
92
|
+
_iterator2.f();
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
export var getNodeInTree = findNodeInTree;
|
|
97
|
+
export var findAllNodes = function findAllNodes(tree, predicate) {
|
|
98
|
+
var result = [];
|
|
99
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
100
|
+
var traverse = function traverse(node) {
|
|
101
|
+
if (predicate(node)) {
|
|
102
|
+
result.push(node);
|
|
103
|
+
}
|
|
104
|
+
if (node.children) {
|
|
105
|
+
node.children.forEach(function (child) {
|
|
106
|
+
return traverse(child);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
nodes.forEach(function (node) {
|
|
111
|
+
return traverse(node);
|
|
112
|
+
});
|
|
113
|
+
return result;
|
|
114
|
+
};
|
|
115
|
+
export var findParentNode = function findParentNode(tree, predicate) {
|
|
116
|
+
var matchFn = typeof predicate === 'function' ? predicate : function (node) {
|
|
117
|
+
return node.id === predicate;
|
|
118
|
+
};
|
|
119
|
+
var traverse = function traverse(nodes) {
|
|
120
|
+
var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
121
|
+
var _iterator3 = _createForOfIteratorHelper(nodes),
|
|
122
|
+
_step3;
|
|
123
|
+
try {
|
|
124
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
125
|
+
var _node = _step3.value;
|
|
126
|
+
if (matchFn(_node)) {
|
|
127
|
+
return parent;
|
|
128
|
+
}
|
|
129
|
+
if (_node.children && _node.children.length > 0) {
|
|
130
|
+
var result = traverse(_node.children, _node);
|
|
131
|
+
if (result !== null) {
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} catch (err) {
|
|
137
|
+
_iterator3.e(err);
|
|
138
|
+
} finally {
|
|
139
|
+
_iterator3.f();
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
};
|
|
143
|
+
return traverse(tree);
|
|
144
|
+
};
|
|
145
|
+
export var getNodePath = function getNodePath(tree, predicate) {
|
|
146
|
+
var matchFn = typeof predicate === 'function' ? predicate : function (node) {
|
|
147
|
+
return node.id === predicate;
|
|
148
|
+
};
|
|
149
|
+
var path = [];
|
|
150
|
+
var traverse = function traverse(nodes) {
|
|
151
|
+
var _iterator4 = _createForOfIteratorHelper(nodes),
|
|
152
|
+
_step4;
|
|
153
|
+
try {
|
|
154
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
155
|
+
var _node2 = _step4.value;
|
|
156
|
+
path.push(_node2);
|
|
157
|
+
if (matchFn(_node2)) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
if (_node2.children && _node2.children.length > 0) {
|
|
161
|
+
if (traverse(_node2.children)) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
path.pop();
|
|
166
|
+
}
|
|
167
|
+
} catch (err) {
|
|
168
|
+
_iterator4.e(err);
|
|
169
|
+
} finally {
|
|
170
|
+
_iterator4.f();
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
};
|
|
174
|
+
traverse(tree);
|
|
175
|
+
return path;
|
|
176
|
+
};
|
|
177
|
+
export function flattenTree(tree) {
|
|
178
|
+
var includeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
179
|
+
var result = [];
|
|
180
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
181
|
+
var traverse = function traverse(nodes) {
|
|
182
|
+
var _iterator5 = _createForOfIteratorHelper(nodes),
|
|
183
|
+
_step5;
|
|
184
|
+
try {
|
|
185
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
186
|
+
var item = _step5.value;
|
|
187
|
+
if (includeChildren) {
|
|
188
|
+
result.push(item);
|
|
189
|
+
} else {
|
|
190
|
+
var rest = _objectSpread({}, item);
|
|
191
|
+
delete rest.children;
|
|
192
|
+
result.push(rest);
|
|
193
|
+
}
|
|
194
|
+
if (item.children && item.children.length > 0) {
|
|
195
|
+
traverse(item.children);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
} catch (err) {
|
|
199
|
+
_iterator5.e(err);
|
|
200
|
+
} finally {
|
|
201
|
+
_iterator5.f();
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
traverse(nodes);
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
export var arrayToTree = function arrayToTree(list) {
|
|
208
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
209
|
+
var _options$idKey = options.idKey,
|
|
210
|
+
idKey = _options$idKey === void 0 ? 'id' : _options$idKey,
|
|
211
|
+
_options$parentIdKey = options.parentIdKey,
|
|
212
|
+
parentIdKey = _options$parentIdKey === void 0 ? 'parentId' : _options$parentIdKey,
|
|
213
|
+
_options$childrenKey = options.childrenKey,
|
|
214
|
+
childrenKey = _options$childrenKey === void 0 ? 'children' : _options$childrenKey,
|
|
215
|
+
_options$rootParentId = options.rootParentId,
|
|
216
|
+
rootParentId = _options$rootParentId === void 0 ? null : _options$rootParentId;
|
|
217
|
+
var tree = [];
|
|
218
|
+
var map = new Map();
|
|
219
|
+
list.forEach(function (item) {
|
|
220
|
+
map.set(item[idKey], _objectSpread(_objectSpread({}, item), {}, _defineProperty({}, childrenKey, [])));
|
|
221
|
+
});
|
|
222
|
+
list.forEach(function (item) {
|
|
223
|
+
var node = map.get(item[idKey]);
|
|
224
|
+
var parentId = item[parentIdKey];
|
|
225
|
+
if (parentId === rootParentId || parentId === undefined) {
|
|
226
|
+
tree.push(node);
|
|
227
|
+
} else {
|
|
228
|
+
var _parent = map.get(parentId);
|
|
229
|
+
if (_parent) {
|
|
230
|
+
_parent[childrenKey].push(node);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
return tree;
|
|
235
|
+
};
|
|
236
|
+
export var filterTree = function filterTree(tree, predicate) {
|
|
237
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
238
|
+
var filter = function filter(nodes) {
|
|
239
|
+
return nodes.reduce(function (acc, node) {
|
|
240
|
+
var newNode = _objectSpread({}, node);
|
|
241
|
+
if (node.children) {
|
|
242
|
+
newNode.children = filter(node.children);
|
|
243
|
+
}
|
|
244
|
+
if (predicate(node) || newNode.children && newNode.children.length > 0) {
|
|
245
|
+
acc.push(newNode);
|
|
246
|
+
}
|
|
247
|
+
return acc;
|
|
248
|
+
}, []);
|
|
249
|
+
};
|
|
250
|
+
return filter(nodes);
|
|
251
|
+
};
|
|
252
|
+
export var mapTree = function mapTree(tree, mapper) {
|
|
253
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
254
|
+
var map = function map(nodes, parent) {
|
|
255
|
+
return nodes.map(function (node) {
|
|
256
|
+
var newNode = mapper(node, parent);
|
|
257
|
+
if (node.children && node.children.length > 0) {
|
|
258
|
+
newNode.children = map(node.children, newNode);
|
|
259
|
+
}
|
|
260
|
+
return newNode;
|
|
261
|
+
});
|
|
262
|
+
};
|
|
263
|
+
return map(nodes);
|
|
264
|
+
};
|
|
265
|
+
export var traverseTree = function traverseTree(tree, callback, parent) {
|
|
266
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
267
|
+
var _iterator6 = _createForOfIteratorHelper(nodes),
|
|
268
|
+
_step6;
|
|
269
|
+
try {
|
|
270
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
271
|
+
var _node3 = _step6.value;
|
|
272
|
+
var result = callback(_node3, parent);
|
|
273
|
+
if (result === false) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (_node3.children && _node3.children.length > 0) {
|
|
277
|
+
traverseTree(_node3.children, callback, _node3);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
} catch (err) {
|
|
281
|
+
_iterator6.e(err);
|
|
282
|
+
} finally {
|
|
283
|
+
_iterator6.f();
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
export var traverseTreePostorder = function traverseTreePostorder(tree, callback) {
|
|
287
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
288
|
+
var traverse = function traverse(nodes, parent) {
|
|
289
|
+
var _iterator7 = _createForOfIteratorHelper(nodes),
|
|
290
|
+
_step7;
|
|
291
|
+
try {
|
|
292
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
293
|
+
var _node4 = _step7.value;
|
|
294
|
+
if (_node4.children && _node4.children.length > 0) {
|
|
295
|
+
traverse(_node4.children, _node4);
|
|
296
|
+
}
|
|
297
|
+
callback(_node4, parent);
|
|
298
|
+
}
|
|
299
|
+
} catch (err) {
|
|
300
|
+
_iterator7.e(err);
|
|
301
|
+
} finally {
|
|
302
|
+
_iterator7.f();
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
traverse(nodes);
|
|
306
|
+
};
|
|
307
|
+
export var getTreeDepth = function getTreeDepth(tree) {
|
|
308
|
+
var nodes = Array.isArray(tree) ? tree : [tree];
|
|
309
|
+
if (nodes.length === 0) return 0;
|
|
310
|
+
var getDepth = function getDepth(node) {
|
|
311
|
+
if (isLeaf(node)) {
|
|
312
|
+
return 1;
|
|
313
|
+
}
|
|
314
|
+
return 1 + Math.max.apply(Math, _toConsumableArray(node.children.map(function (child) {
|
|
315
|
+
return getDepth(child);
|
|
316
|
+
})));
|
|
317
|
+
};
|
|
318
|
+
return Math.max.apply(Math, _toConsumableArray(nodes.map(function (node) {
|
|
319
|
+
return getDepth(node);
|
|
320
|
+
})));
|
|
321
|
+
};
|
|
322
|
+
export var cloneTree = function cloneTree(tree) {
|
|
323
|
+
var nodes = Array.isArray(tree) ? tree : tree;
|
|
324
|
+
var isArray = Array.isArray(tree);
|
|
325
|
+
var clone = function clone(node) {
|
|
326
|
+
var newNode = _objectSpread({}, node);
|
|
327
|
+
if (node.children && node.children.length > 0) {
|
|
328
|
+
newNode.children = node.children.map(function (child) {
|
|
329
|
+
return clone(child);
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return newNode;
|
|
333
|
+
};
|
|
334
|
+
if (isArray) {
|
|
335
|
+
return nodes.map(function (node) {
|
|
336
|
+
return clone(node);
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
return clone(nodes);
|
|
340
|
+
};
|
|
341
|
+
export var sortTree = function sortTree(tree, compareFn) {
|
|
342
|
+
var recursive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
343
|
+
var nodes = Array.isArray(tree) ? _toConsumableArray(tree) : [_objectSpread({}, tree)];
|
|
344
|
+
nodes.sort(compareFn);
|
|
345
|
+
if (recursive) {
|
|
346
|
+
nodes.forEach(function (node) {
|
|
347
|
+
if (node.children && node.children.length > 0) {
|
|
348
|
+
node.children = sortTree(node.children, compareFn, recursive);
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
return nodes;
|
|
353
|
+
};
|
|
354
|
+
var tree = {
|
|
355
|
+
arrayToTree: arrayToTree,
|
|
356
|
+
cloneTree: cloneTree,
|
|
357
|
+
filterTree: filterTree,
|
|
358
|
+
findAllNodes: findAllNodes,
|
|
359
|
+
findNodeInTree: findNodeInTree,
|
|
360
|
+
findParentNode: findParentNode,
|
|
361
|
+
flattenTree: flattenTree,
|
|
362
|
+
getAllLeaves: getAllLeaves,
|
|
363
|
+
getFirstLeaf: getFirstLeaf,
|
|
364
|
+
getKeyAllValues: getKeyAllValues,
|
|
365
|
+
getNodeInTree: getNodeInTree,
|
|
366
|
+
getNodePath: getNodePath,
|
|
367
|
+
getTreeDepth: getTreeDepth,
|
|
368
|
+
hasChildren: hasChildren,
|
|
369
|
+
isLeaf: isLeaf,
|
|
370
|
+
mapTree: mapTree,
|
|
371
|
+
sortTree: sortTree,
|
|
372
|
+
traverseTree: traverseTree,
|
|
373
|
+
traverseTreePostorder: traverseTreePostorder
|
|
374
|
+
};
|
|
375
|
+
export default tree;
|