yarfl
Version:
Yet Another Redux Forms Library
80 lines • 3.83 kB
JavaScript
import creatorFactory from '../actions/creatorFactory';
import types from '../actions/types';
import { checkActionForObjectValue } from '../helpers/checkers';
import { extract } from '../helpers/utils';
import { createClearFieldReducer, createResetFieldReducer, createShowFieldErrorsReducer, createUpdateFieldReducer, createValidateFieldReducer, } from './fieldReducer';
export var createFormReducer = function (config) {
return function (state, action) {
switch (action.type) {
case types.FORM_UPDATE:
return formUpdateReducer(config)(state, action);
case types.FORM_CLEAR:
return formClearReducer(config)(state);
case types.FORM_RESET:
return formResetReducer(config)(state);
case types.FORM_SHOW_ERRORS:
return formShowErrorsReducer(config)(state, action);
case types.FORM_VALIDATE:
return formValidateReducer(config)(state, action);
default:
return state;
}
};
};
export var formUpdateReducer = function (config) { return function (state, action) {
var value = checkActionForObjectValue(action).value;
var updateActions = createUpdateActions(config)(value);
return updateActions.reduce(function (updatedState, fieldAction) {
return createUpdateFieldReducer(config)(updatedState, fieldAction);
}, state);
}; };
var createUpdateActions = function (config) {
return function (obj, parentKey) {
return Object.entries(obj).reduce(function (acc, _a) {
var fieldKey = _a[0], value = _a[1];
var key = parentKey ? parentKey + "." + fieldKey : fieldKey;
if (typeof value === 'object') {
return acc.concat(createUpdateActions(config)(value, key));
}
var action = creatorFactory(config).updateField(key, value);
return acc.concat([action]);
}, []);
};
};
var formClearReducer = function (config) { return function (state) {
var keys = Object.keys(extract(state.fields, 'key', { flatten: true }));
var clearActions = keys.map(creatorFactory(config).clearField);
return clearActions.reduce(function (updatedState, fieldAction) {
return createClearFieldReducer()(updatedState, fieldAction);
}, state);
}; };
var formResetReducer = function (config) {
return function (state) {
var keys = Object.keys(extract(state.fields, 'key', { flatten: true }));
var resetActions = keys.map(creatorFactory(config).resetField);
return resetActions.reduce(function (updatedState, fieldAction) {
return createResetFieldReducer()(updatedState, fieldAction);
}, state);
};
};
export var formShowErrorsReducer = function (config) {
return function (state, action) {
var keys = Object.keys(extract(state.fields, 'key', { flatten: true }));
var showErrors = action.showErrors;
var creator = function (key) { return creatorFactory(config).showFieldErrors(key, showErrors); };
var showErrorActions = keys.map(creator);
return showErrorActions.reduce(function (updatedState, fieldAction) {
return createShowFieldErrorsReducer()(updatedState, fieldAction);
}, state);
};
};
export var formValidateReducer = function (config) {
return function (state, action) {
var keys = Object.keys(extract(state.fields, 'key', { flatten: true }));
var validateActions = keys.map(function (key) { return creatorFactory(config).validateField(key, action.validator); });
return validateActions.reduce(function (updatedState, fieldAction) {
return createValidateFieldReducer()(updatedState, fieldAction);
}, state);
};
};
//# sourceMappingURL=formReducer.js.map