UNPKG

yarfl

Version:

Yet Another Redux Forms Library

136 lines 5.83 kB
"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); var creatorFactory_1 = require("./actions/creatorFactory"); var utils_1 = require("./helpers/utils"); var validator_1 = require("./helpers/validator"); var arrayReducer_1 = require("./reducers/arrayReducer"); var formReducer_1 = require("./reducers/formReducer"); var typings_1 = require("./typings"); exports.initializeFormState = function (config, isAsync) { if (isAsync === void 0) { isAsync = false; } var name = config.name, _a = config.extra, extra = _a === void 0 ? {} : _a, _b = config.action, action = _b === void 0 ? '' : _b, _c = config.method, method = _c === void 0 ? 'POST' : _c; var fields = initFields(config.fields, config.addDefaults); var state = { action: action, name: name, method: method, fields: fields, isAsync: isAsync, extra: extra, }; return initHooks(config, state); }; var initHooks = function (config, state) { var showErrorsOnInit = config.showErrorsOnInit, validateOnInit = config.validateOnInit; if (showErrorsOnInit) { var _a = creatorFactory_1.default(config), showFormErrors = _a.showFormErrors, validateForm = _a.validateForm; var showErrorsAction = showFormErrors(true); var updated = formReducer_1.formShowErrorsReducer(config)(state, showErrorsAction); var validator = validator_1.validatorFactory(config)(state); var validateAction = validateForm(validator); return formReducer_1.formValidateReducer(config)(updated, validateAction); } if (validateOnInit) { var validator = validator_1.validatorFactory(config)(state); var validateAction = creatorFactory_1.default(config).validateForm(validator); return formReducer_1.formValidateReducer(config)(state, validateAction); } return state; }; var initFields = function (fields, addDefaults) { if (addDefaults === void 0) { addDefaults = true; } var entries = Object.entries(fields); return entries.map(function (_a) { var key = _a[0], field = _a[1]; var _b; return (_b = {}, _b[key] = initField(key, field, addDefaults), _b); }) .reduce(function (prev, curr) { return (__assign({}, prev, curr)); }); }; var initField = function (key, field, addDefaults) { var common = { key: key, focused: false, touched: false, changed: false, showErrors: false, extra: field.extra || {}, }; if (field.fields) { var fields = initFields(field.fields); if (field.multiple) { return __assign({}, common, { fieldType: typings_1.FieldType.Array, default: fields, fields: [arrayReducer_1.createNewField(key, fields, 0)] }); } return __assign({}, common, { fields: fields, fieldType: typings_1.FieldType.Parent }); } var errors = []; if (!addDefaults) { return __assign({}, common, { value: '', rules: '', errors: errors }, field); } var rules = utils_1.firstDefined(field.rules, ''); var name = utils_1.firstDefined(field.name, key); var autoComplete = utils_1.firstDefined(field.autoComplete, name); var id = utils_1.firstDefined(field.id, utils_1.kebabCase(name)); var label = utils_1.firstDefined(field.label, utils_1.titleCase(name)); var placeholder = utils_1.firstDefined(field.placeholder, label); var disabled = utils_1.firstDefined(!!field.disabled, false); var autoFocus = utils_1.firstDefined(!!field.autoFocus, false); var multiple = field.multiple; var value = utils_1.firstDefined(field.value, field.default, multiple ? [] : ''); var dfault = utils_1.firstDefined(field.default, multiple ? [] : ''); var type = utils_1.firstDefined(field.type, inputType(value)); var options = field.options ? optionMapper(field.options, id, name, key, type) : undefined; var props = __assign({}, common, { fieldType: typings_1.FieldType.Simple, value: type === 'checkbox' ? !!value : value, default: dfault, initial: value, rules: rules, name: name, id: id, type: type, label: label, placeholder: placeholder, disabled: disabled, autoFocus: autoFocus, autoComplete: autoComplete, errors: errors }); return (options ? __assign({}, props, { options: options, multiple: multiple }) : props); }; var optionMapper = function (options, id, name, key, type) { if (!options.length) { return []; } var optionType = typeof options[0]; if (optionType !== 'object' && optionType !== 'string') throw new Error("'options' for field '" + key + "' must be defined as an array of strings or objects ({ value, label })"); // 'selected' for option elements and 'checked' for radio buttons and checkboxes return options.map(function (opt) { var _a = typeof opt === 'string' ? { value: opt, label: opt } : opt, value = _a.value, label = _a.label; return { type: type, value: value, label: label, name: utils_1.camelCase(name + " " + value), id: utils_1.kebabCase(id + " " + value), }; }); }; var inputType = function (test) { switch (typeof test) { case 'string': return 'text'; case 'number': return 'number'; case 'boolean': return 'checkbox'; default: return 'text'; } }; //# sourceMappingURL=initializeState.js.map