diff --git a/CHANGELOG.md b/CHANGELOG.md index d806df53b6..a1b14c4b20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ should change the heading of the (upcoming) version to include a major version b --> # 6.1.1 +## @rjsf/core + +- Updated `ObjectField` to get errors and formData by wrapping `name` in brackets to prevent names that have dots in them incorrectly getting data from a lower level, fixing [#3846](https://github.com/rjsf-team/react-jsonschema-form/issues/3846) + ## @rjsf/shadcn - Updated `package.json` to copy css files to new `resources` directory diff --git a/packages/core/src/components/fields/ObjectField.tsx b/packages/core/src/components/fields/ObjectField.tsx index df36b2b710..8400fbfb14 100644 --- a/packages/core/src/components/fields/ObjectField.tsx +++ b/packages/core/src/components/fields/ObjectField.tsx @@ -367,9 +367,9 @@ export default function ObjectField(schema, name)} schema={get(schema, [PROPERTIES_KEY, name], {}) as S} uiSchema={fieldUiSchema} - errorSchema={get(errorSchema, name)} + errorSchema={get(errorSchema, [name])} fieldPathId={childFieldPathId} - formData={get(formData, name)} + formData={get(formData, [name])} handleKeyRename={handleKeyRename} handleRemoveProperty={handleRemoveProperty} addedByAdditionalProperties={addedByAdditionalProperties} diff --git a/packages/core/test/ObjectField.test.jsx b/packages/core/test/ObjectField.test.jsx index 8019d1e908..3e3ea0f260 100644 --- a/packages/core/test/ObjectField.test.jsx +++ b/packages/core/test/ObjectField.test.jsx @@ -468,6 +468,41 @@ describe('ObjectField', () => { errorMessages = node.querySelectorAll('#root_foo__error'); expect(errorMessages).to.have.length(0); }); + + it('should not copy errors when name has dotted-path similar to real property', () => { + const schema = { + type: 'object', + properties: { + 'Foo.Bar': { + type: 'string', + minLength: 5, + }, + Foo: { + type: 'object', + properties: { + Bar: { + type: 'string', + minLength: 2, + }, + }, + }, + }, + }; + const formData = { + 'Foo.Bar': 'FooBar', + Foo: { + Bar: 'B', + }, + }; + const { node } = createFormComponent({ schema, formData }); + // click submit + submitForm(node); + console.log(node.innerHTML); + const fooDotBarErrors = node.querySelectorAll('#root_Foo.Bar__error'); + expect(fooDotBarErrors).to.have.length(0); + const fooBarErrors = node.querySelectorAll('#root_Foo_Bar__error'); + expect(fooBarErrors).to.have.length(1); + }); }); describe('fields ordering', () => {