react-jsonschema-form icon indicating copy to clipboard operation
react-jsonschema-form copied to clipboard

Default value not prefilled when object with if/then is wrapped to another object

Open rap1ds opened this issue 1 year ago • 2 comments

Prerequisites

What theme are you using?

core

Version

5.x (current Playground version)

Current Behavior

I have a schema with type: object and if/then conditionally adding a new property with a default value. This works as expected. But if I wrap the whole schema in a wrapping object, the default value prefilling no longer works.

Expected Behavior

  1. Open this Playground example
  2. Click "checkbox"

Expected: A required field "foo" appears with default value "foo default value"

Actual: A required field "foo" appears with default value "foo default value"

I would expect that the same default behaviour happens even if the object is wrapped in another object.

Steps To Reproduce

  1. Open this Playground example which is the exact same schema as above but it's wrapped in a wrappingObject.
  2. Click "checkbox"

Expected: A required field "foo" appears with default value "foo default value"

Actual: A required field "foo" appears with NO default value.

Environment

- Mac
- Google Chrome Version 125.0.6422.142 (Official Build) (arm64)
- Playground

Anything else?

Playground options

Playground has multiple options that control default behaviour:

  • Populate minItems in arrays
  • allOf defaults behaviour
  • Object fields default behavior

I tried changing all these settings but none of them didn't solve the issue.

Duplicate?

Here's another open issue that looks very similar: https://github.com/rjsf-team/react-jsonschema-form/issues/3599

It's similar because in #3599 the default behaviour seems to be first as expected, but when wrapped in an object, default prefilling is not working anymore. It's different in a sense that #3599 is about allOf but this bug is about if/then/else.

Feel free to close this one if you think this is duplicate of #3599

rap1ds avatar Jun 17 '24 08:06 rap1ds

This is definitely a bug and we would appreciate a pull request to fix it. I just closed #3599 because I think that was fixed in #3969.

Interestingly, if you wrap if/then/else in allOf, it works. So that may be a useful workaround for you. See this playground link.

nickgros avatar Jun 21 '24 14:06 nickgros

Thanks for the workaround! The workaround seems to work fine when the "allOf defaults behaviour" is set to "Populate defaults with allOf"

rap1ds avatar Jun 28 '24 08:06 rap1ds