thingsboard-memoizeit

Details

diff --git a/ui/src/app/api/device.service.js b/ui/src/app/api/device.service.js
index 2c4a100..b369e90 100644
--- a/ui/src/app/api/device.service.js
+++ b/ui/src/app/api/device.service.js
@@ -51,7 +51,7 @@ function DeviceService($http, $q, $filter, userService, telemetryWebsocketServic
 
     return service;
 
-    function getTenantDevices(pageLink) {
+    function getTenantDevices(pageLink, config) {
         var deferred = $q.defer();
         var url = '/api/tenant/devices?limit=' + pageLink.limit;
         if (angular.isDefined(pageLink.textSearch)) {
@@ -63,7 +63,7 @@ function DeviceService($http, $q, $filter, userService, telemetryWebsocketServic
         if (angular.isDefined(pageLink.textOffset)) {
             url += '&textOffset=' + pageLink.textOffset;
         }
-        $http.get(url, null).then(function success(response) {
+        $http.get(url, config).then(function success(response) {
             deferred.resolve(response.data);
         }, function fail() {
             deferred.reject();
@@ -425,7 +425,7 @@ function DeviceService($http, $q, $filter, userService, telemetryWebsocketServic
         }
     }
 
-    function getDeviceAttributes(deviceId, attributeScope, query, successCallback) {
+    function getDeviceAttributes(deviceId, attributeScope, query, successCallback, config) {
         var deferred = $q.defer();
         var subscriptionId = deviceId + attributeScope;
         var das = deviceAttributesSubscriptionMap[subscriptionId];
@@ -445,7 +445,7 @@ function DeviceService($http, $q, $filter, userService, telemetryWebsocketServic
             }
         } else {
             var url = '/api/plugins/telemetry/' + deviceId + '/values/attributes/' + attributeScope;
-            $http.get(url, null).then(function success(response) {
+            $http.get(url, config).then(function success(response) {
                 processDeviceAttributes(response.data, query, deferred, successCallback);
             }, function fail() {
                 deferred.reject();
diff --git a/ui/src/app/global-interceptor.service.js b/ui/src/app/global-interceptor.service.js
index 8ba6c04..86cd676 100644
--- a/ui/src/app/global-interceptor.service.js
+++ b/ui/src/app/global-interceptor.service.js
@@ -111,11 +111,12 @@ export default function GlobalInterceptor($rootScope, $q, $injector) {
     function request(config) {
         var rejected = false;
         if (config.url.startsWith('/api/')) {
-            $rootScope.loading = !isInternalUrlPrefix(config.url);
+            var isLoading = !isInternalUrlPrefix(config.url);
+            updateLoadingState(config, isLoading);
             if (isTokenBasedAuthEntryPoint(config.url)) {
                 if (!getUserService().updateAuthorizationHeader(config.headers) &&
                     !getUserService().refreshTokenPending()) {
-                    $rootScope.loading = false;
+                    updateLoadingState(config, false);
                     rejected = true;
                     getUserService().clearJwtToken(false);
                     return $q.reject({ data: {message: getTranslate().instant('access.unauthorized')}, status: 401, config: config});
@@ -131,21 +132,21 @@ export default function GlobalInterceptor($rootScope, $q, $injector) {
 
     function requestError(rejection) {
         if (rejection.config.url.startsWith('/api/')) {
-            $rootScope.loading = false;
+            updateLoadingState(rejection.config, false);
         }
         return $q.reject(rejection);
     }
 
     function response(response) {
         if (response.config.url.startsWith('/api/')) {
-            $rootScope.loading = false;
+            updateLoadingState(response.config, false);
         }
         return response;
     }
 
     function responseError(rejection) {
         if (rejection.config.url.startsWith('/api/')) {
-            $rootScope.loading = false;
+            updateLoadingState(rejection.config, false);
         }
         var unhandled = false;
         var ignoreErrors = rejection.config.ignoreErrors;
@@ -184,4 +185,10 @@ export default function GlobalInterceptor($rootScope, $q, $injector) {
         }
         return $q.reject(rejection);
     }
+
+    function updateLoadingState(config, isLoading) {
+        if (!config || angular.isUndefined(config.ignoreLoading) || !config.ignoreLoading) {
+            $rootScope.loading = isLoading;
+        }
+    }
 }