diff --git a/packages/ra-core/src/form/sanitizeEmptyValues.spec.ts b/packages/ra-core/src/form/sanitizeEmptyValues.spec.ts index 97f5ec11f12..355d765495f 100644 --- a/packages/ra-core/src/form/sanitizeEmptyValues.spec.ts +++ b/packages/ra-core/src/form/sanitizeEmptyValues.spec.ts @@ -45,4 +45,14 @@ describe('sanitizeEmptyValues', () => { sanitizeEmptyValues({ obj: { foo: null, foo2: 2 } }, { obj }) ).toEqual({ obj: { foo: { bar: 1 }, foo2: null } }); }); + it("should not ignore initial value when it's not of the same type", () => { + const initialValues = { a: 'foobar' }; + const values = { a: { hello: 'world' } }; + expect(sanitizeEmptyValues(initialValues, values)).toEqual({ + a: { hello: 'world' }, + }); + expect(sanitizeEmptyValues(values, initialValues)).toEqual({ + a: 'foobar', + }); + }); }); diff --git a/packages/ra-core/src/form/sanitizeEmptyValues.ts b/packages/ra-core/src/form/sanitizeEmptyValues.ts index 8fd1871b8e5..0b54cdb2d05 100644 --- a/packages/ra-core/src/form/sanitizeEmptyValues.ts +++ b/packages/ra-core/src/form/sanitizeEmptyValues.ts @@ -20,6 +20,7 @@ const sanitizeEmptyValues = (initialValues: object, values: object) => { acc[key] = values[key]; } else if ( typeof values[key] === 'object' && + typeof initialValues[key] === 'object' && values[key] !== null ) { acc[key] = sanitizeEmptyValues(initialValues[key], values[key]);