yarfl
Version:
Yet Another Redux Forms Library
91 lines • 4.26 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;
};
import { combineReducers, compose } from 'redux';
import ThunkFactory from './actions/ThunkFactory';
import { connectDirectly } from './connect';
import { FormProviderComponent } from './FormProvider';
import { checkConfigs } from './helpers/checkers';
import { mergeDeep } from './helpers/utils';
import { registerCustomRules, reigsterErrorMessages } from './helpers/validator';
import { initializeFormState } from './initializeState';
import { createReducer } from './reducers';
export function init() {
var configs = [];
for (var _i = 0; _i < arguments.length; _i++) {
configs[_i] = arguments[_i];
}
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 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 = 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(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: combineReducers(reducers),
FormProvider: FormProvider,
actionCreators: mergedForms.actionCreators,
};
}
var initForm = function (config) {
var _a;
var customRules = config.customRules, errorMessages = config.errorMessages;
var isAsync = customRules && customRules.length
? registerCustomRules(customRules)
: false;
if (errorMessages) {
reigsterErrorMessages(errorMessages);
}
var configWithDefaults = addDefaultsToConfig(config);
var initialFormState = initializeFormState(configWithDefaults, isAsync);
var reducer = createReducer(configWithDefaults, initialFormState);
var connect = connectDirectly(configWithDefaults);
var formProvider = connect(FormProviderComponent);
// TODO: include option to return selectors
var actionCreators = new ThunkFactory(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