From cbc70eaa78f171a25f867a46a7afe54c23afe238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=86=A0?= Date: Fri, 24 Jul 2020 15:35:14 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E8=A1=A5=E5=85=85documnet-model?= =?UTF-8?q?=E4=B8=ADaddonData=20=E7=9B=B8=E5=85=B3=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/src/document/document-model.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 46cb51af5..3410aea69 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -49,6 +49,11 @@ export class DocumentModel { private emitter: EventEmitter; private rootNodeVisitorMap: { [visitorName: string]: any } = {}; + /** + * @deprecated + */ + private _addons: { [key: string]: { exportData: () => any; isProp: boolean;} } = {}; + /** * 模拟器 */ @@ -512,6 +517,32 @@ export class DocumentModel { this.emitter.emit('lowcode_engine_renderer_ready', renderer); } + /** + * @deprecated + */ + getAddonData(name: string) { + const addon = this._addons[name]; + return addon?.exportData(); + } + + /** + * @deprecated + */ + registerAddon(name: string, exportData: any) { + if (['id', 'params', 'layout'].indexOf(name) > -1) { + throw new Error('addon name cannot be id, params, layout'); + } + const i = this._addons?.findIndex((item) => item.name === name); + if (i > -1) { + this._addons?.splice(i, 1); + } + this._addons?.push({ + exportData, + name, + }); + } + + acceptRootNodeVisitor( visitorName: string = 'default', visitorFn: (node: RootNode) => any ) { From 444e25cf2421fd17ed70af5d43a362362de1e75a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=86=A0?= Date: Sun, 26 Jul 2020 14:56:57 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20props.getNode=20=E9=98=B2=E6=AD=BB?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/designer/src/document/node/props/props.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/designer/src/document/node/props/props.ts b/packages/designer/src/document/node/props/props.ts index 19b8b30c7..d49a0e933 100644 --- a/packages/designer/src/document/node/props/props.ts +++ b/packages/designer/src/document/node/props/props.ts @@ -336,9 +336,14 @@ export class Props implements IPropParent { */ getNode() { const nodeForVision = this.owner; - nodeForVision.getChildren = () => { - return this.owner?.getChildren()?.getChildrenArray() || []; - }; + // 判断是否已经是 nodeForVision + if (!nodeForVision.isVisionNode) { + const children = nodeForVision.getChildren(); + nodeForVision.getChildren = () => { + return children?.getChildrenArray() || []; + }; + nodeForVision.isVisionNode = true; + } return nodeForVision; } } From da592355f4c3ec8306b605fe2aa8d7b6138d8630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=86=A0?= Date: Sun, 26 Jul 2020 22:49:06 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4visionNode?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=AA=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/document/node/node-children.ts | 7 ++--- packages/designer/src/document/node/node.ts | 27 +++++++++++++++++++ .../designer/src/document/node/props/props.ts | 10 +------ 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/packages/designer/src/document/node/node-children.ts b/packages/designer/src/document/node/node-children.ts index dc6bd2aac..ed6c16f50 100644 --- a/packages/designer/src/document/node/node-children.ts +++ b/packages/designer/src/document/node/node-children.ts @@ -313,9 +313,10 @@ export class NodeChildren { return; } const callbacks = owner.componentMeta.getMetadata().experimental?.callbacks; - if (callbacks?.onSubtreeModified) { + if (callbacks?.onSubtreeModified && options?.type !== 'insert') { try { - callbacks?.onSubtreeModified.call(node, owner, options); + // 此处传入的 owner节点需要对getChildren进行处理,兼容老的数据结构 + callbacks?.onSubtreeModified.call(node, owner.getVisionCapabledNode(), options); } catch (e) { console.error('error when excute experimental.callbacks.onNodeAdd', e); } @@ -323,7 +324,7 @@ export class NodeChildren { if (callbacks?.onNodeAdd && options?.type === 'insert') { try { - callbacks?.onNodeAdd.call(owner, node, owner); + callbacks?.onNodeAdd.call(owner, node.getVisionCapabledNode(), owner); } catch (e) { console.error('error when excute experimental.callbacks.onNodeAdd', e); } diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index b6f0ed4c3..c135fcb9b 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -818,6 +818,33 @@ export class Node { toString() { return this.id; } + + /** + * 慎用,可能有极端未知后果 + * @deprecated + */ + getVisionCapabledNode() { + // 判断是否已经是 nodeForVision + if (!this.isVisionNode) { + const children = this.getChildren(); + this.getChildren = () => { + return children?.getChildrenArray() || []; + }; + this.getProps = () => { + const props = this.props.export(); + props.getPropValue = (key) => { + return this.props.getPropValue(key); + }; + props.getNode = () => { + return this; + }; + return props; + }; + this.isVisionNode = true; + } + return this; + } + } export interface ParentalNode extends Node { diff --git a/packages/designer/src/document/node/props/props.ts b/packages/designer/src/document/node/props/props.ts index d49a0e933..8393dad75 100644 --- a/packages/designer/src/document/node/props/props.ts +++ b/packages/designer/src/document/node/props/props.ts @@ -335,15 +335,7 @@ export class Props implements IPropParent { * 兼容vision体系 */ getNode() { - const nodeForVision = this.owner; - // 判断是否已经是 nodeForVision - if (!nodeForVision.isVisionNode) { - const children = nodeForVision.getChildren(); - nodeForVision.getChildren = () => { - return children?.getChildrenArray() || []; - }; - nodeForVision.isVisionNode = true; - } + const nodeForVision = this.owner?.getVisionCapabledNode(); return nodeForVision; } } From 95b34091d908be2b76d2508cb9a6951b3fa03193 Mon Sep 17 00:00:00 2001 From: YJSON Date: Mon, 27 Jul 2020 20:23:35 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=F0=9F=90=9B=20getPrototype=20is=20u?= =?UTF-8?q?ndefined?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plugin-outline-pane/src/views/root-tree-node.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-outline-pane/src/views/root-tree-node.tsx b/packages/plugin-outline-pane/src/views/root-tree-node.tsx index 08f7fee1c..bdaae0c65 100644 --- a/packages/plugin-outline-pane/src/views/root-tree-node.tsx +++ b/packages/plugin-outline-pane/src/views/root-tree-node.tsx @@ -29,7 +29,7 @@ class ModalTreeNodeView extends Component<{ treeNode: TreeNode }> { render() { const { treeNode } = this.props; const modalNodes = treeNode.children?.filter((item) => { - return item.node.getPrototype().isModal(); + return item.node.getPrototype()?.isModal(); }); if (!modalNodes || modalNodes.length === 0) { return null;