UNPKG

redux-form

Version:

A higher order component decorator for forms using Redux and React

101 lines (88 loc) 3.58 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _isPromise = require('is-promise'); var _isPromise2 = _interopRequireDefault(_isPromise); var _SubmissionError = require('./SubmissionError'); var _SubmissionError2 = _interopRequireDefault(_SubmissionError); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var handleSubmit = function handleSubmit(submit, props, valid, asyncValidate, fields) { var dispatch = props.dispatch; var onSubmitFail = props.onSubmitFail; var onSubmitSuccess = props.onSubmitSuccess; var startSubmit = props.startSubmit; var stopSubmit = props.stopSubmit; var setSubmitFailed = props.setSubmitFailed; var setSubmitSucceeded = props.setSubmitSucceeded; var syncErrors = props.syncErrors; var touch = props.touch; var values = props.values; var persistentSubmitErrors = props.persistentSubmitErrors; touch.apply(undefined, _toConsumableArray(fields)); // mark all fields as touched // XXX: Always submitting when persistentSubmitErrors is enabled ignores sync errors. // It would be better to check whether the form as any other errors except submit errors. // This would either require changing the meaning of `valid` (maybe breaking change), // having a more complex conditional in here, or executing sync validation in here // the same way as async validation is executed. if (valid || persistentSubmitErrors) { var doSubmit = function doSubmit() { var result = void 0; try { result = submit(values, dispatch, props); } catch (submitError) { var error = submitError instanceof _SubmissionError2.default ? submitError.errors : undefined; setSubmitFailed.apply(undefined, _toConsumableArray(fields)); if (onSubmitFail) { onSubmitFail(error, dispatch); } return error; } if ((0, _isPromise2.default)(result)) { startSubmit(); return result.then(function (submitResult) { stopSubmit(); setSubmitSucceeded(); if (onSubmitSuccess) { onSubmitSuccess(submitResult, dispatch); } return submitResult; }, function (submitError) { var error = submitError instanceof _SubmissionError2.default ? submitError.errors : undefined; stopSubmit(error); setSubmitFailed.apply(undefined, _toConsumableArray(fields)); if (onSubmitFail) { onSubmitFail(error, dispatch); } return error; }); } else { setSubmitSucceeded(); if (onSubmitSuccess) { onSubmitSuccess(result, dispatch); } } return result; }; var asyncValidateResult = asyncValidate && asyncValidate(); if (asyncValidateResult) { return asyncValidateResult.then(doSubmit, function (asyncErrors) { setSubmitFailed.apply(undefined, _toConsumableArray(fields)); if (onSubmitFail) { onSubmitFail(asyncErrors, dispatch); } return Promise.reject(asyncErrors); }); } else { return doSubmit(); } } else { setSubmitFailed.apply(undefined, _toConsumableArray(fields)); if (onSubmitFail) { onSubmitFail(syncErrors, dispatch); } return syncErrors; } }; exports.default = handleSubmit;