From bfedb77ad2a4362ea9b2e5b6022ada6ae6a3c3c1 Mon Sep 17 00:00:00 2001 From: Christian Wendt Date: Thu, 1 Jun 2023 10:56:30 -0700 Subject: [PATCH] fix 3711 anyOf/oneOf remove old fields from previous schema --- packages/core/test/oneOf.test.jsx | 2 +- .../utils/src/schema/sanitizeDataForNewSchema.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/core/test/oneOf.test.jsx b/packages/core/test/oneOf.test.jsx index 3fa1081c1c..35b3aeb0ee 100644 --- a/packages/core/test/oneOf.test.jsx +++ b/packages/core/test/oneOf.test.jsx @@ -1228,7 +1228,7 @@ describe('oneOf', () => { sinon.assert.calledWithMatch(onChange.lastCall, { formData: { - craftTypes: [{ keywords: [undefined], title: undefined, daysOfYear: undefined }], + craftTypes: [{ keywords: [undefined], title: undefined }], }, }); }); diff --git a/packages/utils/src/schema/sanitizeDataForNewSchema.ts b/packages/utils/src/schema/sanitizeDataForNewSchema.ts index 2ecba355e2..aa22845576 100644 --- a/packages/utils/src/schema/sanitizeDataForNewSchema.ts +++ b/packages/utils/src/schema/sanitizeDataForNewSchema.ts @@ -1,5 +1,7 @@ import get from 'lodash/get'; import has from 'lodash/has'; +import omitBy from 'lodash/omitBy'; +import isUndefined from 'lodash/isUndefined'; import { FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, ValidatorType } from '../types'; import { PROPERTIES_KEY, REF_KEY } from '../constants'; @@ -137,8 +139,14 @@ export default function sanitizeDataForNewSchema< }); newFormData = { - ...data, - ...removeOldSchemaData, + // remove fields from old schema and then sanitize undefined + ...omitBy( + { + ...data, + ...removeOldSchemaData, + }, + isUndefined + ), ...nestedData, }; // First apply removing the old schema data, then apply the nested data, then apply the old data keys to keep