|
8 | 8 | CONST_KEY, |
9 | 9 | DEFAULT_KEY, |
10 | 10 | DEPENDENCIES_KEY, |
| 11 | + IF_KEY, |
11 | 12 | ONE_OF_KEY, |
12 | 13 | PROPERTIES_KEY, |
13 | 14 | REF_KEY, |
@@ -478,12 +479,16 @@ export function getObjectDefaults<T = any, S extends StrictRJSFSchema = RJSFSche |
478 | 479 | { |
479 | 480 | const formData: T = (isObject(rawFormData) ? rawFormData : {}) as T; |
480 | 481 | const schema: S = rawSchema; |
481 | | - // This is a custom addition that fixes this issue: |
482 | | - // https://github.com/rjsf-team/react-jsonschema-form/issues/3832 |
483 | | - const retrievedSchema = |
484 | | - experimental_defaultFormStateBehavior?.allOf === 'populateDefaults' && ALL_OF_KEY in schema |
485 | | - ? retrieveSchema<T, S, F>(validator, schema, rootSchema, formData, experimental_customMergeAllOf) |
486 | | - : schema; |
| 482 | + // Retrieve the schema: |
| 483 | + // - If schema contains `allOf` AND `experimental_defaultFormStateBehavior.allOf` is set to `populateDefaults` |
| 484 | + // - OR if schema contains an 'if' AND `emptyObjectFields` is not set to `skipEmptyDefaults` |
| 485 | + // This ensures we compute defaults correctly for schemas with these keywords. |
| 486 | + const shouldRetrieveSchema = |
| 487 | + (experimental_defaultFormStateBehavior?.allOf === 'populateDefaults' && ALL_OF_KEY in schema) || |
| 488 | + (experimental_defaultFormStateBehavior?.emptyObjectFields !== 'skipEmptyDefaults' && IF_KEY in schema); |
| 489 | + const retrievedSchema = shouldRetrieveSchema |
| 490 | + ? retrieveSchema<T, S, F>(validator, schema, rootSchema, formData, experimental_customMergeAllOf) |
| 491 | + : schema; |
487 | 492 | const parentConst = retrievedSchema[CONST_KEY]; |
488 | 493 | const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce( |
489 | 494 | (acc: GenericObjectType, key: string) => { |
|
0 commit comments