UNPKG

stapp-validate

Version:

Form validation module for stapp - modular state manager

72 lines 3.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var stapp_1 = require("stapp"); var stapp_formbase_1 = require("stapp-formbase"); var constants_1 = require("./constants"); var events_1 = require("./events"); var helpers_1 = require("./helpers"); var reducers_1 = require("./reducers"); var emptyEpic = function () { return rxjs_1.EMPTY; }; exports.validate = function (_a) { var _b = _a.validateOnInit, validateOnInit = _b === void 0 ? true : _b, _c = _a.setTouchedOnSubmit, setTouchedOnSubmit = _c === void 0 ? true : _c, _d = _a.moduleName, moduleName = _d === void 0 ? constants_1.VALIDATE : _d, rules = _a.rules; var getRules = function (state) { return typeof rules === 'function' ? rules(state) : rules; }; var mapValues = function (state, flags, fields) { var nextRules = getRules(state); var nextFields = fields || Object.keys(nextRules); return rxjs_1.from(nextFields.map(function (field) { return ({ field: field, value: state.values[field], rule: nextRules[field], flags: flags }); })); }; var validateEpic = function (event$, state$, _a) { var getState = _a.getState; var setValue$ = event$.pipe(operators_1.filter(stapp_1.select(stapp_formbase_1.setValue)), operators_1.mergeMap(function (event) { return mapValues(getState(), { onChange: true }, Object.keys(event.payload)); })); var initDone$ = validateOnInit ? event$.pipe(operators_1.filter(stapp_1.select(stapp_1.initEvent)), operators_1.mergeMap(function () { return mapValues(getState(), { onInit: true }); })) : rxjs_1.EMPTY; var revalidate$ = event$.pipe(operators_1.filter(stapp_1.select(events_1.revalidate)), operators_1.mergeMap(function (event) { return mapValues(getState(), { onRevalidate: true }, event.payload); })); return rxjs_1.merge(setValue$, revalidate$, initDone$).pipe(operators_1.filter(function (_a) { var rule = _a.rule; return !!rule; }), operators_1.groupBy(function (res) { return res.field; }), operators_1.mergeMap(function (field$) { return field$.pipe(operators_1.switchMap(function (res) { return helpers_1.runValidation(getState(), res.field, res.rule, res.flags); })); })); }; // Set all fields that have validation rules as touched var setTouchedOnSubmitEpic = setTouchedOnSubmit ? stapp_formbase_1.submit.epic(function (submit$, _, _a) { var getState = _a.getState; return submit$.pipe(operators_1.map(function () { var fields = Object.keys(getRules(getState())); return stapp_formbase_1.setTouched(fields.reduce(function (result, field) { result[field] = true; return result; }, {})); })); }) : emptyEpic; return { name: moduleName, state: { validating: reducers_1.validateReducer }, epic: stapp_1.combineEpics([validateEpic, setTouchedOnSubmitEpic]), dependencies: [stapp_formbase_1.FORM_BASE], useGlobalObservableConfig: false }; }; //# sourceMappingURL=validate.js.map