@data-driven-forms/react-form-renderer
Version:
React Form Renderer. Data Driven Forms converts JSON form definitions into fully functional React forms.
75 lines • 2.62 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var isEmpty_1 = __importDefault(require("lodash/isEmpty"));
var convert_type_1 = __importDefault(require("./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 (!(0, isEmpty_1.default)(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 (0, convert_type_1.default)(dataType, sanitizeValue(item)); })
: (0, convert_type_1.default)(dataType, sanitizedValue);
}
if (checkEmpty(result) && typeof initial !== 'undefined') {
return onChange(clearedValue);
}
return onChange(result);
};
exports.default = enhancedOnChange;
//# sourceMappingURL=enhanced-on-change.js.map