Skip to content

Commit 978dbea

Browse files
Bug : Fields inside an array can't be set to empty when default is set. (rjsf-team#4461)
* Fixed issue with fields inside an array can't be set to empty when a default is set * Update packages/utils/src/mergeDefaultsWithFormData.ts - Reviewer feedback * Update packages/utils/src/mergeDefaultsWithFormData.ts - Fix linting --------- Co-authored-by: Heath C <[email protected]>
1 parent 3f9760b commit 978dbea

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ should change the heading of the (upcoming) version to include a major version b
2020
## @rjsf/utils
2121

2222
- switch `lodash.isEqualWith` to `fast-equals.createCustomEqual` providing `areFunctionsEqual` assuming any functions are equal.
23+
- Fixed issue with fields inside an array can't be set to empty when a default is set, fixing [#4456](https://github.com/rjsf-team/react-jsonschema-form/issues/4456)
2324
- Fixed issue with file accept attribute, fixing [#4404](https://github.com/rjsf-team/react-jsonschema-form/issues/4404).
2425

2526
## @rjsf/mui

packages/utils/src/mergeDefaultsWithFormData.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ export default function mergeDefaultsWithFormData<T = any>(
4141
const overrideOppositeArray = overrideFormDataWithDefaults ? formData : defaultsArray;
4242

4343
const mapped = overrideArray.map((value, idx) => {
44-
if (overrideOppositeArray[idx]) {
44+
// We want to explicitly make sure that the value is NOT undefined since null, 0 and empty space are valid values
45+
if (overrideOppositeArray[idx] !== undefined) {
4546
return mergeDefaultsWithFormData<any>(
4647
defaultsArray[idx],
4748
formData[idx],

packages/utils/test/mergeDefaultsWithFormData.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,38 @@ describe('mergeDefaultsWithFormData()', () => {
150150
expect(mergeDefaultsWithFormData({}, undefined, undefined, undefined, true)).toEqual(undefined);
151151
});
152152

153+
it('should deeply merge and return formData when formData is undefined and defaultSupercedesUndefined false', () => {
154+
expect(
155+
mergeDefaultsWithFormData(
156+
{
157+
arrayWithDefaults: ['Hello World'],
158+
objectWidthDefaults: {
159+
nestedField: 'Hello World!',
160+
},
161+
stringField: 'Hello World!!',
162+
},
163+
{
164+
arrayWithDefaults: [null],
165+
objectWidthDefaults: {
166+
nestedField: undefined,
167+
},
168+
stringField: undefined,
169+
nonEmptyField: 'Hello World!!!',
170+
},
171+
undefined,
172+
undefined,
173+
true
174+
)
175+
).toEqual({
176+
arrayWithDefaults: [null],
177+
objectWidthDefaults: {
178+
nestedField: undefined,
179+
},
180+
stringField: undefined,
181+
nonEmptyField: 'Hello World!!!',
182+
});
183+
});
184+
153185
it('should return default when formData is undefined and defaultSupercedesUndefined true', () => {
154186
expect(mergeDefaultsWithFormData({}, undefined, undefined, true, true)).toEqual({});
155187
});

0 commit comments

Comments
 (0)