thingsboard-developers
Details
ui/src/app/device/devices.tpl.html 1(+0 -1)
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>
ui/src/app/locale/locale.constant.js 16(+8 -8)
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",