Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Empty enum is blocking dependency after v5.5.1 #4357

Open
4 tasks done
cewald opened this issue Oct 30, 2024 · 5 comments
Open
4 tasks done

Empty enum is blocking dependency after v5.5.1 #4357

cewald opened this issue Oct 30, 2024 · 5 comments

Comments

@cewald
Copy link

cewald commented Oct 30, 2024

Prerequisites

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.

@cewald cewald added bug needs triage Initial label given, to be assigned correct labels and assigned labels Oct 30, 2024
@cewald
Copy link
Author

cewald commented Oct 30, 2024

Afaik in the change above const isValid = validator.isValid(conditionSchema, formData, rootSchema); returns now false and the before term validator.validateFormData(formData, conditionSchema) returns true – I try to find why its considered different. FYI I'm using ajv8 as validator.

@heath-freenome
Copy link
Member

Afaik in the change above const isValid = validator.isValid(conditionSchema, formData, rootSchema); returns now false and the before term validator.validateFormData(formData, conditionSchema) returns true – I try to find why its considered different. FYI I'm using ajv8 as validator.

The change you are pointing out was done to help improve performance since isValid() is simpler and uses caching better than validateFormData(). 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 in isValid() and fix it?

@heath-freenome heath-freenome added help wanted awaiting response and removed needs triage Initial label given, to be assigned correct labels and assigned labels Nov 1, 2024
@cewald
Copy link
Author

cewald commented Nov 1, 2024

I see – yes, if I patch it back, it is working.

@heath-freenome
Copy link
Member

Hmmm, @nickgros Any thoughts on whether we roll back this change?

@nickgros
Copy link
Contributor

nickgros commented 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants