react-jsonschema-form
react-jsonschema-form copied to clipboard
Object defaults for "additionalProperties" result in rows that cannot be deleted and have side effects when modified
Prerequisites
- [X] I have searched the existing issues
- [X] I understand that providing a SSCCE example is tremendously useful to the maintainers.
- [X] I have read the documentation
- [x] Ideally, I'm providing a sample JSFiddle, Codesandbox.io or preferably a shared playground link demonstrating the issue.
What theme are you using?
mui
Version
5.9.0
Current Behavior
For an object type, default values are seemingly assumed to map to "properties" rather than "additionalProperties," or at the very least, mapping them to "additionalProperties" does not seem to work as expected. Take the following JSONSchema example:
{
"title": "Test Defaults",
"default": {
"test-key": "test-value"
},
"description": "A simple form with additional properties example.",
"type": "object",
"additionalProperties": {
"type": "string"
}
}
As the linked playground shows, when the form renders, it does render with an entry matching the "test-key" entry in the default. However, the following issues are present:
- It is not possible to delete the entry (despite it being an "additional" property)
- Changing the key and blurring results in additional rows being generated
- The initial key remains in formData but does not appear in the form anymore
Expected Behavior
Any object key specified within the default object should be understood to be an "additional" property if it does not match some property specified in "properties". Thus, the following conditions would hold:
- The entry would appear as it currently does
- The entry could be deleted
- The entry could have its key changed with no side effects e.g. generating additional rows
Steps To Reproduce
- View the shared playground here.
- Attempt to delete the defaulted row and observe that it is not possible
- Change "test-key" to "test-key2" and blur; observe the newly created row
Environment
Shared playground
Anything else?
No response
@dd12440 Wow! great bug find. Given how little time us few maintainers get to spend on the project (we volunteer a few hours a week generally), we could really use some help fixing this. Is this something you can help us with?
@heath-freenome, I'm going to plan to try to find time to prioritize this. With that said, if anyone else is experiencing this issue and is motivated to address it, then there will be no complaints from me.
@dd12440 that would be awesome
https://github.com/rjsf-team/react-jsonschema-form/blob/ef5afed2e86947c8b9d959a87e4749d31098d508/packages/utils/src/schema/getDefaultFormState.ts#L472-L474
When the above code called immediately after changing the form, the formData value come as { test-key1: 'test-value' }.
But default value ({ "test-key": "test-value" }) is still in defaults.
The result of merging the two values (formData and defaults) is {test-key: 'test-value', test-key1: 'test-value'}.
Any update on this? I just ran into the same issue. Looks like onChange is regenerating the defaults and merging them every time something changes (edit/remove). Is that expected behavior?
My only update here is that I have not and (unfortunately) do not expect to be able to work on this in the foreseeable future. If someone else has time, this would certainly be a major improvement to the library.