yarfl
Version:
Yet Another Redux Forms Library
148 lines • 5.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var types_1 = require("../actions/types");
var checkers_1 = require("../helpers/checkers");
var utils_1 = require("../helpers/utils");
exports.createFieldReducer = function (config) {
return function (state, action) {
var type = action.type;
switch (type) {
case types_1.default.FIELD_UPDATE:
case types_1.default.FIELD_FOCUSED:
case types_1.default.FIELD_BLURRED:
case types_1.default.FIELD_CLEAR:
case types_1.default.FIELD_RESET:
case types_1.default.FIELD_VALIDATE:
case types_1.default.FIELD_SHOW_ERRORS:
break;
default:
return state;
}
var actionWithKey = checkers_1.checkActionForKey(action);
switch (type) {
case types_1.default.FIELD_UPDATE:
var actionWithInputValue = checkers_1.checkActionForInputValue(action);
return exports.createUpdateFieldReducer(config)(state, actionWithInputValue);
case types_1.default.FIELD_FOCUSED:
return createFocusFieldReducer()(state, actionWithKey);
case types_1.default.FIELD_BLURRED:
return createBlurFieldReducer()(state, actionWithKey);
case types_1.default.FIELD_CLEAR:
return exports.createClearFieldReducer()(state, actionWithKey);
case types_1.default.FIELD_RESET:
return exports.createResetFieldReducer()(state, actionWithKey);
case types_1.default.FIELD_VALIDATE:
// TODO
return exports.createValidateFieldReducer()(state, actionWithKey);
case types_1.default.FIELD_SHOW_ERRORS:
// TODO
return exports.createShowFieldErrorsReducer()(state, actionWithKey);
default:
return state;
}
};
};
var parseValue = function (config) { return function (state) { return function (key, value) {
var typeOfValue = typeof value;
var _a = (utils_1.selectField(config, key, true) || {}).setter, setter = _a === void 0 ? false : _a;
if (setter) {
return setter(value);
}
if (typeOfValue === 'number') {
return value;
}
// TODO: make fields part of the state
var hasTypeNumber = utils_1.selectField(state, key).type === 'number';
if (!hasTypeNumber) {
return value;
}
var autoParseNumbers = config.autoParseNumbers;
if (!autoParseNumbers) {
return value;
}
if (typeOfValue === 'string') {
return parseFloat(value);
}
if (typeOfValue === 'boolean') {
return value ? 1 : 0;
}
return utils_1.throwError("Could not parse value for " + key + " to number. A value of type " + typeOfValue + " was given.");
}; }; };
exports.createUpdateFieldReducer = function (config) {
return function (state, action) {
var key = action.key, value = action.value;
var fieldPath = utils_1.parseKey(key);
var parsedValue = parseValue(config)(state)(key, value);
var updatedValue = utils_1.setInWithKey(state, key, 'value', parsedValue);
return fieldPath.length > 1
? utils_1.mergeUp(updatedValue, key, {
changed: true,
touched: true,
})
: utils_1.mergeIn(updatedValue, key, {
changed: true,
touched: true,
});
};
};
var createFocusFieldReducer = function () {
return function (state, action) {
var key = checkers_1.checkActionForKey(action).key;
return key.includes('.') ?
utils_1.mergeUp(state, key, { focused: true }) :
utils_1.setInWithPath(state, ['fields', key, 'focused'], true);
};
};
var createBlurFieldReducer = function () {
return function (state, action) {
var key = action.key;
return key.includes('.')
? utils_1.mergeUp(state, key, {
focused: false,
touched: true,
})
: utils_1.mergeIn(state, key, {
focused: false,
touched: true,
});
};
};
exports.createClearFieldReducer = function () {
return function (state, action) {
var key = action.key;
var _a = utils_1.selectField(state, key), multiple = _a.multiple, initial = _a.initial, changed = _a.changed;
var value = multiple ? [] : '';
return utils_1.mergeIn(state, key, {
value: value,
changed: changed || value !== initial,
});
};
};
exports.createResetFieldReducer = function () {
return function (state, action) {
var key = action.key;
var dfault = utils_1.selectField(state, key).default;
var valueUpdated = utils_1.setInWithKey(state, key, 'value', dfault);
return key.includes('.')
? utils_1.mergeUp(valueUpdated, key, {
changed: false,
touched: false,
showErrors: false,
})
: utils_1.mergeIn(valueUpdated, key, {
changed: false,
touched: false,
showErrors: false,
});
};
};
exports.createValidateFieldReducer = function () { return function (state, action) {
var key = action.key, validator = action.validator;
var fieldErrors = validator.errors.get(key);
return utils_1.setInWithKey(state, key, 'errors', fieldErrors);
}; };
exports.createShowFieldErrorsReducer = function () { return function (state, action) {
var key = action.key, showErrors = action.showErrors;
return utils_1.setInWithKey(state, key, 'showErrors', showErrors);
}; };
//# sourceMappingURL=fieldReducer.js.map