(js) Intercept and show HTTP errors in md-toast

pull/186/head
Francis Lachapelle 2015-12-08 16:45:24 -05:00
parent 24520418f9
commit db96b2830e
3 changed files with 43 additions and 19 deletions

View File

@ -124,13 +124,14 @@
.config(configure)
.factory('AuthInterceptor', AuthInterceptor);
.factory('AuthInterceptor', AuthInterceptor)
.factory('ErrorInterceptor', ErrorInterceptor);
/**
* @ngInject
*/
configure.$inject = ['$logProvider', '$compileProvider', '$mdThemingProvider', '$httpProvider'];
function configure($logProvider, $compileProvider, $mdThemingProvider, $httpProvider) {
configure.$inject = ['$logProvider', '$compileProvider', '$httpProvider', '$mdThemingProvider'];
function configure($logProvider, $compileProvider, $httpProvider, $mdThemingProvider) {
// Accent palette
$mdThemingProvider.definePalette('sogo-green', {
'50': 'eaf5e9',
@ -221,6 +222,7 @@
}
$httpProvider.interceptors.push('AuthInterceptor');
$httpProvider.interceptors.push('ErrorInterceptor');
}
AuthInterceptor.$inject = ['$window', '$q'];
@ -238,4 +240,18 @@
};
}
/**
* @ngInject
*/
ErrorInterceptor.$inject = ['$rootScope', '$q'];
function ErrorInterceptor($rootScope, $q) {
return {
responseError: function(rejection) {
// Broadcast the response error
$rootScope.$broadcast('http:Error', rejection);
return $q.reject(rejection);
}
};
}
})();

View File

@ -9,8 +9,8 @@
/**
* @ngInject
*/
navController.$inject = ['$scope', '$timeout', '$interval', '$http', '$mdSidenav', '$mdBottomSheet', '$mdMedia', '$log', 'sgConstant', 'sgSettings', 'Alarm'];
function navController($scope, $timeout, $interval, $http, $mdSidenav, $mdBottomSheet, $mdMedia, $log, sgConstant, sgSettings, Alarm) {
navController.$inject = ['$rootScope', '$scope', '$timeout', '$interval', '$http', '$mdSidenav', '$mdToast', '$mdMedia', '$log', 'sgConstant', 'sgSettings', 'Alarm'];
function navController($rootScope, $scope, $timeout, $interval, $http, $mdSidenav, $mdToast, $mdMedia, $log, sgConstant, sgSettings, Alarm) {
$scope.isPopup = sgSettings.isPopup;
$scope.activeUser = sgSettings.activeUser();
@ -64,6 +64,28 @@
return !$mdSidenav('left').isOpen();
}
function onHttpError(event, response) {
var message;
if (response.data.message)
message = response.data.message;
else
message = response.statusText;
$mdToast.show({
template: [
'<md-toast>',
' <md-icon class="md-warn md-hue-1">error_outline</md-icon>',
' <span flex>' + l(message) + '</span>',
'</md-toast>'
].join(''),
hideDelay: 5000,
position: 'top right'
});
}
// Listen to HTTP errors broadcasted from HTTP interceptor
$rootScope.$on('http:Error', onHttpError);
Alarm.getAlarms();
}

View File

@ -117,20 +117,6 @@
vm.message.$send().then(function(data) {
$mdDialog.hide();
}, function(data) {
$mdToast.show({
controller: 'SendMessageToastController',
template: [
'<md-toast>',
' <span flex>' + l(data.message) + '</span>',
' <md-button class="md-icon-button md-primary" ng-click="closeToast()">',
' <md-icon>close</md-icon>',
' </md-button>',
'</md-toast>'
].join(''),
hideDelay: 2000,
position: 'top right'
});
});
}