From 296eae473a4fef8ac95c367ef63e7084bb87539e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=BB=84=E9=BB=84?= Date: Tue, 25 May 2021 00:17:00 +0800 Subject: [PATCH] feat(core): remove property of form values with undefined value (#1495) --- packages/core/src/__tests__/form.spec.ts | 41 +++++++++++++++++------- packages/core/src/models/Field.ts | 2 +- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/packages/core/src/__tests__/form.spec.ts b/packages/core/src/__tests__/form.spec.ts index ddc54f6dc87..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( @@ -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.hasOwnProperty("aaa")).toBeFalsy() + field.display = "visible"; + expect(form.values.hasOwnProperty("aaa")).toBeTruthy() + field.setValue(undefined); + expect(form.values.hasOwnProperty("aaa")).toBeTruthy() +}) diff --git a/packages/core/src/models/Field.ts b/packages/core/src/models/Field.ts index c2974abcac3..af96c9ff1b4 100644 --- a/packages/core/src/models/Field.ts +++ b/packages/core/src/models/Field.ts @@ -246,7 +246,7 @@ 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)) { this.setValue(this.caches.value)