From 7eeb51cd33b8765fd09e3cdab76988144cc181d5 Mon Sep 17 00:00:00 2001 From: "mario.gk" Date: Mon, 20 Jul 2020 11:53:37 +0800 Subject: [PATCH] feat: support subtreeModified --- .../src/document/node/node-children.ts | 18 ++++++++++++++++++ packages/designer/src/document/node/node.ts | 8 ++++++++ .../src/bundle/upgrade-metadata.ts | 5 +---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/designer/src/document/node/node-children.ts b/packages/designer/src/document/node/node-children.ts index 1553a54f3..aeb306a9b 100644 --- a/packages/designer/src/document/node/node-children.ts +++ b/packages/designer/src/document/node/node-children.ts @@ -79,6 +79,10 @@ export class NodeChildren { return this.size > 0; } + @computed length() { + return this.children.length; + } + /** * 删除一个节点 */ @@ -94,6 +98,7 @@ export class NodeChildren { deleted.purge(); } this.emitter.emit('change'); + this.reportModified(node, this.owner, {type: 'remove', removeIndex: i, removeNode: node}); return false; } @@ -290,4 +295,17 @@ export class NodeChildren { // 保证向前兼容性 return "Array"; } + + private reportModified(node: Node, owner: Node, options = {}) { + if (!node) { return; } + if (node.isRoot()) { return; } + const callbacks = owner.componentMeta.getMetadata().experimental?.callbacks; + if (callbacks?.onSubtreeModified) { + callbacks?.onSubtreeModified.call(node, owner, options); + } + + if (owner.parent && !owner.parent.isRoot()) { + this.reportModified(node, owner.parent, options); + } + } } diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index 8152afab0..e2673169b 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -631,6 +631,14 @@ export class Node { this._slots.push(slotNode); } + /** + * 删除一个节点 + * @param node + */ + removeChild(node: Node) { + this.children?.delete(node); + } + private purged = false; /** * 是否已销毁 diff --git a/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts b/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts index 0db24f0b5..788203075 100644 --- a/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts +++ b/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts @@ -749,10 +749,7 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { callbacks.onNodeRemove = didDropOut; } if (subtreeModified) { - callbacks.onSubtreeModified = (...args: any[]) => { - // FIXME! args not correct - subtreeModified.apply(args[0], args as any); - }; + callbacks.onSubtreeModified = subtreeModified; } if (onResize) { callbacks.onResize = (e: any, currentNode: any) => {