diff --git a/packages/react-form-renderer/src/form-renderer/enhanced-on-change.js b/packages/react-form-renderer/src/form-renderer/enhanced-on-change.js index b7fe0ac9e..e690e032e 100644 --- a/packages/react-form-renderer/src/form-renderer/enhanced-on-change.js +++ b/packages/react-form-renderer/src/form-renderer/enhanced-on-change.js @@ -4,10 +4,17 @@ import { dataTypes } from '../constants'; * Pick a value from event object and returns it * @param {Object|Any} event event value returned from form field */ -const sanitizeValue = event => - (typeof event === 'object' && event.target && event.target.value) - ? event.target.value - : event; +const sanitizeValue = event => { + if (typeof event === 'object' && event.target) { + if (event.target.type === 'checkbox') { + return event.target.checked; + } + + return event.target.value; + } + + return event; +}; /** * Casts string true/false to boolean diff --git a/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/array-form-component.test.js.snap b/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/array-form-component.test.js.snap index 5a6373c91..f68dbf91b 100644 --- a/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/array-form-component.test.js.snap +++ b/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/array-form-component.test.js.snap @@ -622,12 +622,12 @@ exports[`renderForm function should render array field correctly 1`] = ` } validate={Array []} > - - - - + + diff --git a/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/render-form.test.js.snap b/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/render-form.test.js.snap index 097670f25..4f73ef342 100644 --- a/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/render-form.test.js.snap +++ b/packages/react-form-renderer/src/tests/form-renderer/__snapshots__/render-form.test.js.snap @@ -1742,12 +1742,12 @@ exports[`renderForm function should render array field 1`] = ` } validate={Array []} > - - - - + + 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 new file mode 100644 index 000000000..cb1242a38 --- /dev/null +++ b/packages/react-form-renderer/src/tests/form-renderer/enhanced-on-change.test.js @@ -0,0 +1,29 @@ +import enhancedOnChange from '../../form-renderer/enhanced-on-change'; + +describe('#enhancedOnChange', () => { + it('should return value directly if event is not passed', () => { + const value = 'foo'; + expect(enhancedOnChange(undefined, value => value, value)).toEqual('foo'); + }); + + it('should return value from event if input is of type checkbox', () => { + const value = { + target: { + type: 'checkbox', + value: 'not me', + checked: false, + }, + }; + expect(enhancedOnChange(undefined, value => value, value)).toEqual(false); + }); + + it('should return value from event', () => { + const value = { + target: { + value: 'Me', + checked: 'not me', + }, + }; + expect(enhancedOnChange(undefined, value => value, value)).toEqual('Me'); + }); +});