Skip to content

Object defaults for "additionalProperties" result in rows that cannot be deleted and have side effects when modified #3759

Open
@dd12440

Description

@dd12440

Prerequisites

  • I have searched the existing issues
    I understand that providing a SSCCE example is tremendously useful to the maintainers.
    I have read the documentation
    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:

  1. It is not possible to delete the entry (despite it being an "additional" property)
  2. Changing the key and blurring results in additional rows being generated
  3. 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:

  1. The entry would appear as it currently does
  2. The entry could be deleted
  3. The entry could have its key changed with no side effects e.g. generating additional rows

Steps To Reproduce

  1. View the shared playground here.
  2. Attempt to delete the defaulted row and observe that it is not possible
  3. Change "test-key" to "test-key2" and blur; observe the newly created row

Environment

Shared playground

Anything else?

No response

Activity

added
needs triageInitial label given, to be assigned correct labels and assigned
on Jul 10, 2023
heath-freenome

heath-freenome commented on Jul 14, 2023

@heath-freenome
Member

@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?

dd12440

dd12440 commented on Aug 29, 2023

@dd12440
Author

@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.

heath-freenome

heath-freenome commented on Aug 29, 2023

@heath-freenome
Member

@dd12440 that would be awesome

HanJaeJoon

HanJaeJoon commented on Apr 26, 2024

@HanJaeJoon
Contributor

if (isObject(formData)) {
return mergeDefaultsWithFormData<T>(defaults as T, formData, mergeExtraDefaults);
}

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'}.

added a commit that references this issue on May 3, 2024
0d8d955
Piotr-Debicki

Piotr-Debicki commented on Jun 7, 2024

@Piotr-Debicki

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?

dd12440

dd12440 commented on Jun 7, 2024

@dd12440
Author

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.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @HanJaeJoon@heath-freenome@Piotr-Debicki@dd12440

      Issue actions

        Object defaults for "additionalProperties" result in rows that cannot be deleted and have side effects when modified · Issue #3759 · rjsf-team/react-jsonschema-form