Skip to content

Commit

Permalink
fix: experimenting with fix for rjsf-team#2708
Browse files Browse the repository at this point in the history
  • Loading branch information
dieseldjango committed Mar 1, 2022
1 parent b6a630e commit d2017b2
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 144 deletions.
141 changes: 1 addition & 140 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 10 additions & 2 deletions packages/core/src/components/fields/ObjectField.js
Expand Up @@ -60,10 +60,18 @@ class ObjectField extends Component {
isRequired(name) {
const schema = this.props.schema;
return (
Array.isArray(schema.required) && schema.required.indexOf(name) !== -1
(this.props.required || !this.isEmpty(this.props.formData)) &&
Array.isArray(schema.required) && schema.required.includes(name)
);
}

isEmpty(formData) {
return !formData || !Object.values(formData).find((v) =>
(Array.isArray(v) && v.length > 0) ||
(!Array.isArray(v) && typeof v === 'object' && v !== null && Object.keys(v).length > 0) ||
!!v);
}

onPropertyChange = (name, addedByAdditionalProperties = false) => {
return (value, errorSchema) => {
if (value === undefined && addedByAdditionalProperties) {
Expand All @@ -78,7 +86,7 @@ class ObjectField extends Component {
}
const newFormData = { ...this.props.formData, [name]: value };
this.props.onChange(
newFormData,
this.isEmpty(newFormData) ? undefined : newFormData,
errorSchema &&
this.props.errorSchema && {
...this.props.errorSchema,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/utils.js
Expand Up @@ -234,7 +234,7 @@ function computeDefaults(
switch (getSchemaType(schema)) {
// We need to recur for object schema inner default values.
case "object":
return Object.keys(schema.properties || {}).reduce((acc, key) => {
defaults = Object.keys(schema.properties || {}).reduce((acc, key) => {
// Compute the defaults for this node, with the parent defaults we might
// have from a previous run: defaults[key].
let computedDefault = computeDefaults(
Expand All @@ -249,6 +249,7 @@ function computeDefaults(
}
return acc;
}, {});
return Object.keys(defaults).length > 0 ? defaults: undefined; // TODO - only return undefined if not required

case "array":
// Inject defaults into existing array defaults
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/validate.js
Expand Up @@ -175,7 +175,7 @@ export default function validateFormData(
) {
// Include form data with undefined values, which is required for validation.
const rootSchema = schema;
formData = getDefaultFormState(schema, formData, rootSchema, true);
formData = getDefaultFormState(schema, formData, rootSchema, false);

const newMetaSchemas = !deepEquals(formerMetaSchema, additionalMetaSchemas);
const newFormats = !deepEquals(formerCustomFormats, customFormats);
Expand Down

0 comments on commit d2017b2

Please sign in to comment.