From 359e3a38954029475cc95d4995316d751408eaac Mon Sep 17 00:00:00 2001 From: Scott Cressler Date: Wed, 5 Apr 2017 11:03:20 -0700 Subject: [PATCH] Added wait spinner around the loading of bucket information, as that can be slow for some users on Prod. Also changed the existing spinner code to remove a bunch of unnecessary duplicate code. Also changed spinner code to use finally() so it is always turned off after a call to the backend, regardless of whether there is an error or not. --- .../ui/app/scripts/controllers/BucketsCtrl.js | 3 +++ .../controllers/ExperimentDetailsCtrl.js | 12 ++++++++++ .../scripts/controllers/ExperimentsCtrl.js | 23 ++++++------------- .../ui/app/scripts/controllers/LogsCtrl.js | 13 +++-------- .../app/scripts/controllers/PrioritiesCtrl.js | 13 +++-------- .../controllers/SuperadminsTableCtrl.js | 13 +++-------- .../ui/app/scripts/controllers/UsersCtrl.js | 13 +++-------- 7 files changed, 34 insertions(+), 56 deletions(-) diff --git a/modules/ui/app/scripts/controllers/BucketsCtrl.js b/modules/ui/app/scripts/controllers/BucketsCtrl.js index b3fe293f1..5771e52a7 100644 --- a/modules/ui/app/scripts/controllers/BucketsCtrl.js +++ b/modules/ui/app/scripts/controllers/BucketsCtrl.js @@ -10,6 +10,7 @@ angular.module('wasabi.controllers'). $scope.loadBuckets = function () { if($scope.experiment.id) { + UtilitiesFactory.startSpin(); BucketsFactory.query({ experimentId: $scope.experiment.id }).$promise.then(function (buckets) { @@ -19,6 +20,8 @@ angular.module('wasabi.controllers'). function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of experiment buckets could not be retrieved.'); $scope.modalInstance.close(); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); } }; diff --git a/modules/ui/app/scripts/controllers/ExperimentDetailsCtrl.js b/modules/ui/app/scripts/controllers/ExperimentDetailsCtrl.js index 5c3497858..2dc2c3094 100644 --- a/modules/ui/app/scripts/controllers/ExperimentDetailsCtrl.js +++ b/modules/ui/app/scripts/controllers/ExperimentDetailsCtrl.js @@ -221,6 +221,7 @@ angular.module('wasabi.controllers'). // load experiment from server $scope.loadExperiment = function () { + UtilitiesFactory.startSpin(); ExperimentsFactory.show({id: $stateParams.experimentId}).$promise.then(function (experiment) { $scope.experiment = experiment; if ($scope.experiment.hypothesisIsCorrect === null) { @@ -255,6 +256,8 @@ angular.module('wasabi.controllers'). $rootScope.$broadcast('experiment_created'); }, function(response) { UtilitiesFactory.handleGlobalError(response, 'Your experiment could not be retrieved.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); }; @@ -262,6 +265,7 @@ angular.module('wasabi.controllers'). // load buckets from server $scope.loadBuckets = function () { + UtilitiesFactory.startSpin(); BucketsFactory.query({ experimentId: $stateParams.experimentId }).$promise.then(function (buckets) { @@ -274,10 +278,13 @@ angular.module('wasabi.controllers'). }, function(response) { UtilitiesFactory.handleGlobalError(response, 'Your buckets could not be loaded.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); }; $scope.getApplicationStatistics = function() { + UtilitiesFactory.startSpin(); ApplicationStatisticsFactory.query({ experimentId: $stateParams.experimentId }).$promise.then(function (appInfo) { @@ -296,6 +303,8 @@ angular.module('wasabi.controllers'). }, function(response) { UtilitiesFactory.handleGlobalError(response, 'Your user count could not be loaded.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); }; @@ -305,6 +314,7 @@ angular.module('wasabi.controllers'). // load statistics from server $scope.loadStatistics = function () { + UtilitiesFactory.startSpin(); ExperimentStatisticsFactory.query({experimentId: $stateParams.experimentId}).$promise. then(function (statistics) { $scope.experiment.statistics = statistics; @@ -317,6 +327,8 @@ angular.module('wasabi.controllers'). }, function(response) { UtilitiesFactory.handleGlobalError(response, 'Your statistics could not be retrieved.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); }; diff --git a/modules/ui/app/scripts/controllers/ExperimentsCtrl.js b/modules/ui/app/scripts/controllers/ExperimentsCtrl.js index 8f0be15d4..0569b3f7c 100644 --- a/modules/ui/app/scripts/controllers/ExperimentsCtrl.js +++ b/modules/ui/app/scripts/controllers/ExperimentsCtrl.js @@ -101,14 +101,6 @@ angular.module('wasabi.controllers'). } }; - $scope.startSpin = function(){ - UtilitiesFactory.startSpin(); - } - - $scope.stopSpin = function(){ - UtilitiesFactory.stopSpin(); - } - $scope.doFavorites = function(experimentsList, forceGet) { function applyFavorites(experimentsList) { if ($scope.favoritesObj.favorites && $scope.favoritesObj.favorites.length && experimentsList) { @@ -148,7 +140,7 @@ angular.module('wasabi.controllers'). return existingFilter += newFilterValue; } - $scope.startSpin(); + UtilitiesFactory.startSpin(); var queryParams = { perPage: pageSize, @@ -194,7 +186,9 @@ angular.module('wasabi.controllers'). function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of experiments could not be retrieved.'); } - ); + ).finally(function() { + UtilitiesFactory.stopSpin(); + }); } else { ExperimentStatisticsFactory.cardViewData(queryParams).$promise @@ -202,7 +196,9 @@ angular.module('wasabi.controllers'). function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of experiments could not be retrieved.'); } - ); + ).finally(function() { + UtilitiesFactory.stopSpin(); + }); } }; @@ -279,7 +275,6 @@ angular.module('wasabi.controllers'). $scope.applicationsWithReadOrBetterAccess.length === 0); $scope.applicationsLoaded = true; - $scope.stopSpin(); }); }; @@ -393,10 +388,6 @@ angular.module('wasabi.controllers'). else { $scope.doFavorites($scope.cardViewExperiments, false); } - - $scope.stopSpin(); - - //$scope.loadGridDataIfNecessary() }); }; diff --git a/modules/ui/app/scripts/controllers/LogsCtrl.js b/modules/ui/app/scripts/controllers/LogsCtrl.js index 9152f2692..04c2a3367 100644 --- a/modules/ui/app/scripts/controllers/LogsCtrl.js +++ b/modules/ui/app/scripts/controllers/LogsCtrl.js @@ -29,14 +29,6 @@ angular.module('wasabi.controllers'). UtilitiesFactory.hideHeading(false); UtilitiesFactory.selectTopLevelTab('Tools'); - $scope.startSpin = function(){ - UtilitiesFactory.startSpin(); - } - - $scope.stopSpin = function(){ - UtilitiesFactory.stopSpin(); - } - $scope.changePage = function(destinationApp) { if (destinationApp !== undefined) { $scope.data.applicationName = destinationApp; @@ -85,9 +77,8 @@ angular.module('wasabi.controllers'). sort: ($scope.reverseSort ? '-' : '') + $scope.orderByField.replace('_', '.'), filter: $scope.data.query }; - $scope.startSpin(); + UtilitiesFactory.startSpin(); LogsFactory.query(options).$promise.then(function (data) { - $scope.stopSpin(); $scope.logs = data.logEntries; $scope.totalItems = data.totalEntries; @@ -98,6 +89,8 @@ angular.module('wasabi.controllers'). {key: 'application_name', value: selectedApp}); }, function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of logs could not be retrieved.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); } }; diff --git a/modules/ui/app/scripts/controllers/PrioritiesCtrl.js b/modules/ui/app/scripts/controllers/PrioritiesCtrl.js index 5cb420f9e..913cd9407 100644 --- a/modules/ui/app/scripts/controllers/PrioritiesCtrl.js +++ b/modules/ui/app/scripts/controllers/PrioritiesCtrl.js @@ -33,14 +33,6 @@ angular.module('wasabi.controllers'). UtilitiesFactory.hideHeading(false); UtilitiesFactory.selectTopLevelTab('Priority'); - $scope.startSpin = function(){ - UtilitiesFactory.startSpin(); - } - - $scope.stopSpin = function(){ - UtilitiesFactory.stopSpin(); - } - $scope.changePage = function(destinationApp) { if (destinationApp !== undefined) { $scope.data.applicationName = destinationApp; @@ -129,10 +121,9 @@ angular.module('wasabi.controllers'). if (selectedApp) { $scope.applicationName = $cookies.wasabiDefaultApplication = selectedApp; $scope.noDrag = $scope.readOnly = !$scope.hasUpdatePermission(selectedApp); - $scope.startSpin(); + UtilitiesFactory.startSpin(); PrioritiesFactory.query({applicationName: selectedApp}).$promise.then(function (priorities) { $scope.experiments = priorities; - $scope.stopSpin(); $scope.doFavorites(); UtilitiesFactory.doTrackingInit(); @@ -142,6 +133,8 @@ angular.module('wasabi.controllers'). {key: 'application_name', value: selectedApp}); }, function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of priorities could not be retrieved.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); } }; diff --git a/modules/ui/app/scripts/controllers/SuperadminsTableCtrl.js b/modules/ui/app/scripts/controllers/SuperadminsTableCtrl.js index 2c9eae6f2..8ecd80994 100644 --- a/modules/ui/app/scripts/controllers/SuperadminsTableCtrl.js +++ b/modules/ui/app/scripts/controllers/SuperadminsTableCtrl.js @@ -8,20 +8,11 @@ angular.module('wasabi.controllers'). $scope.superadmins = []; - $scope.startSpin = function(){ - UtilitiesFactory.startSpin(); - } - - $scope.stopSpin = function(){ - UtilitiesFactory.stopSpin(); - } - // load superadmins from server $scope.loadSuperadmins = function () { $scope.superadmins = []; - $scope.startSpin(); + UtilitiesFactory.startSpin(); SuperadminsFactory.query().$promise.then(function(superadmins) { - $scope.stopSpin(); $scope.superadmins = superadmins; for (var i = 0; i < $scope.superadmins.length; i++) { $scope.superadmins[i].doNotShow = (Session.userID === $scope.superadmins[i].userID); @@ -29,6 +20,8 @@ angular.module('wasabi.controllers'). }, function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of superadmins could not be retrieved.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); }; diff --git a/modules/ui/app/scripts/controllers/UsersCtrl.js b/modules/ui/app/scripts/controllers/UsersCtrl.js index 53c733dcb..a1703f35d 100644 --- a/modules/ui/app/scripts/controllers/UsersCtrl.js +++ b/modules/ui/app/scripts/controllers/UsersCtrl.js @@ -30,14 +30,6 @@ angular.module('wasabi.controllers'). $scope.administeredApplications = []; $scope.appNames = []; - $scope.startSpin = function(){ - UtilitiesFactory.startSpin(); - } - - $scope.stopSpin = function(){ - UtilitiesFactory.stopSpin(); - } - // Load the list of applications the currently logged in user is an admin for. $scope.loadAdministeredApplications = function () { $scope.administeredApplications = UtilitiesFactory.getAdministeredApplications(); @@ -48,9 +40,8 @@ angular.module('wasabi.controllers'). $scope.loadUsers = function (orderByField) { var users = []; - $scope.startSpin(); + UtilitiesFactory.startSpin(); AuthzFactory.getUsersRoles().$promise.then(function(results) { - $scope.stopSpin(); if (results && results.length > 0) { for (var i = 0; i < results.length; i++) { // Go through each object, which represents the access for one application. @@ -101,6 +92,8 @@ angular.module('wasabi.controllers'). }, function(response) { UtilitiesFactory.handleGlobalError(response, 'The list of user roles could not be retrieved.'); + }).finally(function() { + UtilitiesFactory.stopSpin(); }); };