diff --git a/packages/utils/src/schema/getDefaultFormState.ts b/packages/utils/src/schema/getDefaultFormState.ts index 8dae266b89..2e209ff92d 100644 --- a/packages/utils/src/schema/getDefaultFormState.ts +++ b/packages/utils/src/schema/getDefaultFormState.ts @@ -180,7 +180,13 @@ 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; 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)