From 5ac2ca3a26292f38f143875b7c728e20cd82fc36 Mon Sep 17 00:00:00 2001 From: deaflynx Date: Mon, 6 Jul 2020 13:27:04 +0300 Subject: [PATCH] Added Downlink edge tab. UI data implementation --- ui/src/app/common/types.constant.js | 4 +++ .../event/event-header-edge-event.tpl.html | 23 ++++++++++++ ui/src/app/event/event-header.directive.js | 4 +++ .../app/event/event-row-edge-event.tpl.html | 36 +++++++++++++++++++ ui/src/app/event/event-row.directive.js | 36 ++++++++++++++++++- ui/src/app/event/event-table.directive.js | 31 ++++++++++++++-- ui/src/app/locale/locale.constant-en_US.json | 7 +++- 7 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 ui/src/app/event/event-header-edge-event.tpl.html create mode 100644 ui/src/app/event/event-row-edge-event.tpl.html diff --git a/ui/src/app/common/types.constant.js b/ui/src/app/common/types.constant.js index a4036362c9..960527f3b3 100644 --- a/ui/src/app/common/types.constant.js +++ b/ui/src/app/common/types.constant.js @@ -600,6 +600,10 @@ export default angular.module('thingsboard.types', []) stats: { value: "STATS", name: "event.type-stats" + }, + edgeEvent: { + value: "EDGE_EVENT", + name: "event.type-edge-event" } }, debugEventType: { diff --git a/ui/src/app/event/event-header-edge-event.tpl.html b/ui/src/app/event/event-header-edge-event.tpl.html new file mode 100644 index 0000000000..cdd9dfb20f --- /dev/null +++ b/ui/src/app/event/event-header-edge-event.tpl.html @@ -0,0 +1,23 @@ + +
event.event-time
+
event.event-type
+
edge.entity-id
+
edge.event-action
+
event.success
+
edge.entity-info
diff --git a/ui/src/app/event/event-header.directive.js b/ui/src/app/event/event-header.directive.js index ce0fe4e81c..efe3dab21c 100644 --- a/ui/src/app/event/event-header.directive.js +++ b/ui/src/app/event/event-header.directive.js @@ -19,6 +19,7 @@ import eventHeaderLcEventTemplate from './event-header-lc-event.tpl.html'; import eventHeaderStatsTemplate from './event-header-stats.tpl.html'; import eventHeaderErrorTemplate from './event-header-error.tpl.html'; import eventHeaderDebugRuleNodeTemplate from './event-header-debug-rulenode.tpl.html'; +import eventHeaderEdgeEventTemplate from './event-header-edge-event.tpl.html' /* eslint-enable import/no-unresolved, import/default */ @@ -45,6 +46,9 @@ export default function EventHeaderDirective($compile, $templateCache, types) { case types.debugEventType.debugRuleChain.value: template = eventHeaderDebugRuleNodeTemplate; break; + case types.eventType.edgeEvent.value: + template = eventHeaderEdgeEventTemplate; + break; } return $templateCache.get(template); } diff --git a/ui/src/app/event/event-row-edge-event.tpl.html b/ui/src/app/event/event-row-edge-event.tpl.html new file mode 100644 index 0000000000..a42e39d811 --- /dev/null +++ b/ui/src/app/event/event-row-edge-event.tpl.html @@ -0,0 +1,36 @@ + +
{{event.createdTime | date : 'yyyy-MM-dd HH:mm:ss'}}
+
{{event.edgeEventAction}}
+
{{event.entityId}}
+
{{event.entityType}}
+
{{event.success ? 'event.success' : 'event.failed'}}
+
+ + + {{ 'action.view' | translate }} + + + more_horiz + + +
+ diff --git a/ui/src/app/event/event-row.directive.js b/ui/src/app/event/event-row.directive.js index eec8a1aff6..ae337cfb38 100644 --- a/ui/src/app/event/event-row.directive.js +++ b/ui/src/app/event/event-row.directive.js @@ -21,11 +21,12 @@ import eventRowLcEventTemplate from './event-row-lc-event.tpl.html'; import eventRowStatsTemplate from './event-row-stats.tpl.html'; import eventRowErrorTemplate from './event-row-error.tpl.html'; import eventRowDebugRuleNodeTemplate from './event-row-debug-rulenode.tpl.html'; +import eventRowEdgeEventTemplate from './event-row-edge-event.tpl.html'; /* eslint-enable import/no-unresolved, import/default */ /*@ngInject*/ -export default function EventRowDirective($compile, $templateCache, $mdDialog, $document, types) { +export default function EventRowDirective($compile, $templateCache, $mdDialog, $document, $translate, types, toast, entityService) { var linker = function (scope, element, attrs) { @@ -47,6 +48,9 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $ case types.debugEventType.debugRuleChain.value: template = eventRowDebugRuleNodeTemplate; break; + case types.eventType.edgeEvent.value: + template = eventRowEdgeEventTemplate; + break; } return $templateCache.get(template); } @@ -86,6 +90,36 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $ }); } + scope.showEdgeEntityContent = function($event, title, contentType) { + var onShowingCallback = { + onShowing: function(){} + } + if (!contentType) { + contentType = null; + } + entityService.getEntity(scope.event.entityType, scope.event.entityId, {}).then( + function success(info) { + var content = angular.toJson(info); + $mdDialog.show({ + controller: 'EventContentDialogController', + controllerAs: 'vm', + templateUrl: eventErrorDialogTemplate, + locals: {content: content, title: title, contentType: contentType, showingCallback: onShowingCallback}, + parent: angular.element($document[0].body), + fullscreen: true, + targetEvent: $event, + multiple: true, + onShowing: function(scope, element) { + onShowingCallback.onShowing(scope, element); + } + }); + }, + function fail() { + toast.showError($translate.instant('edge.load-entity-error')); + } + ); + } + scope.checkTooltip = function($event) { var el = $event.target; var $el = angular.element(el); diff --git a/ui/src/app/event/event-table.directive.js b/ui/src/app/event/event-table.directive.js index ff002f069e..7f21dfd57f 100644 --- a/ui/src/app/event/event-table.directive.js +++ b/ui/src/app/event/event-table.directive.js @@ -24,6 +24,27 @@ import eventTableTemplate from './event-table.tpl.html'; /*@ngInject*/ export default function EventTableDirective($compile, $templateCache, $rootScope, types, eventService) { + var edgeData = [ + { + "createdTime": 1593592774537, + "tenantId": "63746950-bb76-11ea-9f96-69d7782607f7", + "edgeId": "85bb84b0-bb78-11ea-8472-c3dbdeb0fd97", + "edgeEventAction": "ASSIGNED_TO_EDGE", + "entityId": "640055a0-bb76-11ea-9f96-69d7782607f7", + "entityType": "DEVICE", + "success": true, + }, + { + "createdTime": 1593592774538, + "tenantId": "63746950-bb76-11ea-9f96-69d7782607f7", + "edgeId": "85bb84b0-bb78-11ea-8472-c3dbdeb0fd97", + "edgeEventAction": "CREDENTIALS_UPDATED", + "entityId": "640055a0-bb76-11ea-9f96-69d7782607f8", + "entityType": "DEVICE", + "success": false + } + ] + var linker = function (scope, element, attrs) { var template = $templateCache.get(eventTableTemplate); @@ -98,7 +119,7 @@ export default function EventTableDirective($compile, $templateCache, $rootScope }, fetchMoreItems_: function () { - if (scope.events.hasNext && !scope.events.pending) { + if (scope.events.hasNext && !scope.events.pending && scope.eventType !== "EDGE_EVENT") { if (scope.entityType && scope.entityId && scope.eventType && scope.tenantId) { var promise = eventService.getEvents(scope.entityType, scope.entityId, scope.eventType, scope.tenantId, scope.events.nextPageLink); @@ -125,12 +146,16 @@ export default function EventTableDirective($compile, $templateCache, $rootScope scope.events.hasNext = false; } } + if (scope.eventType === "EDGE_EVENT") { + scope.events.data = edgeData; + scope.events.nextPageLink = false; + scope.events.hasNext = null; + } } }; scope.$watch("entityId", function(newVal, prevVal) { if (newVal && !angular.equals(newVal, prevVal)) { - scope.resetFilter(); scope.reload(); } }); @@ -141,7 +166,7 @@ export default function EventTableDirective($compile, $templateCache, $rootScope } }); - scope.$watch("timewindow", function(newVal, prevVal) { + scope.$watch("createdTime", function(newVal, prevVal) { if (newVal && !angular.equals(newVal, prevVal)) { scope.reload(); } diff --git a/ui/src/app/locale/locale.constant-en_US.json b/ui/src/app/locale/locale.constant-en_US.json index d6b186c42e..57c54c2556 100644 --- a/ui/src/app/locale/locale.constant-en_US.json +++ b/ui/src/app/locale/locale.constant-en_US.json @@ -791,14 +791,17 @@ "name": "Name", "name-required": "Name is required.", "description": "Description", - "events": "Events", + "entity-info": "Entity info", "details": "Details", + "events": "Events", "copy-id": "Copy Edge Id", "id-copied-message": "Edge Id has been copied to clipboard", "permissions": "Permissions", "edge-required": "Edge required", "edge-type": "Edge type", "edge-type-required": "Edge type is required.", + "event-action": "Event action", + "entity-id": "Entity ID", "select-edge-type": "Select edge type", "assign-to-customer": "Assign to customer", "assign-to-customer-text": "Please select the customer to assign the edge(s)", @@ -818,6 +821,7 @@ "make-private-edge-text": "After the confirmation the edge and all its data will be made private and won't be accessible by others.", "import": "Import edge", "label": "Label", + "load-entity-error": "Could not load entity info", "assign-new-edge": "Assign new edge", "manage-edge-dashboards": "Manage edge dashboards", "unassign-from-edge": "Unassign from edge", @@ -1082,6 +1086,7 @@ "type-debug-rule-chain": "Debug", "no-events-prompt": "No events found", "error": "Error", + "type-edge-event": "Downlink", "alarm": "Alarm", "event-time": "Event time", "server": "Server",