cosmo-ui
Version:
Common React components
82 lines • 3.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var constants_1 = require("../constants");
exports.formReducer = function (state, action) {
if (state === void 0) { state = {}; }
switch (action.type) {
case constants_1.SET_FORM_FIELD:
return setFormField(state, action);
case constants_1.DESTROY_FORM:
return destroyForm(state, action);
case constants_1.RESET_FORM:
return resetForm(state, action);
case constants_1.SUBMIT_FORM_VALID:
case constants_1.SUBMIT_FORM_INVALID:
return submitForm(state, action);
default:
return state;
}
};
var setFormField = function (state, action) {
if (action.formName) {
return tslib_1.__assign({}, state, (_a = {}, _a[action.formName] = tslib_1.__assign({}, state[action.formName], (_b = {}, _b[action.name] = action.field, _b)), _a));
}
else {
return tslib_1.__assign({}, state, (_c = {}, _c[action.name] = action.field, _c));
}
var _a, _b, _c;
};
var destroyForm = function (state, action) {
var newState = tslib_1.__assign({}, state);
delete newState[action.formName];
return newState;
};
/**
* Clear the form data for a named form
*
* @param state
* @param action
*/
var resetForm = function (state, action) {
var s = tslib_1.__assign({}, state, (_a = {}, _a[action.formName] = tslib_1.__assign({}, state[action.formName]), _a));
Object.keys(s[action.formName]).forEach(function (field) {
s[action.formName][field] = tslib_1.__assign({}, s[action.formName][field], { value: '' });
});
return s;
var _a;
};
/**
* When a form is submitted we can immediately
* make every field in the form as being submitted
*
* @param state
* @param action
*/
var submitForm = function (state, action) {
var form = state[action.formName];
if (!form) {
throw new Error("A form with the name " + action.formName + " does not exist");
}
var newState = tslib_1.__assign({}, state, (_a = {}, _a[action.formName] = tslib_1.__assign({}, form), _a));
for (var _i = 0, _b = Object.keys(form); _i < _b.length; _i++) {
var key = _b[_i];
newState[action.formName][key] = tslib_1.__assign({}, newState[action.formName][key], { submitted: true });
}
return newState;
var _a;
};
// TODO - see if these can be generalized for all fields
var setAddressLoading = function (state, action) {
return (tslib_1.__assign({}, state, (_a = {}, _a[action.args.formName] = tslib_1.__assign({}, state[action.args.formName], (_b = {}, _b[action.args.name] = tslib_1.__assign({}, state[action.args.formName][action.args.name], { loading: true }), _b)), _a)));
var _a, _b;
};
var setAddressOptions = function (state, action) {
return (tslib_1.__assign({}, state, (_a = {}, _a[action.args.formName] = tslib_1.__assign({}, state[action.args.formName], (_b = {}, _b[action.args.name] = tslib_1.__assign({}, state[action.args.formName][action.args.name], { loading: true }), _b)), _a)));
var _a, _b;
};
var setAddressErrors = function (state, action) {
return (tslib_1.__assign({}, state, (_a = {}, _a[action.args.formName] = tslib_1.__assign({}, state[action.args.formName], (_b = {}, _b[action.args.name] = tslib_1.__assign({}, state[action.args.formName][action.args.name], { loading: true }), _b)), _a)));
var _a, _b;
};
//# sourceMappingURL=form.js.map