37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
import { SubmissionError } from 'redux-form';
|
|
// import createDebug from 'debug';
|
|
// const debug = createDebug('d3d:utils:form');
|
|
|
|
// redux form submit promise wrapper
|
|
// - turns all errors into SubmissionError
|
|
// - fills _error field, enables showing main error message in form
|
|
// - includes superlogin's validationErrors
|
|
export function formPromiseWrapper(promise) {
|
|
return new Promise((resolve, reject) => {
|
|
promise
|
|
.then(resolve)
|
|
.catch(err => {
|
|
// axius (used by superlogin http utils) puts response data in response.data
|
|
if (err.response && err.response.data) {
|
|
err = err.response.data;
|
|
}
|
|
|
|
// promise middleware puts actual error in reason
|
|
if (err.action && err.reason) {
|
|
err = err.reason;
|
|
}
|
|
const submissionErrors = {
|
|
_error: err.message || err.error
|
|
};
|
|
// add superlogin validation errors
|
|
// joined because superlogin creates arrays per field
|
|
for (const prop in err.validationErrors) {
|
|
submissionErrors[prop] = err.validationErrors[prop].join(', ');
|
|
}
|
|
const submissionError = new SubmissionError(submissionErrors);
|
|
|
|
reject(submissionError);
|
|
});
|
|
});
|
|
}
|