diff --git a/src/js/components/message.vue b/src/js/components/message.vue index 451511cf..e9683979 100644 --- a/src/js/components/message.vue +++ b/src/js/components/message.vue @@ -181,6 +181,10 @@ export default { } + &.sticky { + position: sticky; z-index: 1; top: em(50,14); left: 0; right: 0; + } + @include mediaMinWidth($breakpointMedium) { &.withAction { diff --git a/src/js/components/resourceList.vue b/src/js/components/resourceList.vue index a0903b77..f1d89fca 100644 --- a/src/js/components/resourceList.vue +++ b/src/js/components/resourceList.vue @@ -83,6 +83,8 @@ import TableComponent from './resourceListTable'; import CardsComponent from './resourceListCards'; import MassActions from './massActions'; import Message from './message'; +import translate from '../library/translate'; +import bootData from '../library/bootData'; import Loader from '../library/loader'; import loadDefinitionType from '../library/loadDefinitionType'; import formElementDefaults from '../formElements/elementDefaults'; @@ -393,6 +395,14 @@ export default { } const refreshItems = () => this.refreshItems(); + const handleError = (error) => { + const errors = error.response.data.errors; + const errorField = bootData('validationErrorField', 'title'); + this.showMessage({ + type: 'error sticky', + text: errors ? errors.map(error => error[errorField]).join('
') : translate('validation.serverError') + }); + }; definition.options.items.forEach(item => { @@ -408,7 +418,7 @@ export default { item.action = (model, contextMenu) => { contextMenu.close(); - model.destroy().then(refreshItems).catch(refreshItems); + model.destroy().then(refreshItems).catch(handleError); }; @@ -420,7 +430,7 @@ export default { model.save({ attributes: result(item.updateAttributes, [model]) - }).then(refreshItems).catch(refreshItems); + }).then(refreshItems).catch(handleError); };