From 5bb9ec7a1dfaabfdb5369226b54d5f63a7999e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LeoYuan=20=E8=A2=81=E5=8A=9B=E7=9A=93?= Date: Thu, 17 Mar 2022 10:08:22 +0800 Subject: [PATCH 1/2] fix: prop should return undefined when all items are undefined --- packages/designer/src/document/node/props/prop.ts | 8 ++++++-- packages/designer/tests/document/node/props/prop.test.ts | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/designer/src/document/node/props/prop.ts b/packages/designer/src/document/node/props/prop.ts index bc846416d..05de1009b 100644 --- a/packages/designer/src/document/node/props/prop.ts +++ b/packages/designer/src/document/node/props/prop.ts @@ -159,7 +159,7 @@ export class Prop implements IPropParent { const v = prop.export(stage); if (v != null) { maps = maps || {}; - maps[prop.key || key] = prop.export(stage); + maps[prop.key || key] = v; } } }); @@ -170,9 +170,13 @@ export class Prop implements IPropParent { if (!this._items) { return this._value; } - return this.items!.map((prop) => { + const values = this.items!.map((prop) => { return prop.export(stage); }); + if (values.every(val => val === undefined)) { + return undefined; + } + return values; } } diff --git a/packages/designer/tests/document/node/props/prop.test.ts b/packages/designer/tests/document/node/props/prop.test.ts index 002a96871..ec447a902 100644 --- a/packages/designer/tests/document/node/props/prop.test.ts +++ b/packages/designer/tests/document/node/props/prop.test.ts @@ -430,6 +430,11 @@ describe('Prop 类测试', () => { // illegal // expect(prop.set(5, 1)).toBeNull(); }); + + it('should return undefined when all items are undefined', () => { + prop = new Prop(mockedPropsInst, [undefined, undefined], '___loopArgs___'); + expect(prop.getValue()).toBeUndefined(); + }); }); }); From d2c3f0ba6f85b659b76636a91ea9ab2b5a95a720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LeoYuan=20=E8=A2=81=E5=8A=9B=E7=9A=93?= Date: Thu, 17 Mar 2022 11:05:01 +0800 Subject: [PATCH 2/2] test: fix node test cases run into infinite loop --- packages/designer/tests/document/node/node.test.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/designer/tests/document/node/node.test.ts b/packages/designer/tests/document/node/node.test.ts index dd20bd38a..113360d44 100644 --- a/packages/designer/tests/document/node/node.test.ts +++ b/packages/designer/tests/document/node/node.test.ts @@ -26,7 +26,7 @@ import rootHeaderMetadata from '../../fixtures/component-metadata/root-header'; import rootContentMetadata from '../../fixtures/component-metadata/root-content'; import rootFooterMetadata from '../../fixtures/component-metadata/root-footer'; -describe.skip('Node 方法测试', () => { +describe('Node 方法测试', () => { let editor: Editor; let designer: Designer; let project: Project; @@ -474,15 +474,16 @@ describe.skip('Node 方法测试', () => { it('didDropIn / didDropOut', () => { const form = doc.getNode('node_k1ow3cbo'); designer.createComponentMeta(divMetadata); + designer.createComponentMeta(formMetadata); const callbacks = form.componentMeta.getMetadata().configure.advanced?.callbacks; const fn1 = callbacks.onNodeAdd = jest.fn(); const fn2 = callbacks.onNodeRemove = jest.fn(); const textField = doc.getNode('node_k1ow3cc9'); form.didDropIn(textField); - expect(fn1).toHaveBeenCalledWith(textField, form); + expect(fn1).toHaveBeenCalledWith(textField.internalToShellNode(), form.internalToShellNode()); form.didDropOut(textField); - expect(fn2).toHaveBeenCalledWith(textField, form); + expect(fn2).toHaveBeenCalledWith(textField.internalToShellNode(), form.internalToShellNode()); }); it('hover', () => {