UNPKG

yarfl

Version:

Yet Another Redux Forms Library

148 lines 5.83 kB
"use strict"; 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