biro
Version:
redux + material ui forms
114 lines (85 loc) • 2.87 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = update;
var _form = require('./actions/form');
var initialState = {};
function getObject(val) {
return Object.assign({}, val || {});
}
function update() {
var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
var action = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
switch (action.type) {
case _form.BIRO_FIELD_UPDATE:
var formName = action.formname;
var fieldName = action.fieldname;
var formState = getObject(state[formName]);
var data = getObject(formState.data);
var meta = getObject(formState.meta);
data[fieldName] = action.value;
meta[fieldName] = {
error: action.error || false,
dirty: action.dirty || false
};
Object.keys(action.errors || {}).forEach(function (key) {
var fieldmeta = getObject(meta[key]);
fieldmeta.error = action.errors[key];
meta[key] = fieldmeta;
});
formState.data = data;
formState.meta = meta;
formState.has_validated_all = false;
var ret = getObject(state);
ret[formName] = formState;
return ret;
case _form.BIRO_RESET_FORM:
var formName = action.formname;
var formData = action.data;
var formState = getObject(state[formName]);
formState = {
data: formData || {},
meta: {}
};
formState.has_validated_all = false;
var ret = getObject(state);
ret[formName] = formState;
return ret;
// flag the form as needing a forced validation
case _form.BIRO_VALIDATE_FORM:
var formName = action.formname;
var formState = getObject(state[formName]);
formState.force_validate = true;
formState.has_validated_all = false;
var ret = getObject(state);
ret[formName] = formState;
return ret;
// we have the results from the forced validation
// dont forget to reset the flag
case _form.BIRO_VALIDATE_UPDATE:
var formName = action.formname;
var formState = getObject(state[formName]);
var meta = getObject(formState.meta);
Object.keys(action.errors || {}).forEach(function (key) {
meta[key] = {
dirty: true,
error: action.errors[key]
};
});
formState.meta = meta;
delete formState.force_validate;
formState.has_validated_all = true;
var ret = getObject(state);
ret[formName] = formState;
var isValid = Object.keys(meta || {}).map(function (key) {
return meta[key].error;
}).filter(function (e) {
return e && typeof e === 'string';
}).length > 0 ? false : true;
formState.valid = isValid;
return ret;
default:
return state;
}
}
;