From c06c996ccf99af9df470d8302d7104f4c99be513 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 19 Feb 2019 11:46:46 +1100 Subject: [PATCH] Shows a notification message when client validation fails in the content editor, else it's not clear there are any problems. --- .../components/content/edit.controller.js | 119 +++++++++++------- 1 file changed, 75 insertions(+), 44 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js index e6b8bae30c..5fad72f316 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js @@ -3,8 +3,8 @@ function ContentEditController($rootScope, $scope, $routeParams, $q, $window, appState, contentResource, entityResource, navigationService, notificationsService, - serverValidationManager, contentEditingHelper, treeService, formHelper, umbRequestHelper, - editorState, $http, eventsService, relationResource, overlayService, $location) { + serverValidationManager, contentEditingHelper, localizationService, formHelper, umbRequestHelper, + editorState, $http, eventsService, overlayService, $location) { var evts = []; var infiniteMode = $scope.infiniteModel && $scope.infiniteModel.infiniteMode; @@ -410,6 +410,20 @@ } } + /** Just shows a simple notification that there are client side validation issues to be fixed */ + function showValidationNotification() { + //TODO: We need to make the validation UI much better, there's a lot of inconsistencies in v8 including colors, issues with the property groups and validation errors between variants + + //need to show a notification else it's not clear there was an error. + localizationService.localizeMany([ + "speechBubbles_validationFailedHeader", + "speechBubbles_validationFailedMessage" + ] + ).then(function (data) { + notificationsService.error(data[0], data[1]); + }); + } + if ($scope.page.isNew) { $scope.page.loading = true; @@ -491,7 +505,7 @@ variants: $scope.content.variants, //set a model property for the dialog skipFormValidation: true, //when submitting the overlay form, skip any client side validation submitButtonLabelKey: "buttons_saveToPublish", - submit: function (model) { + submit: function(model) { model.submitButtonState = "busy"; clearNotifications($scope.content); //we need to return this promise so that the dialog can handle the result and wire up the validation response @@ -499,28 +513,32 @@ saveMethod: contentResource.sendToPublish, action: "sendToPublish", showNotifications: false - }).then(function (data) { - //show all notifications manually here since we disabled showing them automatically in the save method - formHelper.showNotifications(data); - clearNotifications($scope.content); - overlayService.close(); - return $q.when(data); - }, function (err) { - clearDirtyState($scope.content.variants); - model.submitButtonState = "error"; - //re-map the dialog model since we've re-bound the properties - dialog.variants = $scope.content.variants; - //don't reject, we've handled the error - return $q.when(err); - }); + }).then(function(data) { + //show all notifications manually here since we disabled showing them automatically in the save method + formHelper.showNotifications(data); + clearNotifications($scope.content); + overlayService.close(); + return $q.when(data); + }, + function(err) { + clearDirtyState($scope.content.variants); + model.submitButtonState = "error"; + //re-map the dialog model since we've re-bound the properties + dialog.variants = $scope.content.variants; + //don't reject, we've handled the error + return $q.when(err); + }); }, - close: function () { + close: function() { overlayService.close(); } }; overlayService.open(dialog); } + else { + showValidationNotification(); + } } else { $scope.page.buttonGroupState = "busy"; @@ -547,7 +565,7 @@ variants: $scope.content.variants, //set a model property for the dialog skipFormValidation: true, //when submitting the overlay form, skip any client side validation submitButtonLabelKey: "buttons_saveAndPublish", - submit: function (model) { + submit: function(model) { model.submitButtonState = "busy"; clearNotifications($scope.content); //we need to return this promise so that the dialog can handle the result and wire up the validation response @@ -555,14 +573,14 @@ saveMethod: contentResource.publish, action: "publish", showNotifications: false - }).then(function (data) { - //show all notifications manually here since we disabled showing them automatically in the save method - formHelper.showNotifications(data); - clearNotifications($scope.content); - overlayService.close(); - return $q.when(data); - }, - function (err) { + }).then(function(data) { + //show all notifications manually here since we disabled showing them automatically in the save method + formHelper.showNotifications(data); + clearNotifications($scope.content); + overlayService.close(); + return $q.when(data); + }, + function(err) { clearDirtyState($scope.content.variants); model.submitButtonState = "error"; //re-map the dialog model since we've re-bound the properties @@ -571,13 +589,16 @@ return $q.when(err); }); }, - close: function () { + close: function() { overlayService.close(); } }; overlayService.open(dialog); } + else { + showValidationNotification(); + } } else { //ensure the flags are set @@ -608,7 +629,7 @@ variants: $scope.content.variants, //set a model property for the dialog skipFormValidation: true, //when submitting the overlay form, skip any client side validation submitButtonLabelKey: "buttons_save", - submit: function (model) { + submit: function(model) { model.submitButtonState = "busy"; clearNotifications($scope.content); //we need to return this promise so that the dialog can handle the result and wire up the validation response @@ -616,28 +637,32 @@ saveMethod: $scope.saveMethod(), action: "save", showNotifications: false - }).then(function (data) { - //show all notifications manually here since we disabled showing them automatically in the save method - formHelper.showNotifications(data); - clearNotifications($scope.content); - overlayService.close(); - return $q.when(data); - }, function (err) { - clearDirtyState($scope.content.variants); - model.submitButtonState = "error"; - //re-map the dialog model since we've re-bound the properties - dialog.variants = $scope.content.variants; - //don't reject, we've handled the error - return $q.when(err); - }); + }).then(function(data) { + //show all notifications manually here since we disabled showing them automatically in the save method + formHelper.showNotifications(data); + clearNotifications($scope.content); + overlayService.close(); + return $q.when(data); + }, + function(err) { + clearDirtyState($scope.content.variants); + model.submitButtonState = "error"; + //re-map the dialog model since we've re-bound the properties + dialog.variants = $scope.content.variants; + //don't reject, we've handled the error + return $q.when(err); + }); }, - close: function (oldModel) { + close: function(oldModel) { overlayService.close(); } }; overlayService.open(dialog); } + else { + showValidationNotification(); + } } else { //ensure the flags are set @@ -720,6 +745,9 @@ }; overlayService.open(dialog); } + else { + showValidationNotification(); + } }; $scope.publishDescendants = function() { @@ -776,6 +804,9 @@ }; overlayService.open(dialog); } + else { + showValidationNotification(); + } }; $scope.preview = function (content) {