From 89beda6aec0d9ea2fa7fb9f52b4053644b49da28 Mon Sep 17 00:00:00 2001 From: liujuping Date: Wed, 6 Mar 2024 16:50:20 +0800 Subject: [PATCH] fix: refactor splice method to remove and purge nodes*** --- packages/designer/src/document/node/node-children.ts | 10 ++++++++-- packages/shell/src/model/node-children.ts | 5 +++-- packages/types/src/shell/model/node-children.ts | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/designer/src/document/node/node-children.ts b/packages/designer/src/document/node/node-children.ts index d374daa8e..2ce2d07de 100644 --- a/packages/designer/src/document/node/node-children.ts +++ b/packages/designer/src/document/node/node-children.ts @@ -307,10 +307,16 @@ export class NodeChildren implements Omit, * */ splice(start: number, deleteCount: number, node?: INode): INode[] { + let removedNode; if (node) { - return this.children.splice(start, deleteCount, node); + removedNode = this.children.splice(start, deleteCount, node); + } else { + removedNode = this.children.splice(start, deleteCount); } - return this.children.splice(start, deleteCount); + + removedNode.forEach(d => d?.purge()); + + return removedNode; } /** diff --git a/packages/shell/src/model/node-children.ts b/packages/shell/src/model/node-children.ts index b6d52e86f..c4e336aa0 100644 --- a/packages/shell/src/model/node-children.ts +++ b/packages/shell/src/model/node-children.ts @@ -97,8 +97,9 @@ export class NodeChildren implements IPublicModelNodeChildren { * @param deleteCount * @param node */ - splice(start: number, deleteCount: number, node?: IPublicModelNode): any { - this[nodeChildrenSymbol].splice(start, deleteCount, (node as any)?.[nodeSymbol]); + splice(start: number, deleteCount: number, node?: IPublicModelNode): IPublicModelNode[] { + const removedNode = this[nodeChildrenSymbol].splice(start, deleteCount, (node as any)?.[nodeSymbol]); + return removedNode.map((item: InnerNode) => ShellNode.create(item)!); } /** diff --git a/packages/types/src/shell/model/node-children.ts b/packages/types/src/shell/model/node-children.ts index f2be13250..207db5672 100644 --- a/packages/types/src/shell/model/node-children.ts +++ b/packages/types/src/shell/model/node-children.ts @@ -78,7 +78,7 @@ export interface IPublicModelNodeChildren< * @param deleteCount * @param node */ - splice(start: number, deleteCount: number, node?: Node): any; + splice(start: number, deleteCount: number, node?: Node): Node[]; /** * 返回指定下标的节点