UNPKG

4.18 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports["default"] = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10var _isPromise = _interopRequireDefault(require("is-promise"));
11
12var _SubmissionError = _interopRequireDefault(require("./SubmissionError"));
13
14var isSubmissionError = function isSubmissionError(error) {
15 return error && error.name === _SubmissionError["default"].name;
16};
17
18var mergeErrors = function mergeErrors(_ref) {
19 var asyncErrors = _ref.asyncErrors,
20 syncErrors = _ref.syncErrors;
21 return asyncErrors && typeof asyncErrors.merge === 'function' ? asyncErrors.merge(syncErrors).toJS() : (0, _extends2["default"])({}, asyncErrors, {}, syncErrors);
22};
23
24var executeSubmit = function executeSubmit(submit, fields, props) {
25 var dispatch = props.dispatch,
26 submitAsSideEffect = props.submitAsSideEffect,
27 onSubmitFail = props.onSubmitFail,
28 onSubmitSuccess = props.onSubmitSuccess,
29 startSubmit = props.startSubmit,
30 stopSubmit = props.stopSubmit,
31 setSubmitFailed = props.setSubmitFailed,
32 setSubmitSucceeded = props.setSubmitSucceeded,
33 values = props.values;
34 var result;
35
36 try {
37 result = submit(values, dispatch, props);
38 } catch (submitError) {
39 var error = isSubmissionError(submitError) ? submitError.errors : undefined;
40 stopSubmit(error);
41 setSubmitFailed.apply(void 0, fields);
42
43 if (onSubmitFail) {
44 onSubmitFail(error, dispatch, submitError, props);
45 }
46
47 if (error || onSubmitFail) {
48 // if you've provided an onSubmitFail callback, don't re-throw the error
49 return error;
50 } else {
51 throw submitError;
52 }
53 }
54
55 if (submitAsSideEffect) {
56 if (result) {
57 dispatch(result);
58 }
59 } else {
60 if ((0, _isPromise["default"])(result)) {
61 startSubmit();
62 return result.then(function (submitResult) {
63 stopSubmit();
64 setSubmitSucceeded();
65
66 if (onSubmitSuccess) {
67 onSubmitSuccess(submitResult, dispatch, props);
68 }
69
70 return submitResult;
71 }, function (submitError) {
72 var error = isSubmissionError(submitError) ? submitError.errors : undefined;
73 stopSubmit(error);
74 setSubmitFailed.apply(void 0, fields);
75
76 if (onSubmitFail) {
77 onSubmitFail(error, dispatch, submitError, props);
78 }
79
80 if (error || onSubmitFail) {
81 // if you've provided an onSubmitFail callback, don't re-throw the error
82 return error;
83 } else {
84 throw submitError;
85 }
86 });
87 } else {
88 setSubmitSucceeded();
89
90 if (onSubmitSuccess) {
91 onSubmitSuccess(result, dispatch, props);
92 }
93 }
94 }
95
96 return result;
97};
98
99var handleSubmit = function handleSubmit(submit, props, valid, asyncValidate, fields) {
100 var dispatch = props.dispatch,
101 onSubmitFail = props.onSubmitFail,
102 setSubmitFailed = props.setSubmitFailed,
103 syncErrors = props.syncErrors,
104 asyncErrors = props.asyncErrors,
105 touch = props.touch,
106 persistentSubmitErrors = props.persistentSubmitErrors;
107 touch.apply(void 0, fields);
108
109 if (valid || persistentSubmitErrors) {
110 var asyncValidateResult = asyncValidate && asyncValidate();
111
112 if (asyncValidateResult) {
113 return asyncValidateResult.then(function (asyncErrors) {
114 if (asyncErrors) {
115 throw asyncErrors;
116 }
117
118 return executeSubmit(submit, fields, props);
119 })["catch"](function (asyncErrors) {
120 setSubmitFailed.apply(void 0, fields);
121
122 if (onSubmitFail) {
123 onSubmitFail(asyncErrors, dispatch, null, props);
124 }
125
126 return Promise.reject(asyncErrors);
127 });
128 } else {
129 return executeSubmit(submit, fields, props);
130 }
131 } else {
132 setSubmitFailed.apply(void 0, fields);
133 var errors = mergeErrors({
134 asyncErrors: asyncErrors,
135 syncErrors: syncErrors
136 });
137
138 if (onSubmitFail) {
139 onSubmitFail(errors, dispatch, null, props);
140 }
141
142 return errors;
143 }
144};
145
146var _default = handleSubmit;
147exports["default"] = _default;
\No newline at end of file