merge from feature/TB-74
This commit is contained in:
parent
e034733a69
commit
0098a94db8
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
<md-content flex class="md-padding tb-absolute-fill" layout="column">
|
<md-content flex class="md-padding tb-absolute-fill" layout="column">
|
||||||
<section layout="row" ng-show="!disableAttributeScopeSelection">
|
<section ng-show="!disableAttributeScopeSelection">
|
||||||
<md-input-container class="md-block" style="width: 200px;">
|
<md-input-container class="md-block" style="width: 200px;">
|
||||||
<label translate>attribute.attributes-scope</label>
|
<label translate>attribute.attributes-scope</label>
|
||||||
<md-select ng-model="attributeScope" ng-disabled="loading() || attributeScopeSelectionReadonly">
|
<md-select ng-model="attributeScope" ng-disabled="loading() || attributeScopeSelectionReadonly">
|
||||||
@ -26,7 +26,7 @@
|
|||||||
</md-select>
|
</md-select>
|
||||||
</md-input-container>
|
</md-input-container>
|
||||||
</section>
|
</section>
|
||||||
<div layout="column" class="md-whiteframe-z1" ng-class="{flex: mode==='widget'}">
|
<div class="md-whiteframe-z1" ng-class="{flex: mode==='widget'}">
|
||||||
<md-toolbar class="md-table-toolbar md-default" ng-show="mode==='default'
|
<md-toolbar class="md-table-toolbar md-default" ng-show="mode==='default'
|
||||||
&& !selectedAttributes.length
|
&& !selectedAttributes.length
|
||||||
&& query.search === null">
|
&& query.search === null">
|
||||||
|
|||||||
@ -33,7 +33,8 @@ export default function ExtensionTableDirective() {
|
|||||||
scope: true,
|
scope: true,
|
||||||
bindToController: {
|
bindToController: {
|
||||||
entityId: '=',
|
entityId: '=',
|
||||||
entityType: '@'
|
entityType: '@',
|
||||||
|
transferredAttributes: '<'
|
||||||
},
|
},
|
||||||
controller: ExtensionTableController,
|
controller: ExtensionTableController,
|
||||||
controllerAs: 'vm',
|
controllerAs: 'vm',
|
||||||
@ -82,6 +83,51 @@ function ExtensionTableController($scope, $filter, $document, $translate, types,
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$scope.$watch('vm.transferredAttributes', function () {
|
||||||
|
if (vm.transferredAttributes && vm.transferredAttributes.data && vm.transferredAttributes.data.length) {
|
||||||
|
vm.transferredAttributes.data
|
||||||
|
.some(attribute=>{
|
||||||
|
if (attribute.key === "appliedConfiguration") {
|
||||||
|
vm.appliedConfiguration = attribute.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
checkForSync();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
checkForSync();
|
||||||
|
function checkForSync() {
|
||||||
|
if (vm.appliedConfiguration === vm.extensionsJSON) {
|
||||||
|
vm.syncStatus = $translate.instant('extension.sync.sync');
|
||||||
|
vm.syncLastTime = formatDate();
|
||||||
|
} else {
|
||||||
|
vm.syncStatus = $translate.instant('extension.sync.not-sync');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function formatDate(date) {
|
||||||
|
let d;
|
||||||
|
if (date) {
|
||||||
|
d = date;
|
||||||
|
} else {
|
||||||
|
d = new Date();
|
||||||
|
}
|
||||||
|
|
||||||
|
d = d.getFullYear() +'/'+ addZero(d.getMonth()+1) +'/'+ addZero(d.getDate()) + ' ' + addZero(d.getHours()) + ':' + addZero(d.getMinutes()) +':'+ addZero(d.getSeconds());
|
||||||
|
return d;
|
||||||
|
|
||||||
|
|
||||||
|
function addZero(num) {
|
||||||
|
if ((angular.isNumber(num) && num < 10) || (angular.isString(num) && num.length === 1)) {
|
||||||
|
num = '0' + num;
|
||||||
|
}
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function enterFilterMode() {
|
function enterFilterMode() {
|
||||||
vm.query.search = '';
|
vm.query.search = '';
|
||||||
}
|
}
|
||||||
@ -238,5 +284,61 @@ function ExtensionTableController($scope, $filter, $document, $translate, types,
|
|||||||
vm.extensionsCount = result.length;
|
vm.extensionsCount = result.length;
|
||||||
var startIndex = vm.query.limit * (vm.query.page - 1);
|
var startIndex = vm.query.limit * (vm.query.page - 1);
|
||||||
vm.extensions = result.slice(startIndex, startIndex + vm.query.limit);
|
vm.extensions = result.slice(startIndex, startIndex + vm.query.limit);
|
||||||
|
vm.extensionsJSON = angular.toJson(vm.extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// vm.subscriptionId = null;
|
||||||
|
// $scope.checkSubscription = function() {
|
||||||
|
// var newSubscriptionId = null;
|
||||||
|
// if (vm.entityId && vm.entityType) {
|
||||||
|
// newSubscriptionId = attributeService.subscribeForEntityAttributes(vm.entityType, vm.entityId, 'extension/SHARED_SCOPE');
|
||||||
|
// }
|
||||||
|
// if (vm.subscriptionId && vm.subscriptionId != newSubscriptionId) {
|
||||||
|
// attributeService.unsubscribeForEntityAttributes(vm.subscriptionId);
|
||||||
|
// }
|
||||||
|
// vm.subscriptionId = newSubscriptionId;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // $scope.attributesData = {};
|
||||||
|
// // var entityAttributesSubscriptionMap = [];
|
||||||
|
// //
|
||||||
|
// $scope.subscribeForEntityAttributes = function (entityType=vm.entityType, entityId=vm.entityId, attributeScope="SHARED_SCOPE") {
|
||||||
|
// var subscriptionId = entityType + entityId + attributeScope;
|
||||||
|
// var entityAttributesSubscription = entityAttributesSubscriptionMap[subscriptionId];
|
||||||
|
// if (!entityAttributesSubscription) {
|
||||||
|
// var subscriptionCommand = {
|
||||||
|
// entityType: entityType,
|
||||||
|
// entityId: entityId,
|
||||||
|
// scope: attributeScope
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// var type = attributeScope === types.latestTelemetry.value ?
|
||||||
|
// types.dataKeyType.timeseries : types.dataKeyType.attribute;
|
||||||
|
//
|
||||||
|
// var subscriber = {
|
||||||
|
// subscriptionCommands: [subscriptionCommand],
|
||||||
|
// type: type,
|
||||||
|
// onData: function (data) {
|
||||||
|
// if (data.data) {
|
||||||
|
// onSubscriptionData(data.data, subscriptionId);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// entityAttributesSubscription = {
|
||||||
|
// subscriber: subscriber,
|
||||||
|
// attributes: null
|
||||||
|
// };
|
||||||
|
// entityAttributesSubscriptionMap[subscriptionId] = entityAttributesSubscription;
|
||||||
|
// telemetryWebsocketService.subscribe(subscriber);
|
||||||
|
// }
|
||||||
|
// return subscriptionId;
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// function onSubscriptionData(data/*, subscriptionId*/) {
|
||||||
|
// $scope.attributesData = data;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// telemetryWebsocketService.subscribe(subscriber);
|
||||||
}
|
}
|
||||||
@ -14,3 +14,18 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
@import '../../scss/constants';
|
@import '../../scss/constants';
|
||||||
|
|
||||||
|
|
||||||
|
.extension-table md-input-container .md-errors-spacer {
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.extension__syncStatus--black {
|
||||||
|
color: #000000!important;
|
||||||
|
}
|
||||||
|
.extension__syncStatus--green {
|
||||||
|
color: #228634!important;
|
||||||
|
}
|
||||||
|
.extension__syncStatus--red {
|
||||||
|
color: #862222!important;
|
||||||
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<md-content flex class="md-padding tb-absolute-fill tb-data-table" layout="column">
|
<md-content flex class="md-padding tb-absolute-fill tb-data-table extension-table" layout="column">
|
||||||
<div layout="column" class="md-whiteframe-z1">
|
<div layout="column" class="md-whiteframe-z1">
|
||||||
<md-toolbar class="md-table-toolbar md-default" ng-show="!vm.selectedExtensions.length
|
<md-toolbar class="md-table-toolbar md-default" ng-show="!vm.selectedExtensions.length
|
||||||
&& vm.query.search === null">
|
&& vm.query.search === null">
|
||||||
@ -78,6 +78,25 @@
|
|||||||
</md-button>
|
</md-button>
|
||||||
</div>
|
</div>
|
||||||
</md-toolbar>
|
</md-toolbar>
|
||||||
|
|
||||||
|
<div class="md-padding" flex layout="row">
|
||||||
|
<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}"
|
||||||
|
disabled
|
||||||
|
>
|
||||||
|
</md-input-container>
|
||||||
|
|
||||||
|
<md-input-container flex="50" class="md-block">
|
||||||
|
<label translate>extension.sync.last-sync-time</label>
|
||||||
|
<input ng-model="vm.syncLastTime"
|
||||||
|
class="extension__syncStatus--black"
|
||||||
|
disabled
|
||||||
|
>
|
||||||
|
</md-input-container>
|
||||||
|
</div>
|
||||||
|
|
||||||
<md-table-container>
|
<md-table-container>
|
||||||
<table md-table md-row-select multiple="" ng-model="vm.selectedExtensions" md-progress="vm.extensionsDeferred.promise">
|
<table md-table md-row-select multiple="" ng-model="vm.selectedExtensions" md-progress="vm.extensionsDeferred.promise">
|
||||||
<thead md-head md-order="vm.query.order" md-on-reorder="vm.onReorder">
|
<thead md-head md-order="vm.query.order" md-on-reorder="vm.onReorder">
|
||||||
|
|||||||
@ -777,6 +777,14 @@ export default angular.module('thingsboard.locale', [])
|
|||||||
"timeseries": "Timeseries",
|
"timeseries": "Timeseries",
|
||||||
"add-timeseries": "Add timeseries",
|
"add-timeseries": "Add timeseries",
|
||||||
|
|
||||||
|
|
||||||
|
"sync": {
|
||||||
|
"status": "Status",
|
||||||
|
"sync": "Sync",
|
||||||
|
"not-sync": "Not sync",
|
||||||
|
"last-sync-time": "Last sync time",
|
||||||
|
},
|
||||||
|
|
||||||
"opc-field-required": "Field is required",
|
"opc-field-required": "Field is required",
|
||||||
"opc-server": "Servers",
|
"opc-server": "Servers",
|
||||||
"opc-add-server-hint": "Add server",
|
"opc-add-server-hint": "Add server",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user