From c463b7358065f3a5abec42ff1c2e1b53a516b5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8A=9B=E7=9A=93?= Date: Wed, 24 Mar 2021 12:33:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor(perf):=20=E4=BF=AE=E5=A4=8D=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E6=B8=B2=E6=9F=93=E9=9A=90=E8=97=8F=E6=A8=A1=E6=80=81?= =?UTF-8?q?=E6=A1=86=E5=B8=A6=E6=9D=A5=E7=9A=84=E9=87=8D=E5=A4=8D=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E6=80=A7=E8=83=BD=E6=B6=88=E8=80=97=20chore:=20?= =?UTF-8?q?=E5=85=B3=E9=97=AD=20liveReload=20fix:=20=E4=BF=AE=E5=A4=8D=20h?= =?UTF-8?q?istory.savePoint=20=E7=9A=84=E5=BB=B6=E8=BF=9F=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/document/node/modal-nodes-manager.ts | 2 +- packages/designer/src/document/node/node.ts | 32 ++++++++++++------- packages/ignitor/build.json | 2 +- packages/vision-polyfill/src/pages.ts | 5 +-- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/designer/src/document/node/modal-nodes-manager.ts b/packages/designer/src/document/node/modal-nodes-manager.ts index e2c459521..7b1471ea9 100644 --- a/packages/designer/src/document/node/modal-nodes-manager.ts +++ b/packages/designer/src/document/node/modal-nodes-manager.ts @@ -32,7 +32,7 @@ export class ModalNodesManager { this.emitter = new EventEmitter(); this.nodeRemoveEvents = {}; this.setNodes(); - this.hideModalNodes(); + // this.hideModalNodes(); this.willDestroy = [ page.onNodeCreate((node) => this.addNode(node)), page.onNodeDestroy((node) => this.removeNode(node)), diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index 35618f20a..7c6bb0ab3 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -166,6 +166,9 @@ export class Node { }); this.settingEntry = this.document.designer.createSettingEntry([this]); } else { + if (this.componentMeta.isModal) { + extras.hidden = true; + } // 这里 props 被初始化两次,一次 new,一次 import,new 的实例需要给 propsReducer 的钩子去使用, // import 是为了使用钩子返回的值,并非完全幂等的操作,部分行为执行两次会有 bug, // 所以在 props 里会对 new / import 做一些区别化的解析 @@ -802,20 +805,13 @@ export class Node { } insertBefore(node: Node, ref?: Node, useMutator = true) { - this.children?.insert(node, ref ? ref.index : null, useMutator); + const nodeInstance = ensureNode(node, this.document); + this.children?.insert(nodeInstance, ref ? ref.index : null, useMutator); } insertAfter(node: any, ref?: Node, useMutator = true) { - if (!isNode(node)) { - if (node.getComponentName) { - node = this.document.createNode({ - componentName: node.getComponentName(), - }); - } else { - node = this.document.createNode(node); - } - } - this.children?.insert(node, ref ? ref.index + 1 : null, useMutator); + const nodeInstance = ensureNode(node, this.document); + this.children?.insert(nodeInstance, ref ? ref.index + 1 : null, useMutator); } getParent() { @@ -1001,6 +997,20 @@ export class Node { } } +function ensureNode(node: any, document: DocumentModel): Node { + let nodeInstance = node; + if (!isNode(node)) { + if (node.getComponentName) { + nodeInstance = document.createNode({ + componentName: node.getComponentName(), + }); + } else { + nodeInstance = document.createNode(node); + } + } + return nodeInstance; +} + export interface ParentalNode extends Node { readonly children: NodeChildren; } diff --git a/packages/ignitor/build.json b/packages/ignitor/build.json index 02cfe5fb3..593dfb184 100644 --- a/packages/ignitor/build.json +++ b/packages/ignitor/build.json @@ -9,7 +9,7 @@ }, "vendor": false, "devServer": { - "useLocalIp": true, + "liveReload": false, "hot": false }, "publicPath": "/", diff --git a/packages/vision-polyfill/src/pages.ts b/packages/vision-polyfill/src/pages.ts index 74b87a3a8..dedd9db2c 100644 --- a/packages/vision-polyfill/src/pages.ts +++ b/packages/vision-polyfill/src/pages.ts @@ -74,10 +74,7 @@ const pages = Object.assign(project, { true, ); - // FIXME: 根本原因应该是 propStash 导致的,这样可以避免页面加载之后就被标记为 isModified - setTimeout(() => { - project.currentDocument?.history.savePoint(); - }, 0); + project.currentDocument?.history.savePoint(); }, addPage(data: OldPageData | RootSchema) { if (isPageDataV1(data)) {