biro
Version:
redux + material ui forms
101 lines (71 loc) • 2.84 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {return typeof obj;} : function (obj) {return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;};exports.
process_schema = process_schema;exports.
generate_meta = generate_meta; // process the list of field definitions provided
// turn strings into name=XXX,type=text
function process_schema(fields) {fields = fields || [];return fields.map(function (field) {var ret = typeof field === 'string' ? { name: field } : field;ret.type = ret.type || 'text';ret.title = ret.title || ret.name.replace(/^\w/, function (c) {return c.toUpperCase();});return ret;});} // get the calculated meta data
function generate_meta(meta, data, schema, validate) {// initialize the meta data
if (!meta) {meta = {
valid: true,
dirty: false,
changed: false,
olddata: data || {},
fields: {} };
} else
{
meta = JSON.parse(JSON.stringify(meta));
}
var olddata = meta.olddata || {};
// loop each field in the form and initialize it's field
// entry as well as apply schema validation
schema.forEach(function (field) {
var error = null;
var valid = true;
var value = data[field.name];
var oldvalue = olddata[field.name];
if (typeof field.validate === 'function') {
var error = field.validate(value);
error = typeof error === 'string' ? error : null;
}
var entry = meta.fields[field.name] || {};
if (error) {
valid = false;
entry.error = error;
} else
{
delete entry.error;
}
var changed = oldvalue != value;
entry.valid = valid;
entry.changed = changed;
entry.dirty = entry.dirty || false;
meta.fields[field.name] = entry;
});
// apply the all valiation function
if (typeof validate === 'function') {
var allErrors = validate(data, meta);
if ((typeof allErrors === 'undefined' ? 'undefined' : _typeof(allErrors)) === 'object') {
Object.keys(allErrors || {}).forEach(function (key) {
meta.fields[key].valid = false;
meta.fields[key].error = allErrors[key];
});
}
}
// work out the global dirty and valid properties
var allValid = true;
var allDirty = false;
var allChanged = false;
Object.keys(meta.fields || {}).forEach(function (key) {
var entry = meta.fields[key];
if (!entry.valid) allValid = false;
if (entry.dirty) allDirty = true;
if (entry.changed) allChanged = true;
});
meta.valid = allValid;
meta.dirty = allDirty;
meta.changed = allChanged;
return meta;
}
var api = {
process_schema: process_schema,
generate_meta: generate_meta };exports.default =
api;
;