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);
|
||
|
});
|
||
|
});
|
||
|
}
|