From e1153c9aae1b17c92d1cb0afe0301f7137abcdeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8F=8A=E8=90=8D=28=E7=B5=AE=E9=BB=8E=29?= Date: Thu, 27 Oct 2022 11:03:59 +0800 Subject: [PATCH] fix: fix the problem that the childWhitelist is invalid when dragged to the root container (#1168) --- .../designer/src/builtin-simulator/host.ts | 2 +- .../designer/src/document/document-model.ts | 20 +++++++++++++----- .../document-model/document-model.test.ts | 21 +++++++++++++++++++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index 5e2a0442c..a762daaea 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -1473,7 +1473,7 @@ export class BuiltinSimulatorHost implements ISimulatorHost; if (isDragNodeDataObject(dragObject)) { items = Array.isArray(dragObject.data) ? dragObject.data : [dragObject.data]; - } else { + } else if (isDragNodeObject(dragObject)) { items = dragObject.nodes; + } else if (isNode(dragObject) || isNodeSchema(dragObject)) { + items = [dragObject]; + } else { + console.warn('the dragObject is not in the correct type, dragObject:', dragObject); + return true; } - return items.every((item) => this.checkNestingDown(dropTarget, item)); + return items.every((item) => this.checkNestingDown(dropTarget, item) && this.checkNestingUp(dropTarget, item)); } + /** + * @deprecated since version 1.0.16. + * Will be deleted in version 2.0.0. + * Use checkNesting method instead. + */ checkDropTarget(dropTarget: ParentalNode, dragObject: DragNodeObject | DragNodeDataObject): boolean { let items: Array; if (isDragNodeDataObject(dragObject)) { @@ -544,7 +554,7 @@ export class DocumentModel { */ checkNestingDown(parent: ParentalNode, obj: NodeSchema | Node): boolean { const config = parent.componentMeta; - return config.checkNestingDown(parent, obj) && this.checkNestingUp(parent, obj); + return config.checkNestingDown(parent, obj); } // ======= compatibles for vision diff --git a/packages/designer/tests/document/document-model/document-model.test.ts b/packages/designer/tests/document/document-model/document-model.test.ts index c110116a6..1061a609c 100644 --- a/packages/designer/tests/document/document-model/document-model.test.ts +++ b/packages/designer/tests/document/document-model/document-model.test.ts @@ -219,6 +219,7 @@ describe('document-model 测试', () => { it('checkNesting / checkDropTarget / checkNestingUp / checkNestingDown', () => { designer.createComponentMeta(pageMeta); designer.createComponentMeta(formMeta); + designer.createComponentMeta(otherMeta); const doc = new DocumentModel(project, formSchema); expect( @@ -240,6 +241,26 @@ describe('document-model 测试', () => { data: { componentName: 'Form' }, }), ).toBeTruthy(); + expect( + doc.checkNesting(doc.getNode('page'), doc.getNode('form')) + ).toBeTruthy(); + expect( + doc.checkNesting(doc.getNode('page'), null) + ).toBeTruthy(); + expect( + doc.checkNesting(doc.getNode('page'), { + type: 'nodedata', + data: { componentName: 'Other' }, + }) + ).toBeFalsy(); + + expect( + doc.checkNestingUp(doc.getNode('page'), { componentName: 'Other' }) + ).toBeFalsy(); + + expect( + doc.checkNestingDown(doc.getNode('page'), { componentName: 'Other' }) + ).toBeTruthy(); expect(doc.checkNestingUp(doc.getNode('page'), null)).toBeTruthy(); });