react-hooks-dynamic-form
Version:
Dynamic form with react hooks
80 lines (79 loc) • 2.92 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var field_1 = require("./field");
/**
* Generate form data by normalizing fields settings array
* @param fields Array field settings
* @param remoteValues fields values from parent
*/
exports.generateFormData = function (fields, defaultSettings, remoteValues) {
var allFields = fields.reduce(function (acc, field) { return acc.concat(field.type === "fieldset" ? field.children || [] : field); }, []);
return allFields.reduce(function (acc, fieldSettings) {
var _a;
// Precheck fieldSettings
var name = fieldSettings.name;
if (!name) {
return acc;
}
// Merge default all fields settings with specific field settings
var errorMessagesSettings = Object.assign({}, defaultSettings && defaultSettings.errorMessages, fieldSettings.errorMessages);
var field = new field_1.Field(__assign(__assign(__assign(__assign({}, defaultSettings), fieldSettings), { errorMessages: errorMessagesSettings }), (remoteValues && remoteValues[name] ? { value: remoteValues[name] } : {})));
return __assign(__assign({}, acc), (_a = {}, _a[field.name] = field, _a));
}, {});
};
/**
* Update formData object with modified field value
* @param formData current form data object
* @param fieldName field name
* @param newValue field new value
* @returns updated formData
*/
exports.updateFormField = function (formData, fieldName, newValue) {
if (!formData[fieldName]) {
return formData;
}
var field = formData[fieldName];
field.setInputValue(newValue);
if (field.validateOnChange) {
field.validate(formData);
}
// Immutable to allow update
return __assign({}, formData);
};
/**
* Validate field, update field state (pristine, error)
* @param fieldName field name
* @param formData current form data object
* @returns updated formData
*/
exports.validateField = function (formData, fieldName) {
formData[fieldName].validate(formData);
return __assign({}, formData);
};
/**
* Validate form, update form state
* @param formData current form data object
*/
exports.validateForm = function (formData) {
var isValid = true;
for (var _i = 0, _a = Object.values(formData); _i < _a.length; _i++) {
var field = _a[_i];
isValid = field.validate(formData) && isValid;
}
return {
isValid: isValid,
// Immutable to allow update
updatedData: __assign({}, formData),
};
};