From e516a7ffcb217d1dc0064d678fc6c7e87e9b0cf8 Mon Sep 17 00:00:00 2001 From: Rani Date: Fri, 7 Oct 2022 11:02:45 -0700 Subject: [PATCH] fix(utils): omit computedDefault of empty objects --- .../utils/src/schema/getDefaultFormState.ts | 10 ++++++++- packages/validator-ajv6/src/validator.ts | 22 +++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/utils/src/schema/getDefaultFormState.ts b/packages/utils/src/schema/getDefaultFormState.ts index 8dae266b89..2948512901 100644 --- a/packages/utils/src/schema/getDefaultFormState.ts +++ b/packages/utils/src/schema/getDefaultFormState.ts @@ -180,10 +180,18 @@ export function computeDefaults( get(formData, [key]), includeUndefinedValues ); - if (includeUndefinedValues || computedDefault !== undefined) { + if (typeof computedDefault === "object") { + // Store computedDefault if it's a non-empty object (e.g. not {}) + if (includeUndefinedValues && !isEmpty(computedDefault)) { + acc[key] = computedDefault; + } + } else if (computedDefault !== undefined) { + // Store computedDefault if it's a defined primitive (e.g. true) acc[key] = computedDefault; } return acc; + + return acc; }, {} ) as T; diff --git a/packages/validator-ajv6/src/validator.ts b/packages/validator-ajv6/src/validator.ts index c74d9d1f34..60d9f6c034 100644 --- a/packages/validator-ajv6/src/validator.ts +++ b/packages/validator-ajv6/src/validator.ts @@ -234,19 +234,9 @@ export default class AJV6Validator implements ValidatorType { customValidate?: CustomValidator, transformErrors?: ErrorTransformer ): ValidationData { - // Include form data with undefined values, which is required for validation. - const rootSchema = schema; - const newFormData = getDefaultFormState( - this, - schema, - formData, - rootSchema, - true - ) as T; - let validationError: Error | null = null; try { - this.ajv.validate(schema, newFormData); + this.ajv.validate(schema, formData); } catch (err) { validationError = err as Error; } @@ -286,6 +276,16 @@ export default class AJV6Validator implements ValidatorType { return { errors, errorSchema }; } + // Include form data with undefined values, which is required for custom validation. + const rootSchema = schema; + const newFormData = getDefaultFormState( + this, + schema, + formData, + rootSchema, + true + ) as T; + const errorHandler = customValidate( newFormData, this.createErrorHandler(newFormData)