From bdac9ad9827457e2327c6cf330369177a6d3f630 Mon Sep 17 00:00:00 2001 From: mohith2883 <88938356+mohith2883@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:17:12 +0530 Subject: [PATCH] fix(enhancedOnChange): handle empty string clearedValue and update tests --- .../form-renderer/enhanced-on-change.test.js | 28 ++++++++++++------- .../src/use-field-api/enhanced-on-change.js | 2 +- .../src/examples/components/cleared-value.js | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/react-form-renderer/src/tests/form-renderer/enhanced-on-change.test.js b/packages/react-form-renderer/src/tests/form-renderer/enhanced-on-change.test.js index 6c68387ab..89f67cf41 100644 --- a/packages/react-form-renderer/src/tests/form-renderer/enhanced-on-change.test.js +++ b/packages/react-form-renderer/src/tests/form-renderer/enhanced-on-change.test.js @@ -37,7 +37,7 @@ describe('#enhancedOnChange', () => { type: 'checkbox', }, }; - expect(enhancedOnChange({ onChange: (value) => value, clearedValue, initial }, valueFalse)).toEqual(valueFalse); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, valueFalse)).toEqual(valueFalse); const valueTrue = { target: { @@ -45,7 +45,7 @@ describe('#enhancedOnChange', () => { type: 'checkbox', }, }; - expect(enhancedOnChange({ onChange: (value) => value, clearedValue, initial }, valueTrue)).toEqual(valueTrue); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, valueTrue)).toEqual(valueTrue); }); it('should correctly convert array datatype from strings to integers', () => { @@ -61,39 +61,47 @@ describe('#enhancedOnChange', () => { it('should set delete value after sending empty string value', () => { const value = undefined; - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(clearedValue); - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, '')).toEqual(clearedValue); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(clearedValue); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, '')).toEqual(clearedValue); }); it('should not set delete value after sending date', () => { const value = new Date(2021, 7, 20); - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(value); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(value); }); it('should not set delete value after sending number 0', () => { const value = 0; - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(value); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(value); }); it('should set delete value after sending empty array', () => { const value = []; - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(clearedValue); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(clearedValue); }); it('should set delete value after sending empty object', () => { const value = {}; - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(clearedValue); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(clearedValue); }); it('should not set delete value after sending array', () => { const value = [1, 2, 'foo']; - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(value); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(value); }); it('should not set delete value after sending object', () => { const value = { foo: 'bar' }; - expect(enhancedOnChange({ onChange: (value) => value, initial, clearedValue }, value)).toEqual(value); + expect(enhancedOnChange({ onChange: (value) => value, clearedValue }, value)).toEqual(value); }); + it('should keep empty string when clearedValue is empty string', () => { + const clearedValue = ''; + const value = undefined; + const onChange = jest.fn(); + enhancedOnChange({ onChange, clearedValue }, value); + expect(onChange).toHaveBeenCalledWith(''); + }); + }); describe('#input type file', () => { diff --git a/packages/react-form-renderer/src/use-field-api/enhanced-on-change.js b/packages/react-form-renderer/src/use-field-api/enhanced-on-change.js index 337613e2e..409829cf8 100644 --- a/packages/react-form-renderer/src/use-field-api/enhanced-on-change.js +++ b/packages/react-form-renderer/src/use-field-api/enhanced-on-change.js @@ -68,7 +68,7 @@ const enhancedOnChange = ({ dataType, onChange, initial, clearedValue, dirty, .. : convertType(dataType, sanitizedValue); } - if (checkEmpty(result) && typeof initial !== 'undefined') { + if (checkEmpty(result)) { return onChange(clearedValue, ...args); } diff --git a/packages/react-renderer-demo/src/examples/components/cleared-value.js b/packages/react-renderer-demo/src/examples/components/cleared-value.js index 63d18c0a2..3a03207d5 100644 --- a/packages/react-renderer-demo/src/examples/components/cleared-value.js +++ b/packages/react-renderer-demo/src/examples/components/cleared-value.js @@ -49,6 +49,6 @@ const ClearedValueExample = () => { ); }; -ClearedValueExample.displayName = 'Cleard value example'; +ClearedValueExample.displayName = 'Cleared value example'; export default ClearedValueExample;