From a5b36f63ce6cec432d6974346760ea41307d66f4 Mon Sep 17 00:00:00 2001 From: Abdelrahman Awad Date: Sun, 20 Mar 2022 18:10:40 +0200 Subject: [PATCH] style: minor refactor of #3726 --- packages/vee-validate/src/validate.ts | 46 ++++++++------------ packages/vee-validate/tests/useField.spec.ts | 1 + 2 files changed, 19 insertions(+), 28 deletions(-) diff --git a/packages/vee-validate/src/validate.ts b/packages/vee-validate/src/validate.ts index 3ee619563..89c244b50 100644 --- a/packages/vee-validate/src/validate.ts +++ b/packages/vee-validate/src/validate.ts @@ -59,47 +59,37 @@ async function _validate(field: FieldValidationContext, value: unknown) { return validateFieldWithYup(value, field.rules, { bails: field.bails }); } - // if a generic function, use it as the pipeline. - if (isCallable(field.rules)) { + // if a generic function or chain of generic functions + if (isCallable(field.rules) || Array.isArray(field.rules)) { const ctx = { field: field.name, form: field.formData, value: value, }; - const result = await field.rules(value, ctx); - const isValid = typeof result !== 'string' && result; - const message = typeof result === 'string' ? result : _generateFieldError(ctx); - - return { - errors: !isValid ? [message] : [], - }; - } - - // chain of generic functions - if (Array.isArray(field.rules)) { - const ctx = { - field: field.name, - form: field.formData, - value: value, - }; - const length = field.rules.length; + // Normalize the pipeline + const pipeline = Array.isArray(field.rules) ? field.rules : [field.rules]; + const length = pipeline.length; const errors: ReturnType[] = []; + for (let i = 0; i < length; i++) { - const rule = field.rules[i]; + const rule = pipeline[i]; const result = await rule(value, ctx); const isValid = typeof result !== 'string' && result; + if (isValid) { + continue; + } + const message = typeof result === 'string' ? result : _generateFieldError(ctx); - if (!isValid) { - if (field.bails) { - return { - errors: [message], - }; - } else { - errors.push(message); - } + errors.push(message); + + if (field.bails) { + return { + errors, + }; } } + return { errors, }; diff --git a/packages/vee-validate/tests/useField.spec.ts b/packages/vee-validate/tests/useField.spec.ts index 0892a8b4b..2b2f1c984 100644 --- a/packages/vee-validate/tests/useField.spec.ts +++ b/packages/vee-validate/tests/useField.spec.ts @@ -374,6 +374,7 @@ describe('useField()', () => { expect(meta1?.textContent).toBe('invalid'); expect(meta2?.textContent).toBe('invalid'); }); + test('when bails is false', async () => { mountWithHoc({ setup() {