UNPKG

yarfl

Version:

Yet Another Redux Forms Library

223 lines 10.7 kB
import { selectField } from '../helpers/utils'; import { asyncValidatorFactory, validatorFactory } from '../helpers/validator'; import creatorFactory from './creatorFactory'; import types from './types'; var shouldValidateFactory = function (config) { return function (action) { var validateOnFocus = config.validateOnFocus, validateOnBlur = config.validateOnBlur, validateOnChange = config.validateOnChange, validateOnClear = config.validateOnClear, validateOnReset = config.validateOnReset, validateOnAdd = config.validateOnAdd, validateOnDelete = config.validateOnDelete; switch (action.type) { case types.FIELD_FOCUSED: return validateOnFocus; case types.FIELD_BLURRED: return validateOnBlur; case types.FORM_UPDATE: case types.FIELD_UPDATE: return validateOnChange; case types.FORM_CLEAR: case types.FIELD_CLEAR: return validateOnClear; case types.FORM_RESET: case types.FIELD_RESET: return validateOnReset; case types.ARRAY_FIELD_ADD: return validateOnAdd; case types.ARRAY_FIELD_DELETE: return validateOnDelete; case types.FORM_SHOW_ERRORS: case types.FIELD_SHOW_ERRORS: case types.FORM_VALIDATE: case types.FIELD_VALIDATE: return true; default: return false; } }; }; var shouldShowErrorsFactory = function (config) { return function (action) { var showErrorsOnFocus = config.showErrorsOnFocus, showErrorsOnBlur = config.showErrorsOnBlur, showErrorsOnChange = config.showErrorsOnChange, showErrorsOnClear = config.showErrorsOnClear, showErrorsOnReset = config.showErrorsOnReset; switch (action.type) { case types.FIELD_FOCUSED: return showErrorsOnFocus; case types.FIELD_BLURRED: return showErrorsOnBlur; case types.FORM_UPDATE: case types.FIELD_UPDATE: return showErrorsOnChange; case types.FORM_CLEAR: case types.FIELD_CLEAR: return showErrorsOnClear; case types.FORM_RESET: case types.FIELD_RESET: return showErrorsOnReset; case types.FORM_SHOW_ERRORS: case types.FIELD_SHOW_ERRORS: return true; default: return false; } }; }; var ThunkFactory = /** @class */ (function () { function ThunkFactory(config) { var _this = this; this.validateForm = function () { return function (dispatch, getState) { var formState = _this.selector(getState); if (formState.isAsync) { return _this.createValidatorAsync(formState) .then(function (validator) { return dispatch(_this.creators.validateForm(validator)); }); } return dispatch(_this.creators.validateForm(_this.createValidator(formState))); }; }; this.validateField = function (key) { return function (dispatch, getState) { var formState = _this.selector(getState); if (formState.isAsync) { return _this.createValidatorAsync(formState) .then(function (validator) { return dispatch(_this.creators.validateField(key, validator)); }); } dispatch(_this.creators.validateField(key, _this.createValidator(formState))); }; }; this.postAction = function (action) { return function (dispatch) { var key = action.key; if (_this.shouldShowErrors(action)) { if (key) { dispatch(_this.creators.showFieldErrors(key, true)); } else { dispatch(_this.creators.showFormErrors(true)); } } if (_this.shouldValidate(action)) { if (key) { return dispatch(_this.validateField(key)); } return dispatch(_this.validateForm()); } }; }; this.getThunks = function () { return ({ updateForm: function (value) { return function (dispatch) { var action = _this.creators.updateForm(value); dispatch(action); return dispatch(_this.postAction(action)); }; }, clearForm: function () { return function (dispatch) { var action = _this.creators.clearForm(); dispatch(action); return dispatch(_this.postAction(action)); }; }, resetForm: function () { return function (dispatch) { var action = _this.creators.resetForm(); dispatch(action); return dispatch(_this.postAction(action)); }; }, validateForm: function () { return function (dispatch, getState) { var formState = _this.selector(getState); if (formState.isAsync) { return _this.createValidatorAsync(formState) .then(function (validator) { return dispatch(_this.creators.validateForm(validator)); }); } return dispatch(_this.creators.validateForm(_this.createValidator(formState))); }; }, showFormErrors: function (showErrors) { if (showErrors === void 0) { showErrors = true; } return function (dispatch, getState) { var action = _this.creators.showFormErrors(showErrors); dispatch(action); var validator = _this.createValidator(_this.selector(getState)); return dispatch(_this.creators.validateForm(validator)); }; }, updateNode: function (key, value) { return function (dispatch) { var action = _this.creators.updateNode(key, value); dispatch(action); return dispatch(_this.postAction(action)); }; }, clearNode: function (key) { return function (dispatch) { var action = _this.creators.clearNode(key); dispatch(action); return dispatch(_this.postAction(action)); }; }, resetNode: function (key) { return function (dispatch) { var action = _this.creators.resetNode(key); dispatch(action); return dispatch(_this.postAction(action)); }; }, validateNode: function (key) { return function (dispatch, getState) { var formState = _this.selector(getState); if (formState.isAsync) { return _this.createValidatorAsync(formState).then(function (validator) { return dispatch(_this.creators.validateNode(key, validator)); }); } return dispatch(_this.creators.validateNode(key, _this.createValidator(formState))); }; }, showNodeErrors: function (key, showErrors) { if (showErrors === void 0) { showErrors = true; } return function (dispatch) { var action = _this.creators.showNodeErrors(key, showErrors); dispatch(action); }; }, updateField: function (key, value) { return function (dispatch) { var action = _this.creators.updateField(key, value); dispatch(action); return dispatch(_this.postAction(action)); }; }, focusField: function (key) { return function (dispatch) { var action = _this.creators.focusField(key); dispatch(action); return dispatch(_this.postAction(action)); }; }, blurField: function (key) { return function (dispatch) { var action = _this.creators.blurField(key); dispatch(action); return dispatch(_this.postAction(action)); }; }, clearField: function (key) { return function (dispatch) { var action = _this.creators.clearField(key); dispatch(action); return dispatch(_this.postAction(action)); }; }, resetField: function (key) { return function (dispatch) { var action = _this.creators.resetField(key); dispatch(action); return dispatch(_this.postAction(action)); }; }, validateField: _this.validateField, showFieldErrors: function (key, showErrors) { if (showErrors === void 0) { showErrors = true; } return function (dispatch) { var action = _this.creators.showFieldErrors(key, showErrors); dispatch(action); if (showErrors) { return dispatch(_this.validateField(key)); } }; }, addArrayField: function (key) { return function (dispatch, getState) { var action = _this.creators.addArrayField(key); dispatch(action); var newField = selectField(_this.selector(getState), key); var index = newField.fields.length - 1; var keys = Object.keys(newField.fields[index]).map(function (fieldKey) { return key + "[" + index + "]." + fieldKey; }); return Promise.all(keys.map(function (k) { return dispatch(_this.postAction(_this.creators.addArrayField(k))); })); }; }, deleteArrayField: function (key, index) { return function (dispatch) { var action = _this.creators.deleteArrayField(key, index); dispatch(action); return dispatch(_this.postAction(action)); }; }, }); }; this.creators = creatorFactory(config); this.createValidator = validatorFactory(config); this.createValidatorAsync = asyncValidatorFactory(config); this.selector = config.mapState ? function (getState) { return config.mapState(getState()); } : function (getState) { return getState()[config.name]; }; this.shouldValidate = shouldValidateFactory(config); this.shouldShowErrors = shouldShowErrorsFactory(config); } return ThunkFactory; }()); export default ThunkFactory; //# sourceMappingURL=ThunkFactory.js.map