UNPKG

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

Version:

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

107 lines (82 loc) 3.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _isEmpty = _interopRequireDefault(require("lodash/isEmpty")); var _convertType = _interopRequireDefault(require("./convert-type")); var _excluded = ["dataType", "onChange", "initial", "clearedValue", "dirty"]; /** * Pick a value from event object and returns it * @param {Object|Any} event event value returned from form field */ var sanitizeValue = function sanitizeValue(event) { if ((0, _typeof2["default"])(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 checkEmpty(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 (!(0, _isEmpty["default"])(value)) { return false; } return true; }; /** * Casts input value into selected data type */ var enhancedOnChange = function enhancedOnChange(_ref, value) { var dataType = _ref.dataType, onChange = _ref.onChange, initial = _ref.initial, clearedValue = _ref.clearedValue, dirty = _ref.dirty, rest = (0, _objectWithoutProperties2["default"])(_ref, _excluded); var sanitizedValue = sanitizeValue(value); var result; if ((0, _typeof2["default"])(sanitizedValue) == 'object' && sanitizedValue !== null && sanitizedValue.target && sanitizedValue.target.type === 'checkbox') { result = sanitizedValue; } else { result = Array.isArray(sanitizedValue) ? sanitizedValue.map(function (item) { return (0, _convertType["default"])(dataType, sanitizeValue(item)); }) : (0, _convertType["default"])(dataType, sanitizedValue); } for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { args[_key - 2] = arguments[_key]; } if (checkEmpty(result) && typeof initial !== 'undefined') { return onChange.apply(void 0, [clearedValue].concat(args)); } return onChange.apply(void 0, [result].concat(args)); }; var _default = enhancedOnChange; exports["default"] = _default;