Skip to content

Commit ac8dfee

Browse files
committed
ui: drafts - fix error handling
Signed-off-by: Pamfilos Fokianos <pamfilosf@gmail.com>
1 parent 5afcfa8 commit ac8dfee

File tree

4 files changed

+54
-42
lines changed

4 files changed

+54
-42
lines changed

ui/cap-react/src/actions/draftItem.js

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -484,10 +484,10 @@ export function reviewDraft(draft_id, review, message = "submitted") {
484484

485485
export function updateDraft(data, draft_id) {
486486
return dispatch => {
487-
return dispatch(putUpdateDraft(data, draft_id)).catch(error => {
488-
dispatch(updateDraftError(error.response));
489-
throw error;
490-
});
487+
return dispatch(putUpdateDraft(data, draft_id))
488+
.catch(error => {
489+
dispatch(updateDraftError(error));
490+
});
491491
};
492492
}
493493

@@ -504,25 +504,60 @@ export function putUpdateDraft(data, draft_id) {
504504
.then(response => {
505505
dispatch(updateDraftSuccess(draft_id, response.data));
506506

507-
cogoToast.success("Your Draft has been successfully submitted", {
507+
cogoToast.success("Your Draft has been updated successfully", {
508508
position: "top-center",
509509
heading: "Draft saved",
510510
bar: { size: "0" },
511511
hideAfter: 3
512512
});
513513
})
514514
.catch(error => {
515-
dispatch(updateDraftError(error));
515+
let errorHeading = "Error while updating";
516+
let errorDescription;
517+
let errorHideAfter = 6;
518+
let errorThrow = "Error while updating";
519+
520+
if (error.response.status == 422) {
521+
let _errors = error.response.data.errors;
522+
let errorTree = {};
523+
_errors.map(e => {
524+
let tmp = errorTree;
525+
e.field.map(field => {
526+
if (!tmp[field]) tmp[field] = {}
527+
tmp = tmp[field];
528+
});
529+
530+
if (!tmp["__errors"]) tmp["__errors"] = []
531+
tmp["__errors"].push(e.message);
532+
});
533+
534+
dispatch(formErrorsChange(_toErrorList(errorTree)));
535+
errorHeading = "Validation Error while updating";
536+
errorDescription = "Please fix the errors before saving again";
537+
errorThrow = errorTree;
538+
}
539+
else if (error.response.status == 403 && error.response.data && error.response.data.message == "Invalid action") {
540+
errorDescription = "Either you need permissions or you are trying to publish an already published item";
541+
}
542+
else if (error.response) {
543+
errorDescription = error.response.data && error.response.data.message ?
544+
error.response.data.message : "";
545+
} else if (error.request) {
546+
// client never received a response, or request never left
547+
errorHeading = "Something went wrong";
548+
errorDescription = "There is an error, please make sure you are connected and try again";
549+
} else {
550+
// anything else
551+
}
516552
cogoToast.error(
517-
"There is an error, please make sure you are connected and try again",
553+
errorDescription,
518554
{
519555
position: "top-center",
520-
heading: error.message,
556+
heading: errorHeading,
521557
bar: { size: "0" },
522-
hideAfter: 3
523-
}
524-
);
525-
throw error;
558+
hideAfter: errorHideAfter
559+
});
560+
throw errorThrow;
526561
});
527562
};
528563
}
@@ -629,7 +664,6 @@ export function publishDraft(draft_id) {
629664
})
630665
.catch(error => {
631666
dispatch(publishDraftError(error));
632-
// throw error;
633667
});
634668
};
635669
}

ui/cap-react/src/components/drafts/DraftEditor.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ DraftEditor.propTypes = {
161161
schemaErrors: PropTypes.array,
162162
// schemaId: PropTypes.string,
163163
error: PropTypes.object,
164+
extraErrors: PropTypes.object,
164165
formData: PropTypes.object,
165166
draft_id: PropTypes.string,
166167
formDataChange: PropTypes.func,

ui/cap-react/src/components/drafts/form/Form.js

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,6 @@ class DepositForm extends Component {
2525
};
2626
}
2727

28-
_validate(formData, errors) {
29-
// Example on how to add custom errors
30-
// "errors" object is a representation of the schema field tree
31-
// with an "addError" function attached to each property
32-
// e.g.
33-
// errors.basic_info.cadi_id.addError("boom");
34-
35-
// TODO: Updates error list with ASYNC ERRORs
36-
if (!Array.isArray(this.props.errors)) return errors;
37-
38-
this.props.errors.map(error => {
39-
if (error.field) {
40-
let errorObj = objectPath.get(errors, error.field);
41-
errorObj.addError(error.message);
42-
}
43-
});
44-
45-
return errors;
46-
}
47-
4828
transformErrors = errors => {
4929
errors = errors
5030
.filter((item) => item.name != "required");
@@ -83,7 +63,7 @@ class DepositForm extends Component {
8363
uiSchema={this.props.uiSchema}
8464
liveValidate={false}
8565
noValidate={false}
86-
validate={this._validate.bind(this)}
66+
validate={this.props.validate}
8767
onError={() => { }}
8868
transformErrors={this.transformErrors}
8969
formData={this.props.formData}
@@ -116,7 +96,7 @@ DepositForm.propTypes = {
11696
onChange: PropTypes.func,
11797
errors: PropTypes.array,
11898
formRef: PropTypes.object,
119-
extraErrors: PropTypes.array,
99+
extraErrors: PropTypes.object,
120100
formContext: PropTypes.object
121101
};
122102

ui/cap-react/src/reducers/draftItem.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export default function draftsReducer(state = initialState, action) {
6565
.set("formErrors", Set([]))
6666
.set("extraErrors", {});
6767
case commonActions.FORM_ERRORS:
68-
return state.set("formErrors", Set(action.errors));
68+
return state.set("formErrors", state.get('formErrors').union(action.errors));
6969
case commonActions.FETCH_SCHEMA_ERROR:
7070
return state.set("schemaErrors", [
7171
...state.get("schemaErrors"),
@@ -120,20 +120,17 @@ export default function draftsReducer(state = initialState, action) {
120120
return state
121121
.set("formData", action.draft.metadata)
122122
.set("loading", false)
123+
.set("formErrors", Set([]))
124+
.set("extraErrors", {})
123125
.set("message", {
124126
status: "ok",
125127
msg: "All changes saved"
126128
})
127129
.merge(Map(action.draft));
128130
case draftItemActions.UPDATE_DRAFT_ERROR:
129131
return state
132+
.set("extraErrors", action.error)
130133
.set("loading", false)
131-
.set("errors", [...state.get("errors"), action.error])
132-
.set("message", {
133-
status: "critical",
134-
msg: "Error while updating.."
135-
});
136-
137134
case draftItemActions.DELETE_DRAFT_REQUEST:
138135
return state.set("loading", true);
139136
case draftItemActions.DELETE_DRAFT_SUCCESS:

0 commit comments

Comments
 (0)