From 744c4e7a32c7dacfa0f2ff4478f3c3415d65bdf9 Mon Sep 17 00:00:00 2001 From: Abdallah Al-Soqatri Date: Sun, 9 Nov 2025 22:52:57 +0100 Subject: [PATCH 1/2] Fixed issue with schema array with nested dependent fixed-length. --- CHANGELOG.md | 1 + .../utils/src/schema/getDefaultFormState.ts | 2 + .../test/schema/getDefaultFormStateTest.ts | 104 ++++++++++++++++++ 3 files changed, 107 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 113d93822e..df7de84a96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,7 @@ should change the heading of the (upcoming) version to include a major version b ## @rjsf/utils - Added support for rendering `ui:help` as markdown via new `ui:enableMarkdownInHelp` flag in `FieldHelpTemplate` +- Fixed issue with schema array with nested dependent fixed-length, fixing [#3754](https://github.com/rjsf-team/react-jsonschema-form/issues/3754) # 6.0.2 diff --git a/packages/utils/src/schema/getDefaultFormState.ts b/packages/utils/src/schema/getDefaultFormState.ts index e14877bcb9..6de034230e 100644 --- a/packages/utils/src/schema/getDefaultFormState.ts +++ b/packages/utils/src/schema/getDefaultFormState.ts @@ -614,12 +614,14 @@ export function getArrayDefaults { const schemaItem: S = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Fallback, idx); + const itemFormData = Array.isArray(rawFormData) ? rawFormData[idx] : undefined; return computeDefaults(validator, schemaItem, { rootSchema, _recurseList, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, parentDefaults: item, + rawFormData: itemFormData, required, shouldMergeDefaultsIntoFormData, initialDefaultsGenerated, diff --git a/packages/utils/test/schema/getDefaultFormStateTest.ts b/packages/utils/test/schema/getDefaultFormStateTest.ts index ce7b18c2bf..eabb31202e 100644 --- a/packages/utils/test/schema/getDefaultFormStateTest.ts +++ b/packages/utils/test/schema/getDefaultFormStateTest.ts @@ -1870,6 +1870,110 @@ export default function getDefaultFormStateTest(testValidator: TestValidatorType }); }); + describe('array with nested dependent fixed-length array schema', () => { + const schema: RJSFSchema = { + items: [ + { + dependencies: { + checkbox: { + if: { + properties: { + checkbox: { + const: true, + }, + }, + }, + then: { + properties: { + inner_array: { + items: [ + { + title: 'Fixed Item', + type: 'string', + }, + ], + title: 'Inner Fixed-Length Array', + type: 'array', + }, + }, + }, + }, + }, + properties: { + checkbox: { + title: 'Dependency Checkbox', + type: 'boolean', + }, + }, + title: 'Outer Item', + type: 'object', + }, + ], + title: 'Outer Fixed Length Array', + type: 'array', + }; + const formData = [{ checkbox: true }]; + const includeUndefinedValues = 'excludeObjectChildren'; + const expected = [ + { + checkbox: true, + inner_array: [undefined], + }, + ]; + + test('getDefaultFormState', () => { + expect(getDefaultFormState(testValidator, schema, formData, schema, includeUndefinedValues)).toEqual( + expected, + ); + }); + + test('computeDefaults', () => { + expect( + computeDefaults(testValidator, schema, { + rootSchema: schema, + rawFormData: formData, + includeUndefinedValues, + shouldMergeDefaultsIntoFormData: true, + }), + ).toEqual(expected); + }); + + test('getDefaultBasedOnSchemaType', () => { + expect( + getDefaultBasedOnSchemaType( + testValidator, + schema, + { + rootSchema: schema, + includeUndefinedValues, + }, + [ + { + checkbox: true, + }, + ], + ), + ).toEqual(expected); + }); + + test('getArrayDefaults', () => { + expect( + getArrayDefaults( + testValidator, + schema, + { + rootSchema: schema, + includeUndefinedValues, + }, + [ + { + checkbox: true, + }, + ], + ), + ).toEqual(expected); + }); + }); describe('an invalid array schema', () => { const schema: RJSFSchema = { type: 'array', From 42dbee52224eb2f9065bf8562d47b3a52b88fd85 Mon Sep 17 00:00:00 2001 From: Abdallah Al-Soqatri Date: Sat, 22 Nov 2025 15:59:37 +0100 Subject: [PATCH 2/2] fixed failing tests in validator-ajv8 --- packages/utils/test/schema/getDefaultFormStateTest.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/utils/test/schema/getDefaultFormStateTest.ts b/packages/utils/test/schema/getDefaultFormStateTest.ts index eabb31202e..fbdbafa595 100644 --- a/packages/utils/test/schema/getDefaultFormStateTest.ts +++ b/packages/utils/test/schema/getDefaultFormStateTest.ts @@ -1922,7 +1922,7 @@ export default function getDefaultFormStateTest(testValidator: TestValidatorType ]; test('getDefaultFormState', () => { - expect(getDefaultFormState(testValidator, schema, formData, schema, includeUndefinedValues)).toEqual( + expect(getDefaultFormState(testValidator, schema, formData, undefined, includeUndefinedValues)).toEqual( expected, ); }); @@ -1930,7 +1930,6 @@ export default function getDefaultFormStateTest(testValidator: TestValidatorType test('computeDefaults', () => { expect( computeDefaults(testValidator, schema, { - rootSchema: schema, rawFormData: formData, includeUndefinedValues, shouldMergeDefaultsIntoFormData: true, @@ -1944,7 +1943,6 @@ export default function getDefaultFormStateTest(testValidator: TestValidatorType testValidator, schema, { - rootSchema: schema, includeUndefinedValues, }, [ @@ -1962,7 +1960,6 @@ export default function getDefaultFormStateTest(testValidator: TestValidatorType testValidator, schema, { - rootSchema: schema, includeUndefinedValues, }, [