From 88d6f83b79df715082fece0bd4ac9a875cd8c136 Mon Sep 17 00:00:00 2001 From: nexx <670435363@qq.com> Date: Wed, 24 Nov 2021 14:34:21 +0800 Subject: [PATCH] fix(core): fix validator will trigger multi times with duplicate triggerTypes (#2495) --- packages/core/src/__tests__/field.spec.ts | 18 ++++++++++++++++++ packages/core/src/shared/internals.ts | 10 ++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/core/src/__tests__/field.spec.ts b/packages/core/src/__tests__/field.spec.ts index 57e63f51ef0..82e15f19e19 100644 --- a/packages/core/src/__tests__/field.spec.ts +++ b/packages/core/src/__tests__/field.spec.ts @@ -1716,3 +1716,21 @@ test('nested field modified', async () => { await form.reset() expect(form.modified).toBeFalsy() }) + +test('field setValidator repeat call', async () => { + const form = attach(createForm()) + const field = attach( + form.createField({ + name: 'normal', + }) + ) + + const validator1 = jest.fn(() => '') + const validator2 = jest.fn(() => '') + const validator3 = jest.fn(() => '') + + field.setValidator([validator1, validator2, validator3]) + + await form.validate() + expect(validator1).toBeCalledTimes(1) +}) diff --git a/packages/core/src/shared/internals.ts b/packages/core/src/shared/internals.ts index 3f9c778745e..94e284ee0e6 100644 --- a/packages/core/src/shared/internals.ts +++ b/packages/core/src/shared/internals.ts @@ -949,8 +949,14 @@ export const validateSelf = batch.bound( if (target.pattern !== 'editable' || target.display !== 'visible') return {} start() if (!triggerType) { - const allTriggerTypes = parseValidatorDescriptions(target.validator).map( - (desc) => desc.triggerType + const allTriggerTypes = parseValidatorDescriptions( + target.validator + ).reduce( + (types, desc) => + types.indexOf(desc.triggerType) > -1 + ? types + : types.concat(desc.triggerType), + [] ) const results = {} for (let i = 0; i < allTriggerTypes.length; i++) {