thingsboard-developers

fix devices attributes sync label

11/30/2017 12:15:18 PM

Details

diff --git a/ui/src/app/device/devices.tpl.html b/ui/src/app/device/devices.tpl.html
index e0760c3..bc66a79 100644
--- a/ui/src/app/device/devices.tpl.html
+++ b/ui/src/app/device/devices.tpl.html
@@ -71,7 +71,6 @@
             <tb-extension-table flex
                                 entity-id="vm.grid.operatingItem().id.id"
                                 entity-type="{{vm.types.entityType.device}}">
-
             </tb-extension-table>
         </md-tab>
 </tb-grid>
diff --git a/ui/src/app/extension/extension-table.directive.js b/ui/src/app/extension/extension-table.directive.js
index f4f69c4..8ad8275 100644
--- a/ui/src/app/extension/extension-table.directive.js
+++ b/ui/src/app/extension/extension-table.directive.js
@@ -25,6 +25,7 @@ import extensionDialogTemplate from './extension-dialog.tpl.html';
 /* eslint-enable import/no-unresolved, import/default */
 
 import ExtensionDialogController from './extension-dialog.controller'
+import $ from 'jquery';
 
 /*@ngInject*/
 export default function ExtensionTableDirective() {
@@ -72,6 +73,15 @@ function ExtensionTableController($scope, $filter, $document, $translate, types,
 
     $scope.$watch("vm.entityId", function(newVal) {
         if (newVal) {
+            if ($scope.subscriber) {
+                telemetryWebsocketService.unsubscribe($scope.subscriber);
+            }
+
+            vm.subscribed = false;
+            vm.syncLastTime = $translate.instant('extension.sync.not-available');
+
+            subscribeForClientAttributes();
+
             reloadExtensions();
         }
     });
@@ -205,12 +215,18 @@ function ExtensionTableController($scope, $filter, $document, $translate, types,
     }
 
     function reloadExtensions() {
+        vm.subscribed = false;
         vm.allExtensions.length = 0;
         vm.extensions.length = 0;
         vm.extensionsPromise = attributeService.getEntityAttributesValues(vm.entityType, vm.entityId, types.attributesScope.shared.value, ["configuration"]);
         vm.extensionsPromise.then(
             function success(data) {
-                vm.allExtensions = angular.fromJson(data[0].value);
+                if (data.length) {
+                    vm.allExtensions = angular.fromJson(data[0].value);
+                } else {
+                    vm.allExtensions = [];
+                }
+
                 vm.selectedExtensions = [];
                 updateExtensions();
                 vm.extensionsPromise = null;
@@ -238,52 +254,58 @@ function ExtensionTableController($scope, $filter, $document, $translate, types,
         vm.extensionsCount = result.length;
         var startIndex = vm.query.limit * (vm.query.page - 1);
         vm.extensions = result.slice(startIndex, startIndex + vm.query.limit);
-        vm.extensionsJSON = angular.toJson(vm.extensions);
-    }
-
 
+        vm.extensionsJSON = angular.toJson(vm.extensions);
+        checkForSync()
 
-    if (vm.entityId && vm.entityType) {
-        $scope.subscriber = {
-            subscriptionCommands: [{
-                entityType: vm.entityType,
-                entityId: vm.entityId,
-                scope: 'CLIENT_SCOPE'
-            }],
-            type: 'attribute',
-            onData: function (data) {
-                if (data.data) {
-                    onSubscriptionData(data.data);
-                }
-            }
-        };
     }
-    telemetryWebsocketService.subscribe($scope.subscriber);
-
-
-    $scope.$on('$destroy', function() {
-        telemetryWebsocketService.unsubscribe($scope.subscriber);
-    });
-
-
 
+    function subscribeForClientAttributes() {
+        if (!vm.subscribed) {
+            if (vm.entityId && vm.entityType) {
+                $scope.subscriber = {
+                    subscriptionCommands: [{
+                        entityType: vm.entityType,
+                        entityId: vm.entityId,
+                        scope: 'CLIENT_SCOPE'
+                    }],
+                    type: 'attribute',
+                    onData: function (data) {
+                        if (data.data) {
+                            onSubscriptionData(data.data);
+                        }
+                        vm.subscribed = true;
+                    }
+                };
+            }
+            telemetryWebsocketService.subscribe($scope.subscriber);
 
+        }
+    }
     function onSubscriptionData(data) {
-        if (data.appliedConfiguration && data.appliedConfiguration[0] && data.appliedConfiguration[0][1]) {
-            vm.appliedConfiguration = data.appliedConfiguration[0][1];
-            checkForSync();
-            $scope.$digest();
+
+        if ($.isEmptyObject(data)) {
+            vm.appliedConfiguration = undefined;
+        } else {
+            if (data.appliedConfiguration && data.appliedConfiguration[0] && data.appliedConfiguration[0][1]) {
+                vm.appliedConfiguration = data.appliedConfiguration[0][1];
+            }
         }
+
+        updateExtensions();
+        $scope.$digest();
     }
 
 
-    checkForSync();
     function checkForSync() {
-        if (vm.appliedConfiguration === vm.extensionsJSON) {
+        if (vm.appliedConfiguration && vm.extensionsJSON && vm.appliedConfiguration === vm.extensionsJSON) {
             vm.syncStatus = $translate.instant('extension.sync.sync');
             vm.syncLastTime = formatDate();
+            $scope.isSync = true;
         } else {
             vm.syncStatus = $translate.instant('extension.sync.not-sync');
+
+            $scope.isSync = false;
         }
     }
 
@@ -306,7 +328,4 @@ function ExtensionTableController($scope, $filter, $document, $translate, types,
             return num;
         }
     }
-
-
-    //telemetryWebsocketService.subscribe(subscriber);
 }
\ No newline at end of file
diff --git a/ui/src/app/extension/extension-table.tpl.html b/ui/src/app/extension/extension-table.tpl.html
index 3a42576..428a146 100644
--- a/ui/src/app/extension/extension-table.tpl.html
+++ b/ui/src/app/extension/extension-table.tpl.html
@@ -83,7 +83,7 @@
             <md-input-container flex="50" class="md-block">
                 <label translate>extension.sync.status</label>
                 <input ng-model="vm.syncStatus"
-                       ng-class="{'extension__syncStatus--green':vm.appliedConfiguration === vm.extensionsJSON, 'extension__syncStatus--red':vm.appliedConfiguration !== vm.extensionsJSON}"
+                       ng-class="{'extension__syncStatus--green':isSync, 'extension__syncStatus--red':!isSync}"
                        disabled
                 >
             </md-input-container>
diff --git a/ui/src/app/locale/locale.constant.js b/ui/src/app/locale/locale.constant.js
index cfad986..089a0f5 100644
--- a/ui/src/app/locale/locale.constant.js
+++ b/ui/src/app/locale/locale.constant.js
@@ -766,14 +766,6 @@ export default angular.module('thingsboard.locale', [])
                     "add-map": "Add mapping element",
                     "timeseries": "Timeseries",
                     "add-timeseries": "Add timeseries",
-
-                    "sync": {
-                        "status": "Status",
-                        "sync": "Sync",
-                        "not-sync": "Not sync",
-                        "last-sync-time": "Last sync time",
-                    },
-
                     "field-required": "Field is required",
                     "brokers": "Brokers",
                     "add-broker": "Add broker",
@@ -847,6 +839,14 @@ export default angular.module('thingsboard.locale', [])
                     "opc-keystore-key-password":"Key password",
                     "opc-device-node-pattern":"Device node pattern",
                     "opc-device-name-pattern":"Device name pattern",
+
+                    "sync": {
+                        "status": "Status",
+                        "sync": "Sync",
+                        "not-sync": "Not sync",
+                        "last-sync-time": "Last sync time",
+                        "not-available": "Not available"
+                    },
                 },
                 "fullscreen": {
                     "expand": "Expand to fullscreen",