fan-standard-comp 4.1.44 → 4.1.45
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/fan-standard-comp.min.js +1 -1
- package/es/RefactorTree/index.js +30 -3
- package/es/utils/getParentNodes.d.ts +24 -0
- package/es/utils/getParentNodes.js +78 -0
- package/lib/RefactorTree/index.js +28 -1
- package/lib/utils/getParentNodes.d.ts +24 -0
- package/lib/utils/getParentNodes.js +79 -1
- package/package.json +1 -1
package/es/RefactorTree/index.js
CHANGED
|
@@ -15,12 +15,12 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
15
15
|
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; } }
|
|
16
16
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
17
17
|
// 重构树控件,可直接配置数据
|
|
18
|
-
import React, { useMemo, useState, useCallback, useContext, useImperativeHandle, useRef } from 'react';
|
|
18
|
+
import React, { useMemo, useState, useCallback, useContext, useImperativeHandle, useRef, useEffect } from 'react';
|
|
19
19
|
import { Tree, Empty, Popconfirm, Input, Button } from 'antd';
|
|
20
20
|
import { SearchOutlined } from '@ant-design/icons';
|
|
21
21
|
import SpecIcon from "../SpecIcon/index";
|
|
22
22
|
import { transDataParam, resetDataWithLimit, resetDataWithDisabled, selectAllExcludingDisabled } from "./util";
|
|
23
|
-
import { filterTreeNodes } from "../utils/index";
|
|
23
|
+
import { filterTreeNodes, getLastLeafParentNodes } from "../utils/index";
|
|
24
24
|
var Search = Input.Search;
|
|
25
25
|
import { useLanguageObject } from "../hooks/use-language";
|
|
26
26
|
import useStyle from "./style";
|
|
@@ -120,6 +120,33 @@ var RefactorTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
120
120
|
var selectAllData = useMemo(function () {
|
|
121
121
|
return selectAllExcludingDisabled(transTreeData, optionName, false);
|
|
122
122
|
}, [transTreeData, optionName]);
|
|
123
|
+
// 动态更新配置expandedKeys
|
|
124
|
+
useEffect(function () {
|
|
125
|
+
if (searchReactorValue) {
|
|
126
|
+
var _getLastLeafParentNod = getLastLeafParentNodes(transTreeData, {
|
|
127
|
+
childrenParam: optionName['children'],
|
|
128
|
+
keyParam: optionName['value']
|
|
129
|
+
}),
|
|
130
|
+
leafParentKeys = _getLastLeafParentNod.leafParentKeys;
|
|
131
|
+
setRefactorExpandedKeys(leafParentKeys);
|
|
132
|
+
}
|
|
133
|
+
}, [transTreeData, searchReactorValue, optionName]);
|
|
134
|
+
|
|
135
|
+
// 动态扩展配置项:动态更新配置expandedKeys及autoExpandParent的节点,使得匹配到可默认展开对应的上层节点
|
|
136
|
+
var refactorDynamicProps = useMemo(function () {
|
|
137
|
+
if (searchReactorValue) {
|
|
138
|
+
return {
|
|
139
|
+
expandedKeys: refactorExpandedKeys,
|
|
140
|
+
// (leafParentKeys || []).concat(leafNodes.map(item => item[optionName['value']])),
|
|
141
|
+
autoExpandParent: true,
|
|
142
|
+
onExpand: function onExpand(keys) {
|
|
143
|
+
setRefactorExpandedKeys(keys);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
} else {
|
|
147
|
+
return {};
|
|
148
|
+
}
|
|
149
|
+
}, [searchReactorValue, refactorExpandedKeys]);
|
|
123
150
|
useImperativeHandle(ref, function () {
|
|
124
151
|
return {
|
|
125
152
|
selectAllData: selectAllData,
|
|
@@ -250,7 +277,7 @@ var RefactorTree = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
250
277
|
} else {
|
|
251
278
|
defExpand = rootKey ? [rootKey] : ['0'];
|
|
252
279
|
}
|
|
253
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tree, _extends({}, otherProps, {
|
|
280
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tree, _extends({}, otherProps, refactorDynamicProps, {
|
|
254
281
|
onSelect: function onSelect(keys, e) {
|
|
255
282
|
return handleToSelectTreeNode(keys, e);
|
|
256
283
|
},
|
|
@@ -107,3 +107,27 @@ export declare const filterTreeNodes: (list: any[], nodeKey: string | number, pa
|
|
|
107
107
|
* @param {Object} extra 扩展配置 {separator: '/'}
|
|
108
108
|
* */
|
|
109
109
|
export declare const addTreeLevels: (data: any, level: number | undefined, parentIndexPath: never[] | undefined, parentNamePath: never[] | undefined, optionName: any, extra: any) => any[];
|
|
110
|
+
/**
|
|
111
|
+
* @description 获取树数据中所有叶子节点的上层节点路径(用于antd树组件的expandedKeys配置)
|
|
112
|
+
* @params {Array} list 树数据集合
|
|
113
|
+
* @params {Object} params 指定当前数据中,子集合字段名及标识值字段名
|
|
114
|
+
* (childrenParam:指当前子集合数据字段名,keyParam: 指当前匹配标识值字段名)
|
|
115
|
+
* @params {Object} extra 额外配置
|
|
116
|
+
*
|
|
117
|
+
* @result {Array} leafParentKeys 所有叶子节点的上层节点key集合(去重后的数组)
|
|
118
|
+
* @result {Array} leafNodes 所有叶子节点本身
|
|
119
|
+
* @result {Array} leafNodesKeys 所有叶子节点的key集合
|
|
120
|
+
* @result {Array} leafParentPaths 所有叶子节点的完整上层路径数组
|
|
121
|
+
*
|
|
122
|
+
* 用法:
|
|
123
|
+
* const { leafParentKeys, leafNodes , leafNodesKeys, leafParentPaths} = getLastLeafParentNodes(treeList, { childrenParam: 'children', keyParam: 'id' })
|
|
124
|
+
*/
|
|
125
|
+
export declare const getLastLeafParentNodes: (list?: never[], params?: {
|
|
126
|
+
childrenParam: string;
|
|
127
|
+
keyParam: string;
|
|
128
|
+
}, extra?: {}) => {
|
|
129
|
+
leafNodes: any[];
|
|
130
|
+
leafNodesKeys: any[];
|
|
131
|
+
leafParentKeys: unknown[];
|
|
132
|
+
leafParentPaths: any[];
|
|
133
|
+
};
|
|
@@ -385,4 +385,82 @@ export var addTreeLevels = function addTreeLevels(data) {
|
|
|
385
385
|
}
|
|
386
386
|
return node;
|
|
387
387
|
});
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* @description 获取树数据中所有叶子节点的上层节点路径(用于antd树组件的expandedKeys配置)
|
|
392
|
+
* @params {Array} list 树数据集合
|
|
393
|
+
* @params {Object} params 指定当前数据中,子集合字段名及标识值字段名
|
|
394
|
+
* (childrenParam:指当前子集合数据字段名,keyParam: 指当前匹配标识值字段名)
|
|
395
|
+
* @params {Object} extra 额外配置
|
|
396
|
+
*
|
|
397
|
+
* @result {Array} leafParentKeys 所有叶子节点的上层节点key集合(去重后的数组)
|
|
398
|
+
* @result {Array} leafNodes 所有叶子节点本身
|
|
399
|
+
* @result {Array} leafNodesKeys 所有叶子节点的key集合
|
|
400
|
+
* @result {Array} leafParentPaths 所有叶子节点的完整上层路径数组
|
|
401
|
+
*
|
|
402
|
+
* 用法:
|
|
403
|
+
* const { leafParentKeys, leafNodes , leafNodesKeys, leafParentPaths} = getLastLeafParentNodes(treeList, { childrenParam: 'children', keyParam: 'id' })
|
|
404
|
+
*/
|
|
405
|
+
|
|
406
|
+
export var getLastLeafParentNodes = function getLastLeafParentNodes() {
|
|
407
|
+
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
408
|
+
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
409
|
+
childrenParam: 'children',
|
|
410
|
+
keyParam: 'value'
|
|
411
|
+
};
|
|
412
|
+
var extra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
413
|
+
var leafNodes = []; // 存储所有叶子节点
|
|
414
|
+
var leafParentPaths = []; // 存储所有叶子节点的完整上层路径
|
|
415
|
+
var expandedKeysSet = new Set(); // 用于去重的expandedKeys集合
|
|
416
|
+
|
|
417
|
+
// 递归遍历树,找到所有叶子节点及其上层路径
|
|
418
|
+
var traverseTree = function traverseTree(nodes) {
|
|
419
|
+
var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
420
|
+
if (!nodes || !Array.isArray(nodes)) return;
|
|
421
|
+
nodes.forEach(function (node) {
|
|
422
|
+
var currentPath = [].concat(_toConsumableArray(parentPath), [node]);
|
|
423
|
+
|
|
424
|
+
// 检查是否是叶子节点(children为空或无值)
|
|
425
|
+
var children = node[params.childrenParam];
|
|
426
|
+
var isLeaf = !children || Array.isArray(children) && children.length === 0;
|
|
427
|
+
if (isLeaf) {
|
|
428
|
+
// 这是叶子节点
|
|
429
|
+
leafNodes.push(node);
|
|
430
|
+
|
|
431
|
+
// 获取完整上层路径(排除当前叶子节点本身)
|
|
432
|
+
if (parentPath.length > 0) {
|
|
433
|
+
leafParentPaths.push(_toConsumableArray(parentPath));
|
|
434
|
+
|
|
435
|
+
// 将上层路径中的所有节点的key添加到expandedKeys集合中
|
|
436
|
+
parentPath.forEach(function (parentNode) {
|
|
437
|
+
var key = parentNode[params.keyParam];
|
|
438
|
+
if (key !== undefined && key !== null) {
|
|
439
|
+
expandedKeysSet.add(key);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
} else {
|
|
444
|
+
// 递归遍历子节点
|
|
445
|
+
traverseTree(children, currentPath);
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
// 开始遍历
|
|
451
|
+
traverseTree(list);
|
|
452
|
+
|
|
453
|
+
// 将Set转换为数组
|
|
454
|
+
var expandedKeys = Array.from(expandedKeysSet);
|
|
455
|
+
return {
|
|
456
|
+
leafNodes: leafNodes,
|
|
457
|
+
// 所有叶子节点本身
|
|
458
|
+
leafNodesKeys: leafNodes.map(function (item) {
|
|
459
|
+
return item[params.keyParam];
|
|
460
|
+
}),
|
|
461
|
+
// 所有叶子节点的key集合
|
|
462
|
+
leafParentKeys: expandedKeys,
|
|
463
|
+
// 所有叶子节点的上层节点key集合(去重后的数组)
|
|
464
|
+
leafParentPaths: leafParentPaths // 所有叶子节点的完整上层路径数组
|
|
465
|
+
};
|
|
388
466
|
};
|
|
@@ -127,6 +127,33 @@ var RefactorTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
127
127
|
var selectAllData = (0, _react.useMemo)(function () {
|
|
128
128
|
return (0, _util.selectAllExcludingDisabled)(transTreeData, optionName, false);
|
|
129
129
|
}, [transTreeData, optionName]);
|
|
130
|
+
// 动态更新配置expandedKeys
|
|
131
|
+
(0, _react.useEffect)(function () {
|
|
132
|
+
if (searchReactorValue) {
|
|
133
|
+
var _getLastLeafParentNod = (0, _index2.getLastLeafParentNodes)(transTreeData, {
|
|
134
|
+
childrenParam: optionName['children'],
|
|
135
|
+
keyParam: optionName['value']
|
|
136
|
+
}),
|
|
137
|
+
leafParentKeys = _getLastLeafParentNod.leafParentKeys;
|
|
138
|
+
setRefactorExpandedKeys(leafParentKeys);
|
|
139
|
+
}
|
|
140
|
+
}, [transTreeData, searchReactorValue, optionName]);
|
|
141
|
+
|
|
142
|
+
// 动态扩展配置项:动态更新配置expandedKeys及autoExpandParent的节点,使得匹配到可默认展开对应的上层节点
|
|
143
|
+
var refactorDynamicProps = (0, _react.useMemo)(function () {
|
|
144
|
+
if (searchReactorValue) {
|
|
145
|
+
return {
|
|
146
|
+
expandedKeys: refactorExpandedKeys,
|
|
147
|
+
// (leafParentKeys || []).concat(leafNodes.map(item => item[optionName['value']])),
|
|
148
|
+
autoExpandParent: true,
|
|
149
|
+
onExpand: function onExpand(keys) {
|
|
150
|
+
setRefactorExpandedKeys(keys);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
} else {
|
|
154
|
+
return {};
|
|
155
|
+
}
|
|
156
|
+
}, [searchReactorValue, refactorExpandedKeys]);
|
|
130
157
|
(0, _react.useImperativeHandle)(ref, function () {
|
|
131
158
|
return {
|
|
132
159
|
selectAllData: selectAllData,
|
|
@@ -257,7 +284,7 @@ var RefactorTree = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
257
284
|
} else {
|
|
258
285
|
defExpand = rootKey ? [rootKey] : ['0'];
|
|
259
286
|
}
|
|
260
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_antd.Tree, _extends({}, otherProps, {
|
|
287
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_antd.Tree, _extends({}, otherProps, refactorDynamicProps, {
|
|
261
288
|
onSelect: function onSelect(keys, e) {
|
|
262
289
|
return handleToSelectTreeNode(keys, e);
|
|
263
290
|
},
|
|
@@ -107,3 +107,27 @@ export declare const filterTreeNodes: (list: any[], nodeKey: string | number, pa
|
|
|
107
107
|
* @param {Object} extra 扩展配置 {separator: '/'}
|
|
108
108
|
* */
|
|
109
109
|
export declare const addTreeLevels: (data: any, level: number | undefined, parentIndexPath: never[] | undefined, parentNamePath: never[] | undefined, optionName: any, extra: any) => any[];
|
|
110
|
+
/**
|
|
111
|
+
* @description 获取树数据中所有叶子节点的上层节点路径(用于antd树组件的expandedKeys配置)
|
|
112
|
+
* @params {Array} list 树数据集合
|
|
113
|
+
* @params {Object} params 指定当前数据中,子集合字段名及标识值字段名
|
|
114
|
+
* (childrenParam:指当前子集合数据字段名,keyParam: 指当前匹配标识值字段名)
|
|
115
|
+
* @params {Object} extra 额外配置
|
|
116
|
+
*
|
|
117
|
+
* @result {Array} leafParentKeys 所有叶子节点的上层节点key集合(去重后的数组)
|
|
118
|
+
* @result {Array} leafNodes 所有叶子节点本身
|
|
119
|
+
* @result {Array} leafNodesKeys 所有叶子节点的key集合
|
|
120
|
+
* @result {Array} leafParentPaths 所有叶子节点的完整上层路径数组
|
|
121
|
+
*
|
|
122
|
+
* 用法:
|
|
123
|
+
* const { leafParentKeys, leafNodes , leafNodesKeys, leafParentPaths} = getLastLeafParentNodes(treeList, { childrenParam: 'children', keyParam: 'id' })
|
|
124
|
+
*/
|
|
125
|
+
export declare const getLastLeafParentNodes: (list?: never[], params?: {
|
|
126
|
+
childrenParam: string;
|
|
127
|
+
keyParam: string;
|
|
128
|
+
}, extra?: {}) => {
|
|
129
|
+
leafNodes: any[];
|
|
130
|
+
leafNodesKeys: any[];
|
|
131
|
+
leafParentKeys: unknown[];
|
|
132
|
+
leafParentPaths: any[];
|
|
133
|
+
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getParentNodes = exports.getNodePaths = exports.getNode = exports.getChildrenNodes = exports.filterTreeNodes = exports.convertToArray = exports.arrayToTree = exports.addTreeLevels = void 0;
|
|
6
|
+
exports.getParentNodes = exports.getNodePaths = exports.getNode = exports.getLastLeafParentNodes = exports.getChildrenNodes = exports.filterTreeNodes = exports.convertToArray = exports.arrayToTree = exports.addTreeLevels = void 0;
|
|
7
7
|
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); }
|
|
8
8
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
9
9
|
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."); }
|
|
@@ -391,4 +391,82 @@ var addTreeLevels = exports.addTreeLevels = function addTreeLevels(data) {
|
|
|
391
391
|
}
|
|
392
392
|
return node;
|
|
393
393
|
});
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* @description 获取树数据中所有叶子节点的上层节点路径(用于antd树组件的expandedKeys配置)
|
|
398
|
+
* @params {Array} list 树数据集合
|
|
399
|
+
* @params {Object} params 指定当前数据中,子集合字段名及标识值字段名
|
|
400
|
+
* (childrenParam:指当前子集合数据字段名,keyParam: 指当前匹配标识值字段名)
|
|
401
|
+
* @params {Object} extra 额外配置
|
|
402
|
+
*
|
|
403
|
+
* @result {Array} leafParentKeys 所有叶子节点的上层节点key集合(去重后的数组)
|
|
404
|
+
* @result {Array} leafNodes 所有叶子节点本身
|
|
405
|
+
* @result {Array} leafNodesKeys 所有叶子节点的key集合
|
|
406
|
+
* @result {Array} leafParentPaths 所有叶子节点的完整上层路径数组
|
|
407
|
+
*
|
|
408
|
+
* 用法:
|
|
409
|
+
* const { leafParentKeys, leafNodes , leafNodesKeys, leafParentPaths} = getLastLeafParentNodes(treeList, { childrenParam: 'children', keyParam: 'id' })
|
|
410
|
+
*/
|
|
411
|
+
|
|
412
|
+
var getLastLeafParentNodes = exports.getLastLeafParentNodes = function getLastLeafParentNodes() {
|
|
413
|
+
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
414
|
+
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
415
|
+
childrenParam: 'children',
|
|
416
|
+
keyParam: 'value'
|
|
417
|
+
};
|
|
418
|
+
var extra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
419
|
+
var leafNodes = []; // 存储所有叶子节点
|
|
420
|
+
var leafParentPaths = []; // 存储所有叶子节点的完整上层路径
|
|
421
|
+
var expandedKeysSet = new Set(); // 用于去重的expandedKeys集合
|
|
422
|
+
|
|
423
|
+
// 递归遍历树,找到所有叶子节点及其上层路径
|
|
424
|
+
var traverseTree = function traverseTree(nodes) {
|
|
425
|
+
var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
426
|
+
if (!nodes || !Array.isArray(nodes)) return;
|
|
427
|
+
nodes.forEach(function (node) {
|
|
428
|
+
var currentPath = [].concat(_toConsumableArray(parentPath), [node]);
|
|
429
|
+
|
|
430
|
+
// 检查是否是叶子节点(children为空或无值)
|
|
431
|
+
var children = node[params.childrenParam];
|
|
432
|
+
var isLeaf = !children || Array.isArray(children) && children.length === 0;
|
|
433
|
+
if (isLeaf) {
|
|
434
|
+
// 这是叶子节点
|
|
435
|
+
leafNodes.push(node);
|
|
436
|
+
|
|
437
|
+
// 获取完整上层路径(排除当前叶子节点本身)
|
|
438
|
+
if (parentPath.length > 0) {
|
|
439
|
+
leafParentPaths.push(_toConsumableArray(parentPath));
|
|
440
|
+
|
|
441
|
+
// 将上层路径中的所有节点的key添加到expandedKeys集合中
|
|
442
|
+
parentPath.forEach(function (parentNode) {
|
|
443
|
+
var key = parentNode[params.keyParam];
|
|
444
|
+
if (key !== undefined && key !== null) {
|
|
445
|
+
expandedKeysSet.add(key);
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
} else {
|
|
450
|
+
// 递归遍历子节点
|
|
451
|
+
traverseTree(children, currentPath);
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
// 开始遍历
|
|
457
|
+
traverseTree(list);
|
|
458
|
+
|
|
459
|
+
// 将Set转换为数组
|
|
460
|
+
var expandedKeys = Array.from(expandedKeysSet);
|
|
461
|
+
return {
|
|
462
|
+
leafNodes: leafNodes,
|
|
463
|
+
// 所有叶子节点本身
|
|
464
|
+
leafNodesKeys: leafNodes.map(function (item) {
|
|
465
|
+
return item[params.keyParam];
|
|
466
|
+
}),
|
|
467
|
+
// 所有叶子节点的key集合
|
|
468
|
+
leafParentKeys: expandedKeys,
|
|
469
|
+
// 所有叶子节点的上层节点key集合(去重后的数组)
|
|
470
|
+
leafParentPaths: leafParentPaths // 所有叶子节点的完整上层路径数组
|
|
471
|
+
};
|
|
394
472
|
};
|