yarfl
Version:
Yet Another Redux Forms Library
94 lines • 4.42 kB
JavaScript
;
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 redux_1 = require("redux");
var ThunkFactory_1 = require("./actions/ThunkFactory");
var connect_1 = require("./connect");
var FormProvider_1 = require("./FormProvider");
var checkers_1 = require("./helpers/checkers");
var utils_1 = require("./helpers/utils");
var validator_1 = require("./helpers/validator");
var initializeState_1 = require("./initializeState");
var reducers_1 = require("./reducers");
function init() {
var configs = [];
for (var _i = 0; _i < arguments.length; _i++) {
configs[_i] = arguments[_i];
}
checkers_1.checkConfigs(configs);
var forms = configs.map(initForm);
var mergedForms = forms.reduce(function (acc, curr) {
var _a, _b, _c, _d, _e;
// tslint:disable-next-line:no-shadowed-variable
var initialState = curr.initialState, reducer = curr.reducer, formProvider = curr.formProvider, config = curr.config, c = curr.connect, actionCreators = curr.actionCreators;
var name = config.name;
return utils_1.mergeDeep(acc, {
initialState: initialState,
reducers: (_a = {}, _a[name] = reducer, _a),
formProviders: (_b = {}, _b[name] = formProvider, _b),
config: (_c = {}, _c[name] = config, _c),
connectors: (_d = {}, _d[name] = c, _d),
actionCreators: (_e = {}, _e[name] = actionCreators, _e),
});
}, {});
var _a = mergedForms, reducers = _a.reducers, connectors = _a.connectors, formProviders = _a.formProviders;
var connect = redux_1.compose.apply(void 0, Object.values(connectors));
Object.entries(connectors).forEach(function (_a) {
var key = _a[0], connector = _a[1];
connect[key] = connector;
});
// tslint:disable-next-line:variable-name
var FormProvider = connect(FormProvider_1.FormProviderComponent);
Object.entries(formProviders).forEach(function (_a) {
var key = _a[0], formProvider = _a[1];
FormProvider[key] = formProvider;
});
return {
initialState: mergedForms.initialState,
config: mergedForms.config,
connect: connect,
reducer: redux_1.combineReducers(reducers),
FormProvider: FormProvider,
actionCreators: mergedForms.actionCreators,
};
}
exports.init = init;
var initForm = function (config) {
var _a;
var customRules = config.customRules, errorMessages = config.errorMessages;
var isAsync = customRules && customRules.length
? validator_1.registerCustomRules(customRules)
: false;
if (errorMessages) {
validator_1.reigsterErrorMessages(errorMessages);
}
var configWithDefaults = addDefaultsToConfig(config);
var initialFormState = initializeState_1.initializeFormState(configWithDefaults, isAsync);
var reducer = reducers_1.createReducer(configWithDefaults, initialFormState);
var connect = connect_1.connectDirectly(configWithDefaults);
var formProvider = connect(FormProvider_1.FormProviderComponent);
// TODO: include option to return selectors
var actionCreators = new ThunkFactory_1.default(configWithDefaults).getThunks();
var initialState = (_a = {}, _a[config.name] = initialFormState, _a);
return {
initialState: initialState,
reducer: reducer,
connect: connect,
formProvider: formProvider,
config: configWithDefaults,
actionCreators: actionCreators,
};
};
var addDefaultsToConfig = function (config) {
return __assign({
// useLang?: string;
method: 'POST', customRules: [], errorMessages: {}, validateOnInit: true, validateOnFocus: false, validateOnBlur: true, validateOnChange: true, validateOnClear: true, validateOnReset: true, validateOnAdd: true, validateOnDelete: true, showErrorsOnInit: false, showErrorsOnFocus: false, showErrorsOnBlur: true, showErrorsOnChange: false, showErrorsOnClear: false, showErrorsOnReset: false, autoParseNumbers: true, skipDefaults: false, mapState: function (state) { return state[config.name]; } }, config);
};
//# sourceMappingURL=init.js.map