UNPKG

@data-driven-forms/react-form-renderer

Version:

React Form Renderer. Data Driven Forms converts JSON form definitions into fully functional React forms.

70 lines 2.3 kB
import isEmpty from 'lodash/isEmpty'; import convertType from './convert-type'; /** * Pick a value from event object and returns it * @param {Object|Any} event event value returned from form field */ var sanitizeValue = function (event) { if (typeof event === 'object' && event !== null && event.target) { if (event.target.type === 'checkbox') { return event; } if (event.target.type === 'file') { return { inputValue: event.target.value, inputFiles: event.target.files, }; } return event.target.value; } return event; }; /** * Checks the value and returns undefined if its empty. Converst epmtry strings, arrays and objects. * If value is empty its overriden to undefined for further processing. * @param {Any} value Any JS variable to be check if is empty */ var checkEmpty = function (value) { if (typeof value === 'number') { return false; } if (typeof value === 'boolean') { return false; } if (typeof value === 'string' && value.length > 0) { return false; } if (value instanceof Date) { return false; } if (!isEmpty(value)) { return false; } return true; }; /** * Casts input value into selected data type */ var enhancedOnChange = function (_a, value) { var dataType = _a.dataType, onChange = _a.onChange, initial = _a.initial, clearedValue = _a.clearedValue, dirty = _a.dirty; var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } var sanitizedValue = sanitizeValue(value); var result; if (typeof sanitizedValue == 'object' && sanitizedValue !== null && sanitizedValue.target && sanitizedValue.target.type === 'checkbox') { result = sanitizedValue; } else { result = Array.isArray(sanitizedValue) ? sanitizedValue.map(function (item) { return convertType(dataType, sanitizeValue(item)); }) : convertType(dataType, sanitizedValue); } if (checkEmpty(result) && typeof initial !== 'undefined') { return onChange(clearedValue); } return onChange(result); }; export default enhancedOnChange; //# sourceMappingURL=enhanced-on-change.js.map