From 40eafff3ec0f9b5a7e6dfde569ee1c390622dfab Mon Sep 17 00:00:00 2001 From: YuanHeDx Date: Mon, 17 Mar 2025 21:14:54 +0800 Subject: [PATCH] fix(form): fix hasError called in FormModel.validate --- .../form/__tests__/validate.test.ts | 22 +++++++++++++++++++ .../node-engine/form/src/core/form-model.ts | 1 + .../node-engine/form/src/utils/validate.ts | 10 ++------- 3 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 packages/node-engine/form/__tests__/validate.test.ts diff --git a/packages/node-engine/form/__tests__/validate.test.ts b/packages/node-engine/form/__tests__/validate.test.ts new file mode 100644 index 00000000..b1230d33 --- /dev/null +++ b/packages/node-engine/form/__tests__/validate.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest'; + +import { hasError } from '../src/utils/validate'; +import { FeedbackLevel, FieldError } from '../src/types'; + +describe('utils/validate', () => { + describe('hasError', () => { + it('should return false when errors is empty', () => { + expect(hasError({ xxx: [] })).toBe(false); + expect(hasError({ xxx: undefined })).toBe(false); + expect(hasError({})).toBe(false); + expect(hasError({ aaa: [], bbb: [] })).toBe(false); + expect(hasError({ aaa: undefined, bbb: [] })).toBe(false); + }); + it('should return true when errors is not empty', () => { + const mockError: FieldError = { name: 'xxx', level: FeedbackLevel.Error, message: 'err' }; + expect(hasError({ xxx: [mockError] })).toBe(true); + expect(hasError({ aaa: [mockError], bbb: [mockError] })).toBe(true); + expect(hasError({ aaa: undefined, bbb: [mockError] })).toBe(true); + }); + }); +}); diff --git a/packages/node-engine/form/src/core/form-model.ts b/packages/node-engine/form/src/core/form-model.ts index 988ef845..6cfa65d2 100644 --- a/packages/node-engine/form/src/core/form-model.ts +++ b/packages/node-engine/form/src/core/form-model.ts @@ -279,6 +279,7 @@ export class FormModel implements Disposable { const warnings = feedbackToFieldErrorsOrWarnings(path, feedback); if (field) { + debugger; field.state.errors = errors; field.state.warnings = warnings; field.state.invalid = hasError(errors); diff --git a/packages/node-engine/form/src/utils/validate.ts b/packages/node-engine/form/src/utils/validate.ts index 117f87c2..dd25a5f2 100644 --- a/packages/node-engine/form/src/utils/validate.ts +++ b/packages/node-engine/form/src/utils/validate.ts @@ -33,11 +33,5 @@ export function feedbackToFieldErrorsOrWarnings(name: string, feedback?: Feed } as T; } -export const hasError = (errors: Errors) => { - for (let fieldErrors in errors) { - if (fieldErrors.length) { - return true; - } - } - return false; -}; +export const hasError = (errors: Errors) => + Object.keys(errors).some((key) => errors[key]?.length > 0);