Description
Prerequisites
- I have searched the existing issuesI understand that providing a SSCCE example is tremendously useful to the maintainers.I have read the documentationIdeally, 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.5.1
Current Behavior
If I have a first field with an enum and a second dependant field that holds an empty enum at first but should get filled when the first field gets selected, the second dependant field isn't getting filled as long as the enum of the first field is initially empty. If put an initial value in the second dependant fields enum it works fine.
This error came with the version update 5.1.1.
Expected Behavior
Update the dependant field even tough it is an empty enum first.
Steps To Reproduce
You can reproduce it in the playground with the following two schemas.
This is the working one (with an initial string in the dependant enum) (Playground link)
{
"type": "object",
"properties": {
"firstField": {
"type": "string",
"title": "First Field",
"enum": [
"Value One",
"Value Two"
]
},
"dependantField": {
"title": "Dependant Field",
"enum": [
"Select a value in First field"
],
"readOnly": true
}
},
"required": [
"firstField",
"dependantField"
],
"dependencies": {
"firstField": {
"oneOf": [
{
"properties": {
"firstField": {
"enum": [
"Value One"
]
},
"dependantField": {
"enum": [
"More Values",
"Even More Values",
"Enough"
],
"readOnly": false
}
}
},
{
"properties": {
"firstField": {
"enum": [
"Value Two"
]
},
"dependantField": {
"enum": [
"Other Values",
"Even More Other Values",
"Enough now"
],
"readOnly": false
}
}
}
]
}
}
}
And with this the one its broken since the update (empty initial enum) and wont update the second dependant field: (Playground link)
{
"type": "object",
"properties": {
"firstField": {
"type": "string",
"title": "First Field",
"enum": [
"Value One",
"Value Two"
]
},
"dependantField": {
"title": "Dependant Field",
"enum": [],
"readOnly": true
}
},
"required": [
"firstField",
"dependantField"
],
"dependencies": {
"firstField": {
"oneOf": [
{
"properties": {
"firstField": {
"enum": [
"Value One"
]
},
"dependantField": {
"enum": [
"More Values",
"Even More Values",
"Enough"
],
"readOnly": false
}
}
},
{
"properties": {
"firstField": {
"enum": [
"Value Two"
]
},
"dependantField": {
"enum": [
"Other Values",
"Even More Other Values",
"Enough now"
],
"readOnly": false
}
}
}
]
}
}
}
Environment
- OS: Debian, Ubuntun, MacOSX
- Node: 20.17.0
- npm: 10.8.2
Anything else?
I guess I'v nailed it down to this two commit:
f34a7a2
ff46301 <- its this one
And this change in the changelog:
https://github.com/rjsf-team/react-jsonschema-form/blob/main/CHANGELOG.md#551
In v5.5.0 my example is working in v5.5.1 not.
Activity
cewald commentedon Oct 30, 2024
Afaik in the change above
const isValid = validator.isValid(conditionSchema, formData, rootSchema);
returns now false and the before termvalidator.validateFormData(formData, conditionSchema)
returns true – I try to find why its considered different. FYI I'm usingajv8
as validator.heath-freenome commentedon Nov 1, 2024
The change you are pointing out was done to help improve performance since
isValid()
is simpler and uses caching better thanvalidateFormData()
. If you patch it locally back to the old implementation, does it work again? If so, maybe we can write a test to catch that issue inisValid()
and fix it?cewald commentedon Nov 1, 2024
I see – yes, if I patch it back, it is working.
heath-freenome commentedon Nov 5, 2024
Hmmm, @nickgros Any thoughts on whether we roll back this change?
nickgros commentedon Nov 5, 2024
Rolling it back seems appropriate with a test to verify that this is fixed. If someone needs the performance optimizations provided by
isValid
, it would be on them to to ensure this case still works.cewald commentedon Dec 10, 2024
Hey hey, any progress or decision?
I would be fine with a rollback ;)
heath-freenome commentedon Dec 13, 2024
@cewald Yes, let's roll it back. Are you willing to push up the PR for that?
isValid()
inretrieveSchema()
tovalidateFormData()
#4418cewald commentedon Dec 16, 2024
@heath-freenome alright no problem, i opened one: #4418