Procházet zdrojové kódy

fix(tree): progenitor方法变更

vian před 5 roky
rodič
revize
aebd6e27d4
3 změnil soubory, kde provedl 19 přidání a 8 odebrání
  1. 1 1
      tree/package.json
  2. 6 3
      tree/src/nodeCtx.ts
  3. 12 4
      tree/src/tree.ts

+ 1 - 1
tree/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@sc/tree",
-  "version": "1.0.7",
+  "version": "1.0.9",
   "description": "a template for npm package coding",
   "main": "./dist/index.cjs.js",
   "module": "./dist/index.esm.js",

+ 6 - 3
tree/src/nodeCtx.ts

@@ -113,11 +113,14 @@ export class NodeContext {
     return this.posterity().length;
   }
 
-  // 获取节点最上层父项(起源)
-  progenitor(): TreeNode | None {
+  // 获取节点的起源节点(根节点,若该节点已为根节点,则返回自身
+  progenitor(): TreeNode {
     let parent = this.parent();
+    if (!parent) {
+      return this.ref;
+    }
     while (parent && parent.getCtx().parent()) {
-      parent = parent.getCtx().parent();
+      parent = parent.getCtx().parent() as TreeNode;
     }
     return parent;
   }

+ 12 - 4
tree/src/tree.ts

@@ -326,6 +326,7 @@ export class Tree {
     // 递归删除节点
     const deleteNodes = (nodes: TreeNode[]): void => {
       // 删除映射、删除数据
+      const toDels: { nodes: TreeNode[]; delNode: TreeNode }[] = [];
       nodes.forEach(node => {
         allDeletedNodes.push(node);
         delete this.IDMap[node.ID];
@@ -336,7 +337,7 @@ export class Tree {
         if (nodesInParentMap && nodesInParentMap.length) {
           const nIndex = nodesInParentMap.indexOf(node);
           if (nIndex >= 0) {
-            nodesInParentMap.splice(nIndex, 1);
+            toDels.push({ nodes: nodesInParentMap, delNode: node });
           }
         }
         const index = this.rawData.indexOf(node);
@@ -347,6 +348,13 @@ export class Tree {
           deleteNodes(children);
         }
       });
+      // 删除parentMap的数据
+      toDels.forEach(delItem => {
+        const delIndex = delItem.nodes.indexOf(delItem.delNode);
+        if (delIndex >= 0) {
+          delItem.nodes.splice(delIndex, 1);
+        }
+      });
     };
     deleteNodes(treeNodes);
     // 排序
@@ -598,8 +606,8 @@ export class Tree {
   clear(): void {
     this.rawData.splice(0, this.rawData.length);
     this.data.splice(0, this.data.length);
-    this.parentMap = {};
-    this.IDMap = {};
-    this.ctxMap = {};
+    Object.keys(this.parentMap).forEach(key => delete this.parentMap[key]);
+    Object.keys(this.IDMap).forEach(key => delete this.IDMap[key]);
+    Object.keys(this.ctxMap).forEach(key => delete this.ctxMap[key]);
   }
 }