From f05cb6b349d5bbb0b59ca42a4498d3ba520ec2a7 Mon Sep 17 00:00:00 2001 From: coolbob <39683861+coolbob1998@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:57:37 +0800 Subject: [PATCH] fix(core): fix void field child field reactions not work in some cases (#3415) * feat: set Form indexes observable * feat: add test cases --- packages/core/src/__tests__/void.spec.ts | 41 ++++++++++++++++++++++++ packages/core/src/models/Form.ts | 1 + 2 files changed, 42 insertions(+) diff --git a/packages/core/src/__tests__/void.spec.ts b/packages/core/src/__tests__/void.spec.ts index 79210d80cb0..eef6f8e289b 100644 --- a/packages/core/src/__tests__/void.spec.ts +++ b/packages/core/src/__tests__/void.spec.ts @@ -285,3 +285,44 @@ test('fault tolerance', () => { expect(field.display).toEqual('visible') expect(field.pattern).toEqual('editable') }) + +test('child field reactions', () => { + const form = attach(createForm()) + const voidField = attach(form.createVoidField({ name: 'void' })) + const field1 = attach( + form.createField({ + name: 'field1', + basePath: voidField.address, + reactions: [ + (field) => { + field.value = field.query('field3').getIn('value') + }, + ], + }) + ) + const field2 = attach( + form.createField({ + name: 'field2', + basePath: voidField.address, + reactions: [ + (field) => { + field.value = field.query('.field3').getIn('value') + }, + ], + }) + ) + expect(field1.value).toBeUndefined() + expect(field2.value).toBeUndefined() + const field3 = attach( + form.createField({ + name: 'field3', + basePath: voidField.address, + value: 1, + }) + ) + expect(field1.value).toBe(1) + expect(field2.value).toBe(1) + field3.value = 2 + expect(field1.value).toBe(2) + expect(field2.value).toBe(2) +}) diff --git a/packages/core/src/models/Form.ts b/packages/core/src/models/Form.ts index a5d34b7c822..626bc5c47be 100644 --- a/packages/core/src/models/Form.ts +++ b/packages/core/src/models/Form.ts @@ -122,6 +122,7 @@ export class Form { protected makeObservable() { define(this, { fields: observable.shallow, + indexes: observable.shallow, initialized: observable.ref, validating: observable.ref, submitting: observable.ref,