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.
@@ -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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fan-standard-comp",
3
- "version": "4.1.44",
3
+ "version": "4.1.45",
4
4
  "description": "FZ standard-comp,basic of antd5.0 and custom component.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",