yarfl
Version:
Yet Another Redux Forms Library
223 lines • 10.7 kB
JavaScript
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