Skip to content

Commit c88d512

Browse files
committed
Fixed issue with fields inside an array can't be set to empty when a default is set
1 parent 2b5c907 commit c88d512

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-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

2425
# 5.24.1
2526

packages/utils/src/mergeDefaultsWithFormData.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ 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+
if (typeof overrideOppositeArray[idx] !== 'undefined') {
4545
return mergeDefaultsWithFormData<any>(
4646
defaultsArray[idx],
4747
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)