From 885a0ae5271303f3afca1cacf97c2211650b8164 Mon Sep 17 00:00:00 2001 From: javahuang Date: Mon, 24 May 2021 23:14:52 +0800 Subject: [PATCH 1/5] fix(core): remove property of form values with undefined value --- packages/core/src/__tests__/form.spec.ts | 19 ++++++++++++++++++- packages/core/src/models/Form.ts | 6 +++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/core/src/__tests__/form.spec.ts b/packages/core/src/__tests__/form.spec.ts index ddc54f6dc87..4c29482265e 100644 --- a/packages/core/src/__tests__/form.spec.ts +++ b/packages/core/src/__tests__/form.spec.ts @@ -951,4 +951,21 @@ test('initialValues merge values after create field', () => { expect(array.value).toEqual([{ aa: '321' }]) expect(arr_0_aa.value).toEqual('321') expect(aa.value).toEqual('222') -}) \ No newline at end of file +}) + +test('remove property of form values with undefined value', () => { + const form = attach(createForm()) + const field = attach( + form.createField({ + name: 'aaa', + initialValue: 123, + }) + ) + expect(form.values).toMatchObject({ aaa: 123 }) + field.display = "none"; + expect(form.values).not.toHaveProperty("aaa") + field.display = "visible"; + expect(form.values).toHaveProperty("aaa") + field.setValue(undefined); + expect(form.values).not.toHaveProperty("aaa") +}) diff --git a/packages/core/src/models/Form.ts b/packages/core/src/models/Form.ts index 7a3fb6b99cc..23d135a6aee 100644 --- a/packages/core/src/models/Form.ts +++ b/packages/core/src/models/Form.ts @@ -418,7 +418,11 @@ export class Form { setValuesIn = (pattern: FormPathPattern, value: any) => { untracked(() => { - FormPath.setIn(this.values, pattern, value) + if (value === undefined) { + this.deleteValuesIn(pattern); + } else { + FormPath.setIn(this.values, pattern, value) + } }) } From 95205dd193bd76c67de29635845c379c49400513 Mon Sep 17 00:00:00 2001 From: javahuang Date: Mon, 24 May 2021 23:36:18 +0800 Subject: [PATCH 2/5] fix(core): remove property of form values with undefined value --- packages/core/src/models/Field.ts | 3 +++ packages/core/src/models/Form.ts | 6 +----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/core/src/models/Field.ts b/packages/core/src/models/Field.ts index c2974abcac3..b3d1793036f 100644 --- a/packages/core/src/models/Field.ts +++ b/packages/core/src/models/Field.ts @@ -233,6 +233,9 @@ export class Field< if (isValid(value) && this.modified && !this.caches.inputing) { this.validate() } + if(value === undefined) { + this.form.deleteValuesIn(this.path) + } } ), reaction( diff --git a/packages/core/src/models/Form.ts b/packages/core/src/models/Form.ts index 23d135a6aee..7a3fb6b99cc 100644 --- a/packages/core/src/models/Form.ts +++ b/packages/core/src/models/Form.ts @@ -418,11 +418,7 @@ export class Form { setValuesIn = (pattern: FormPathPattern, value: any) => { untracked(() => { - if (value === undefined) { - this.deleteValuesIn(pattern); - } else { - FormPath.setIn(this.values, pattern, value) - } + FormPath.setIn(this.values, pattern, value) }) } From b350fba44ddb895da858db84875c45c418af8980 Mon Sep 17 00:00:00 2001 From: javahuang Date: Mon, 24 May 2021 23:43:26 +0800 Subject: [PATCH 3/5] fix(core): remove property of form values with undefined value --- packages/core/src/models/Field.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/core/src/models/Field.ts b/packages/core/src/models/Field.ts index b3d1793036f..95b5c685071 100644 --- a/packages/core/src/models/Field.ts +++ b/packages/core/src/models/Field.ts @@ -233,9 +233,6 @@ export class Field< if (isValid(value) && this.modified && !this.caches.inputing) { this.validate() } - if(value === undefined) { - this.form.deleteValuesIn(this.path) - } } ), reaction( @@ -250,6 +247,7 @@ export class Field< if (display === 'none') { this.caches.value = toJS(this.value) this.setValue() + this.form.deleteValuesIn(this.path) } else if (display === 'visible') { if (isEmpty(this.value)) { this.setValue(this.caches.value) From aabbfa8e56d41886752762f86f2261bbeb8ddd99 Mon Sep 17 00:00:00 2001 From: javahuang Date: Mon, 24 May 2021 23:48:13 +0800 Subject: [PATCH 4/5] fix(core): remove property of form values with undefined value --- packages/core/src/models/Field.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/models/Field.ts b/packages/core/src/models/Field.ts index 95b5c685071..af96c9ff1b4 100644 --- a/packages/core/src/models/Field.ts +++ b/packages/core/src/models/Field.ts @@ -246,7 +246,6 @@ export class Field< (display) => { if (display === 'none') { this.caches.value = toJS(this.value) - this.setValue() this.form.deleteValuesIn(this.path) } else if (display === 'visible') { if (isEmpty(this.value)) { From c955beff7d082566382f011933ddf473fe9cb772 Mon Sep 17 00:00:00 2001 From: javahuang Date: Tue, 25 May 2021 00:05:29 +0800 Subject: [PATCH 5/5] fix(core): remove property of form values with undefined value --- packages/core/src/__tests__/form.spec.ts | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/core/src/__tests__/form.spec.ts b/packages/core/src/__tests__/form.spec.ts index 4c29482265e..51c291bc703 100644 --- a/packages/core/src/__tests__/form.spec.ts +++ b/packages/core/src/__tests__/form.spec.ts @@ -400,7 +400,7 @@ test('validate/valid/invalid/errors/warnings/successes/clearErrors/clearWarnings ) try { await form.validate() - } catch {} + } catch { } expect(form.invalid).toBeTruthy() expect(form.valid).toBeFalsy() expect(form.errors).toEqual([ @@ -494,7 +494,7 @@ test('validate/valid/invalid/errors/warnings/successes/clearErrors/clearWarnings await bb.onInput('') try { await form.validate() - } catch {} + } catch { } expect(form.errors).toEqual([ { type: 'error', @@ -616,7 +616,7 @@ test('validate/valid/invalid/errors/warnings/successes/clearErrors/clearWarnings form.clearWarnings() try { await form.validate('aa') - } catch {} + } catch { } expect( form.queryFeedbacks({ type: 'error', @@ -624,7 +624,7 @@ test('validate/valid/invalid/errors/warnings/successes/clearErrors/clearWarnings ).toEqual(1) try { await form.validate('*') - } catch {} + } catch { } expect( form.queryFeedbacks({ type: 'error', @@ -797,7 +797,7 @@ test('reset', async () => { expect(form.values.aa).toEqual('xxxxx') try { await form.reset() - } catch {} + } catch { } expect(form.valid).toBeTruthy() expect(form.values.aa).toEqual(123) expect(field.value).toEqual(123) @@ -814,7 +814,7 @@ test('reset', async () => { await form.reset('*', { validate: true, }) - } catch {} + } catch { } expect(form.valid).toBeFalsy() expect(form.values.aa).toEqual(123) expect(field.value).toEqual(123) @@ -826,7 +826,7 @@ test('reset', async () => { await form.reset('*', { forceClear: true, }) - } catch {} + } catch { } expect(form.valid).toBeTruthy() expect(form.values.aa).toBeUndefined() expect(field.value).toBeUndefined() @@ -838,7 +838,7 @@ test('reset', async () => { await form.reset('aa', { forceClear: true, }) - } catch {} + } catch { } expect(form.valid).toBeTruthy() expect(form.values.aa).toBeUndefined() expect(field.value).toBeUndefined() @@ -848,8 +848,8 @@ test('reset', async () => { test('devtools', () => { window['__FORMILY_DEV_TOOLS_HOOK__'] = { - inject() {}, - unmount() {}, + inject() { }, + unmount() { }, } const form = attach(createForm()) form.onUnmount() @@ -931,7 +931,7 @@ test('initialValues merge values after create field', () => { const aa = attach( form.createArrayField({ name: 'aa', - initialValue:'111' + initialValue: '111' }) ) const array = attach( @@ -963,9 +963,9 @@ test('remove property of form values with undefined value', () => { ) expect(form.values).toMatchObject({ aaa: 123 }) field.display = "none"; - expect(form.values).not.toHaveProperty("aaa") + expect(form.values.hasOwnProperty("aaa")).toBeFalsy() field.display = "visible"; - expect(form.values).toHaveProperty("aaa") + expect(form.values.hasOwnProperty("aaa")).toBeTruthy() field.setValue(undefined); - expect(form.values).not.toHaveProperty("aaa") + expect(form.values.hasOwnProperty("aaa")).toBeTruthy() })