redux-form-submit
Version:
Adds a submit action creator to redux-form
103 lines (83 loc) • 3.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _reduxForm = require('redux-form');
var _actions = require('redux-form/lib/actions');
var _handleSubmit = require('redux-form/lib/handleSubmit');
var _handleSubmit2 = _interopRequireDefault(_handleSubmit);
var _asyncValidation = require('redux-form/lib/asyncValidation');
var _asyncValidation2 = _interopRequireDefault(_asyncValidation);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var submit = function submit(config, values) {
return function (dispatch, getState) {
var form = config.form,
validate = config.validate,
onSubmit = config.onSubmit,
asyncValidate = config.asyncValidate;
var fields = config.fields;
var formState = getState().form[form];
values = values || (0, _reduxForm.getFormValues)(form)(getState()) || {};
if (!formState) {
dispatch((0, _reduxForm.initialize)(form, values));
fields.forEach(function (field) {
dispatch((0, _actions.registerField)(form, field, 'Field'));
});
values = (0, _reduxForm.getFormValues)(form)(getState());
} else if (formState.registeredFields) {
fields = formState.registeredFields.map(function (field) {
return field.name;
});
} else {
throw new Error('You must set fields on redux-form config');
}
if (typeof validate === 'function') {
dispatch((0, _actions.updateSyncErrors)(form, validate(values)));
}
var props = _extends({}, config, {
dispatch: dispatch,
startSubmit: function startSubmit() {
return dispatch((0, _reduxForm.startSubmit)(form));
},
stopSubmit: function stopSubmit() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return dispatch(_reduxForm.stopSubmit.apply(undefined, [form].concat(args)));
},
setSubmitFailed: function setSubmitFailed() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return dispatch(_reduxForm.setSubmitFailed.apply(undefined, [form].concat(args)));
},
setSubmitSucceeded: function setSubmitSucceeded() {
return dispatch((0, _reduxForm.setSubmitSucceeded)(form));
},
syncErrors: getState().form[form].syncErrors,
touch: function touch() {
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
return dispatch(_reduxForm.touch.apply(undefined, [form].concat(args)));
},
values: values
});
return Promise.resolve().then(function () {
return (0, _handleSubmit2.default)(onSubmit, props, (0, _reduxForm.isValid)(form, function (state) {
return state.form;
})(getState()), asyncValidate && _asyncValidation2.default.bind(null, function () {
return asyncValidate(values, dispatch, props);
}, function () {
return dispatch((0, _reduxForm.startAsyncValidation)(form));
}, function () {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
return dispatch(_reduxForm.stopAsyncValidation.apply(undefined, [form].concat(args)));
}), fields);
});
};
};
exports.default = submit;