Commit 501c7d1926375314644461cce5bdf052cecaf04d
1 parent
a0e74d72
Edge Downlinks new tab final implementation
Showing
20 changed files
with
81 additions
and
563 deletions
... | ... | @@ -384,7 +384,7 @@ export default angular.module('thingsboard.types', []) |
384 | 384 | entityView: "ENTITY_VIEW", |
385 | 385 | edge: "EDGE" |
386 | 386 | }, |
387 | - edgeEventType:{ | |
387 | + edgeDownlinksType:{ | |
388 | 388 | dashboard: "DASHBOARD", |
389 | 389 | asset: "ASSET", |
390 | 390 | device: "DEVICE", |
... | ... | @@ -405,7 +405,7 @@ export default angular.module('thingsboard.types', []) |
405 | 405 | widgetType: "WIDGET_TYPE", |
406 | 406 | adminSettings: "ADMIN_SETTINGS" |
407 | 407 | }, |
408 | - edgeEventStatus: { | |
408 | + edgeDownlinksStatus: { | |
409 | 409 | "DEPLOYED": { |
410 | 410 | name: "edge.deployed", |
411 | 411 | color: grey900 |
... | ... | @@ -1073,7 +1073,7 @@ export default angular.module('thingsboard.types', []) |
1073 | 1073 | translate: { |
1074 | 1074 | customTranslationsPrefix: "custom." |
1075 | 1075 | }, |
1076 | - edgeEventActionType: { | |
1076 | + edgeDownlinksActionType: { | |
1077 | 1077 | "ADDED": { |
1078 | 1078 | name: "audit-log.type-added" |
1079 | 1079 | }, |
... | ... | @@ -1135,7 +1135,7 @@ export default angular.module('thingsboard.types', []) |
1135 | 1135 | name: "audit-log.type-unassigned-from-edge" |
1136 | 1136 | } |
1137 | 1137 | }, |
1138 | - edgeEventTypeTranslations:{ | |
1138 | + edgeDownlinksTypeTranslations:{ | |
1139 | 1139 | "DASHBOARD": { |
1140 | 1140 | name: "entity.type-dashboard" |
1141 | 1141 | }, |
... | ... | @@ -1193,10 +1193,6 @@ export default angular.module('thingsboard.types', []) |
1193 | 1193 | "ADMIN_SETTINGS": { |
1194 | 1194 | name: "permission.resource.display-type.ADMIN_SETTINGS" |
1195 | 1195 | } |
1196 | - }, | |
1197 | - edgeDownlinks: { | |
1198 | - value: "EDGE_DOWNLINKS", | |
1199 | - name: "edge.downlinks" | |
1200 | 1196 | } |
1201 | 1197 | } |
1202 | 1198 | ).name; | ... | ... |
ui/src/app/edge/downlinks/downlink.scss
renamed from
ui/src/app/edge/downlinks/event.scss
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -md-list.tb-event-table { | |
16 | +md-list.tb-edge-downlinks-table { | |
17 | 17 | padding: 0; |
18 | 18 | |
19 | 19 | md-list-item { |
... | ... | @@ -85,11 +85,7 @@ md-list.tb-event-table { |
85 | 85 | } |
86 | 86 | } |
87 | 87 | |
88 | -.tb-edge-downlinks-table-2 { | |
89 | - @extend .tb-event-table; | |
90 | -} | |
91 | - | |
92 | -#tb-event-content { | |
88 | +#tb-edge-downlinks-content { | |
93 | 89 | width: 100%; |
94 | 90 | min-width: 400px; |
95 | 91 | height: 100%; | ... | ... |
... | ... | @@ -76,7 +76,7 @@ export default function EdgeDownlinksContentDialogController($mdDialog, types, c |
76 | 76 | } |
77 | 77 | newWidth = 8 * maxLineLength + 16; |
78 | 78 | } |
79 | - $('#tb-event-content', element).height(newHeight.toString() + "px") | |
79 | + $('#tb-edge-downlinks-content', element).height(newHeight.toString() + "px") | |
80 | 80 | .width(newWidth.toString() + "px"); |
81 | 81 | vm.editor.resize(); |
82 | 82 | } | ... | ... |
ui/src/app/edge/downlinks/edge-downlinks-content-dialog.tpl.html
renamed from
ui/src/app/edge/downlinks/event-content-dialog.tpl.html
... | ... | @@ -15,34 +15,19 @@ |
15 | 15 | */ |
16 | 16 | /* eslint-disable import/no-unresolved, import/default */ |
17 | 17 | |
18 | -import edgeDownlinksHeaderTemplate from './event-header-edge-event.tpl.html' | |
18 | +import edgeDownlinksHeaderTemplate from './edge-downlinks-header.tpl.html' | |
19 | 19 | |
20 | 20 | /* eslint-enable import/no-unresolved, import/default */ |
21 | 21 | |
22 | 22 | /*@ngInject*/ |
23 | -export default function EventHeaderDirective2($compile, $templateCache, types) { | |
23 | +export default function EdgeDownlinksHeaderDirective($compile, $templateCache) { | |
24 | 24 | |
25 | - var linker = function (scope, element, attrs) { | |
25 | + var linker = function (scope, element) { | |
26 | 26 | |
27 | - var getTemplate = function(eventType) { | |
28 | - var template = ''; | |
29 | - switch(eventType) { | |
30 | - case types.edgeDownlinks.value: | |
31 | - template = edgeDownlinksHeaderTemplate; | |
32 | - break; | |
33 | - } | |
34 | - return $templateCache.get(template); | |
35 | - } | |
36 | - | |
37 | - scope.loadTemplate = function() { | |
38 | - element.html(getTemplate(attrs.eventType)); | |
39 | - $compile(element.contents())(scope); | |
40 | - } | |
41 | - | |
42 | - attrs.$observe('eventType', function() { | |
43 | - scope.loadTemplate(); | |
44 | - }); | |
27 | + var template = edgeDownlinksHeaderTemplate; | |
45 | 28 | |
29 | + element.html($templateCache.get(template)); | |
30 | + $compile(element.contents())(scope); | |
46 | 31 | } |
47 | 32 | |
48 | 33 | return { | ... | ... |
ui/src/app/edge/downlinks/edge-downlinks-header.tpl.html
renamed from
ui/src/app/edge/downlinks/event-header-edge-event.tpl.html
... | ... | @@ -15,40 +15,24 @@ |
15 | 15 | */ |
16 | 16 | /* eslint-disable import/no-unresolved, import/default */ |
17 | 17 | |
18 | -import eventErrorDialogTemplate from './event-content-dialog.tpl.html'; | |
19 | - | |
20 | -import edgeDownlinlsRowTemplate from './event-row-edge-event.tpl.html'; | |
18 | +import edgeDownlinksContentTemplate from './edge-downlinks-content-dialog.tpl.html'; | |
19 | +import edgeDownlinlsRowTemplate from './edge-downlinks-row.tpl.html'; | |
21 | 20 | |
22 | 21 | /* eslint-enable import/no-unresolved, import/default */ |
23 | 22 | |
24 | 23 | /*@ngInject*/ |
25 | -export default function EventRowDirective2($compile, $templateCache, $mdDialog, $document, $translate, | |
24 | +export default function EdgeDownlinksRowDirective($compile, $templateCache, $mdDialog, $document, $translate, | |
26 | 25 | types, utils, toast, entityService, ruleChainService) { |
27 | 26 | |
28 | 27 | var linker = function (scope, element, attrs) { |
29 | 28 | |
30 | - var getTemplate = function(eventType) { | |
31 | - var template = ''; | |
32 | - switch(eventType) { | |
33 | - case types.edgeDownlinks.value: | |
34 | - template = edgeDownlinlsRowTemplate; | |
35 | - break; | |
36 | - } | |
37 | - return $templateCache.get(template); | |
38 | - } | |
39 | - | |
40 | - scope.loadTemplate = function() { | |
41 | - element.html(getTemplate(attrs.eventType)); | |
42 | - $compile(element.contents())(scope); | |
43 | - } | |
29 | + var template = edgeDownlinlsRowTemplate; | |
44 | 30 | |
45 | - attrs.$observe('eventType', function() { | |
46 | - scope.loadTemplate(); | |
47 | - }); | |
31 | + element.html($templateCache.get(template)); | |
32 | + $compile(element.contents())(scope); | |
48 | 33 | |
49 | 34 | scope.types = types; |
50 | - | |
51 | - scope.event = attrs.event; | |
35 | + scope.downlink = attrs.downlink; | |
52 | 36 | |
53 | 37 | scope.showEdgeEntityContent = function($event, title, contentType) { |
54 | 38 | var onShowingCallback = { |
... | ... | @@ -58,13 +42,13 @@ export default function EventRowDirective2($compile, $templateCache, $mdDialog, |
58 | 42 | contentType = null; |
59 | 43 | } |
60 | 44 | var content = ''; |
61 | - switch(scope.event.type) { | |
62 | - case types.edgeEventType.relation: | |
63 | - content = angular.toJson(scope.event.body); | |
45 | + switch(scope.downlink.type) { | |
46 | + case types.edgeDownlinksType.relation: | |
47 | + content = angular.toJson(scope.downlink.body); | |
64 | 48 | showDialog(); |
65 | 49 | break; |
66 | - case types.edgeEventType.ruleChainMetaData: | |
67 | - content = ruleChainService.getRuleChainMetaData(scope.event.entityId, {ignoreErrors: true}).then( | |
50 | + case types.edgeDownlinksType.ruleChainMetaData: | |
51 | + content = ruleChainService.getRuleChainMetaData(scope.downlink.entityId, {ignoreErrors: true}).then( | |
68 | 52 | function success(info) { |
69 | 53 | showDialog(); |
70 | 54 | return angular.toJson(info); |
... | ... | @@ -73,7 +57,7 @@ export default function EventRowDirective2($compile, $templateCache, $mdDialog, |
73 | 57 | }); |
74 | 58 | break; |
75 | 59 | default: |
76 | - content = entityService.getEntity(scope.event.type, scope.event.entityId, {ignoreErrors: true}).then( | |
60 | + content = entityService.getEntity(scope.downlink.type, scope.downlink.entityId, {ignoreErrors: true}).then( | |
77 | 61 | function success(info) { |
78 | 62 | showDialog(); |
79 | 63 | return angular.toJson(info); |
... | ... | @@ -84,9 +68,9 @@ export default function EventRowDirective2($compile, $templateCache, $mdDialog, |
84 | 68 | } |
85 | 69 | function showDialog() { |
86 | 70 | $mdDialog.show({ |
87 | - controller: 'EventContentDialogController2', | |
71 | + controller: 'EdgeDownlinksContentDialogController', | |
88 | 72 | controllerAs: 'vm', |
89 | - templateUrl: eventErrorDialogTemplate, | |
73 | + templateUrl: edgeDownlinksContentTemplate, | |
90 | 74 | locals: {content: content, title: title, contentType: contentType, showingCallback: onShowingCallback}, |
91 | 75 | parent: angular.element($document[0].body), |
92 | 76 | fullscreen: true, |
... | ... | @@ -102,10 +86,10 @@ export default function EventRowDirective2($compile, $templateCache, $mdDialog, |
102 | 86 | } |
103 | 87 | } |
104 | 88 | |
105 | - scope.checkEdgeEventType = function (type) { | |
106 | - return !(type === types.edgeEventType.widgetType || | |
107 | - type === types.edgeEventType.adminSettings || | |
108 | - type === types.edgeEventType.widgetsBundle ); | |
89 | + scope.checkEdgeDownlinksType = function (type) { | |
90 | + return !(type === types.edgeDownlinksType.widgetType || | |
91 | + type === types.edgeDownlinksType.adminSettings || | |
92 | + type === types.edgeDownlinksType.widgetsBundle ); | |
109 | 93 | } |
110 | 94 | |
111 | 95 | scope.checkTooltip = function($event) { |
... | ... | @@ -118,14 +102,14 @@ export default function EventRowDirective2($compile, $templateCache, $mdDialog, |
118 | 102 | |
119 | 103 | $compile(element.contents())(scope); |
120 | 104 | |
121 | - scope.updateStatus = function(eventCreatedTime) { | |
105 | + scope.updateStatus = function(downlinkCreatedTime) { | |
122 | 106 | var status; |
123 | - if (eventCreatedTime < scope.queueStartTs) { | |
124 | - status = $translate.instant(types.edgeEventStatus.DEPLOYED.name); | |
125 | - scope.statusColor = types.edgeEventStatus.DEPLOYED.color; | |
107 | + if (downlinkCreatedTime < scope.queueStartTs) { | |
108 | + status = $translate.instant(types.edgeDownlinksStatus.DEPLOYED.name); | |
109 | + scope.statusColor = types.edgeDownlinksStatus.DEPLOYED.color; | |
126 | 110 | } else { |
127 | - status = $translate.instant(types.edgeEventStatus.PENDING.name); | |
128 | - scope.statusColor = types.edgeEventStatus.PENDING.color; | |
111 | + status = $translate.instant(types.edgeDownlinksStatus.PENDING.name); | |
112 | + scope.statusColor = types.edgeDownlinksStatus.PENDING.color; | |
129 | 113 | } |
130 | 114 | return status; |
131 | 115 | } | ... | ... |
ui/src/app/edge/downlinks/edge-downlinks-row.tpl.html
renamed from
ui/src/app/edge/downlinks/event-row-edge-event.tpl.html
... | ... | @@ -15,13 +15,13 @@ |
15 | 15 | limitations under the License. |
16 | 16 | |
17 | 17 | --> |
18 | -<div class="tb-cell" flex="20">{{ event.createdTime | date : 'yyyy-MM-dd HH:mm:ss' }}</div> | |
19 | -<div class="tb-cell" flex="10">{{ event.edgeEventTypeText }}</div> | |
20 | -<div class="tb-cell" flex="15">{{ event.edgeEventActionText }}</div> | |
21 | -<div class="tb-cell" flex="30">{{ event.entityId }}</div> | |
22 | -<div class="tb-cell" flex="15" ng-style="{'color': statusColor}">{{ updateStatus(event.createdTime) }}</div> | |
18 | +<div class="tb-cell" flex="20">{{ downlink.createdTime | date : 'yyyy-MM-dd HH:mm:ss' }}</div> | |
19 | +<div class="tb-cell" flex="10">{{ downlink.edgeDownlinksTypeText }}</div> | |
20 | +<div class="tb-cell" flex="15">{{ downlink.edgeDownlinksActionText }}</div> | |
21 | +<div class="tb-cell" flex="30">{{ downlink.entityId }}</div> | |
22 | +<div class="tb-cell" flex="15" ng-style="{'color': statusColor}">{{ updateStatus(downlink.createdTime) }}</div> | |
23 | 23 | <div class="tb-cell" flex="10"> |
24 | - <md-button ng-if="checkEdgeEventType(event.type)" class="md-icon-button md-primary" | |
24 | + <md-button ng-if="checkEdgeDownlinksType(downlink.type)" class="md-icon-button md-primary" | |
25 | 25 | ng-click="showEdgeEntityContent($event, 'edge.entity-info', 'JSON')" |
26 | 26 | aria-label="{{ 'action.view' | translate }}"> |
27 | 27 | <md-tooltip md-direction="top"> | ... | ... |
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -import './event.scss'; | |
16 | +import './downlink.scss'; | |
17 | 17 | |
18 | 18 | /* eslint-disable import/no-unresolved, import/default */ |
19 | 19 | |
... | ... | @@ -22,17 +22,13 @@ import edgeDownlinksTableTemplate from './edge-downlinks-table.tpl.html'; |
22 | 22 | /* eslint-enable import/no-unresolved, import/default */ |
23 | 23 | |
24 | 24 | /*@ngInject*/ |
25 | -export default function EdgeDownlinksDirective2($compile, $templateCache, $rootScope, $translate, types, | |
26 | - eventService, edgeService, attributeService) { | |
25 | +export default function EdgeDownlinksDirective($compile, $templateCache, $rootScope, $translate, types, edgeService, attributeService) { | |
27 | 26 | |
28 | 27 | var linker = function (scope, element) { |
29 | 28 | |
30 | 29 | var template = $templateCache.get(edgeDownlinksTableTemplate); |
31 | - | |
32 | 30 | element.html(template); |
33 | 31 | |
34 | - scope.eventType = types.edgeDownlinks.value; | |
35 | - | |
36 | 32 | var pageSize = 20; |
37 | 33 | var startTime = 0; |
38 | 34 | var endTime = 0; |
... | ... | @@ -45,13 +41,13 @@ export default function EdgeDownlinksDirective2($compile, $templateCache, $rootS |
45 | 41 | |
46 | 42 | scope.topIndex = 0; |
47 | 43 | |
48 | - scope.theEvents = { | |
44 | + scope.theDownlinks = { | |
49 | 45 | getItemAtIndex: function (index) { |
50 | - if (index > scope.events.data.length) { | |
51 | - scope.theEvents.fetchMoreItems_(index); | |
46 | + if (index > scope.downlinks.data.length) { | |
47 | + scope.theDownlinks.fetchMoreItems_(index); | |
52 | 48 | return null; |
53 | 49 | } |
54 | - var item = scope.events.data[index]; | |
50 | + var item = scope.downlinks.data[index]; | |
55 | 51 | if (item) { |
56 | 52 | item.indexNumber = index + 1; |
57 | 53 | } |
... | ... | @@ -59,34 +55,34 @@ export default function EdgeDownlinksDirective2($compile, $templateCache, $rootS |
59 | 55 | }, |
60 | 56 | |
61 | 57 | getLength: function () { |
62 | - if (scope.events.hasNext) { | |
63 | - return scope.events.data.length + scope.events.nextPageLink.limit; | |
58 | + if (scope.downlinks.hasNext) { | |
59 | + return scope.downlinks.data.length + scope.downlinks.nextPageLink.limit; | |
64 | 60 | } else { |
65 | - return scope.events.data.length; | |
61 | + return scope.downlinks.data.length; | |
66 | 62 | } |
67 | 63 | }, |
68 | 64 | |
69 | 65 | fetchMoreItems_: function () { |
70 | - if (scope.events.hasNext && !scope.events.pending) { | |
71 | - if (scope.entityType && scope.entityId && scope.eventType && scope.tenantId) { | |
66 | + if (scope.downlinks.hasNext && !scope.downlinks.pending) { | |
67 | + if (scope.entityType && scope.entityId && scope.tenantId) { | |
72 | 68 | scope.loadEdgeInfo(); |
73 | - scope.events.pending = true; | |
74 | - edgeService.getEdgeDownlinks(scope.entityId, scope.events.nextPageLink).then( | |
75 | - function success(events) { | |
76 | - scope.events.data = scope.events.data.concat(prepareEdgeEventData(events.data)); | |
77 | - scope.events.nextPageLink = events.nextPageLink; | |
78 | - scope.events.hasNext = events.hasNext; | |
79 | - if (scope.events.hasNext) { | |
80 | - scope.events.nextPageLink.limit = pageSize; | |
69 | + scope.downlinks.pending = true; | |
70 | + edgeService.getEdgeDownlinks(scope.entityId, scope.downlinks.nextPageLink).then( | |
71 | + function success(downlinks) { | |
72 | + scope.downlinks.data = scope.downlinks.data.concat(prepareEdgeDownlinksData(downlinks.data)); | |
73 | + scope.downlinks.nextPageLink = downlinks.nextPageLink; | |
74 | + scope.downlinks.hasNext = downlinks.hasNext; | |
75 | + if (scope.downlinks.hasNext) { | |
76 | + scope.downlinks.nextPageLink.limit = pageSize; | |
81 | 77 | } |
82 | - scope.events.pending = false; | |
78 | + scope.downlinks.pending = false; | |
83 | 79 | }, |
84 | 80 | function fail() { |
85 | - scope.events.hasNext = false; | |
86 | - scope.events.pending = false; | |
81 | + scope.downlinks.hasNext = false; | |
82 | + scope.downlinks.pending = false; | |
87 | 83 | }); |
88 | 84 | } else { |
89 | - scope.events.hasNext = false; | |
85 | + scope.downlinks.hasNext = false; | |
90 | 86 | } |
91 | 87 | } |
92 | 88 | } |
... | ... | @@ -128,7 +124,7 @@ export default function EdgeDownlinksDirective2($compile, $templateCache, $rootS |
128 | 124 | scope.topIndex = 0; |
129 | 125 | scope.selected = []; |
130 | 126 | scope.updateTimeWindowRange(); |
131 | - scope.events = { | |
127 | + scope.downlinks = { | |
132 | 128 | data: [], |
133 | 129 | nextPageLink: { |
134 | 130 | limit: pageSize, |
... | ... | @@ -138,15 +134,15 @@ export default function EdgeDownlinksDirective2($compile, $templateCache, $rootS |
138 | 134 | hasNext: true, |
139 | 135 | pending: false |
140 | 136 | }; |
141 | - scope.theEvents.getItemAtIndex(pageSize); | |
137 | + scope.theDownlinks.getItemAtIndex(pageSize); | |
142 | 138 | } |
143 | 139 | |
144 | 140 | scope.noData = function() { |
145 | - return scope.events.data.length == 0 && !scope.events.hasNext; | |
141 | + return scope.downlinks.data.length == 0 && !scope.downlinks.hasNext; | |
146 | 142 | } |
147 | 143 | |
148 | 144 | scope.hasData = function() { |
149 | - return scope.events.data.length > 0; | |
145 | + return scope.downlinks.data.length > 0; | |
150 | 146 | } |
151 | 147 | |
152 | 148 | scope.loading = function() { |
... | ... | @@ -211,12 +207,12 @@ export default function EdgeDownlinksDirective2($compile, $templateCache, $rootS |
211 | 207 | |
212 | 208 | $compile(element.contents())(scope); |
213 | 209 | } |
214 | - function prepareEdgeEventData(data) { | |
210 | + function prepareEdgeDownlinksData(data) { | |
215 | 211 | |
216 | 212 | data.forEach( |
217 | - edgeEvent => { | |
218 | - edgeEvent.edgeEventActionText = $translate.instant(types.edgeEventActionType[edgeEvent.action].name); | |
219 | - edgeEvent.edgeEventTypeText = $translate.instant(types.edgeEventTypeTranslations[edgeEvent.edgeId.entityType].name); | |
213 | + edgeDownlink => { | |
214 | + edgeDownlink.edgeDownlinksActionText = $translate.instant(types.edgeDownlinksActionType[edgeDownlink.action].name); | |
215 | + edgeDownlink.edgeDownlinksTypeText = $translate.instant(types.edgeDownlinksTypeTranslations[edgeDownlink.edgeId.entityType].name); | |
220 | 216 | } |
221 | 217 | ); |
222 | 218 | return data; | ... | ... |
... | ... | @@ -27,7 +27,7 @@ |
27 | 27 | </md-button> |
28 | 28 | </section> |
29 | 29 | <md-list flex layout="column" class="md-whiteframe-z1 tb-edge-downlinks-table"> |
30 | - <md-list class="tb-row tb-header" layout="row" layout-align="start center" tb-edge-downlinks-header event-type="{{eventType}}"> | |
30 | + <md-list class="tb-row tb-header" layout="row" layout-align="start center" tb-edge-downlinks-header> | |
31 | 31 | </md-list> |
32 | 32 | <md-progress-linear style="max-height: 0px;" md-mode="indeterminate" ng-disabled="!$root.loading" |
33 | 33 | ng-show="$root.loading"></md-progress-linear> |
... | ... | @@ -36,8 +36,8 @@ |
36 | 36 | style="margin-top: 25px;" |
37 | 37 | class="tb-prompt" ng-show="noData()">edge.no-downlinks-prompt</span> |
38 | 38 | <md-virtual-repeat-container ng-show="hasData()" flex md-top-index="topIndex" tb-scope-element="repeatContainer"> |
39 | - <md-list-item md-virtual-repeat="event in theEvents" md-on-demand flex ng-style="hasScroll() ? {'margin-right':'-15px'} : {}"> | |
40 | - <md-list class="tb-row" flex layout="row" layout-align="start center" tb-edge-downlinks-row event-type="{{eventType}}" event="{{event}}"> | |
39 | + <md-list-item md-virtual-repeat="downlink in theDownlinks" md-on-demand flex ng-style="hasScroll() ? {'margin-right':'-15px'} : {}"> | |
40 | + <md-list class="tb-row" flex layout="row" layout-align="start center" tb-edge-downlinks-row downlink="{{downlink}}"> | |
41 | 41 | </md-list> |
42 | 42 | <md-divider flex></md-divider> |
43 | 43 | </md-list-item> | ... | ... |
... | ... | @@ -65,13 +65,6 @@ |
65 | 65 | default-event-type="{{vm.types.eventType.error.value}}"> |
66 | 66 | </tb-event-table> |
67 | 67 | </md-tab> |
68 | - <md-tab ng-if="!vm.grid.detailsConfig.isDetailsEditMode" md-on-select="vm.grid.triggerResize()" label="{{ 'edge.edge' | translate }}"> | |
69 | - <tb-edge-downlinks-table-old flex entity-type="vm.types.entityType.edge" | |
70 | - entity-id="vm.grid.operatingItem().id.id" | |
71 | - tenant-id="vm.grid.operatingItem().tenantId.id" | |
72 | - default-event-type="{{vm.types.edgeDownlinks.value}}"> | |
73 | - </tb-edge-downlinks-table-old> | |
74 | - </md-tab> | |
75 | 68 | <md-tab ng-if="!vm.grid.detailsConfig.isDetailsEditMode" md-on-select="vm.grid.triggerResize()" label="{{ 'edge.downlinks' | translate }}"> |
76 | 69 | <tb-edge-downlinks-table flex entity-type="vm.types.entityType.edge" |
77 | 70 | entity-id="vm.grid.operatingItem().id.id" | ... | ... |
... | ... | @@ -45,7 +45,7 @@ export default angular.module('thingsboard.edge', [ |
45 | 45 | .controller('SetRootRuleChainToEdgesController', SetRootRuleChainToEdgesController) |
46 | 46 | .controller('EdgeDownlinksContentDialogController', EdgeDownlinksContentDialogController) |
47 | 47 | .directive('tbEdge', EdgeDirective) |
48 | + .directive('tbEdgeDownlinksTable', EdgeDownlinksDirective) | |
48 | 49 | .directive('tbEdgeDownlinksHeader', EdgeDownlinksHeaderDirective) |
49 | 50 | .directive('tbEdgeDownlinksRow', EdgeDownlinksRowDirective) |
50 | - .directive('tbEdgeDownlinksTable', EdgeDownlinksDirective) | |
51 | 51 | .name; | ... | ... |
ui/src/app/event/edge-downlinks-table.directive.js
deleted
100644 → 0
1 | -/* | |
2 | - * Copyright © 2016-2020 The Thingsboard Authors | |
3 | - * | |
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | - * you may not use this file except in compliance with the License. | |
6 | - * You may obtain a copy of the License at | |
7 | - * | |
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | - * | |
10 | - * Unless required by applicable law or agreed to in writing, software | |
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | - * See the License for the specific language governing permissions and | |
14 | - * limitations under the License. | |
15 | - */ | |
16 | -import './event.scss'; | |
17 | - | |
18 | -/* eslint-disable import/no-unresolved, import/default */ | |
19 | - | |
20 | -import edgeDownlinksTableTemplate from './edge-downlinks-table.tpl.html'; | |
21 | - | |
22 | -/* eslint-enable import/no-unresolved, import/default */ | |
23 | - | |
24 | -/*@ngInject*/ | |
25 | -export default function EdgeDownlinksDirective($compile, $templateCache, $rootScope, $translate, types, | |
26 | - eventService, edgeService, attributeService) { | |
27 | - | |
28 | - var linker = function (scope, element) { | |
29 | - | |
30 | - var template = $templateCache.get(edgeDownlinksTableTemplate); | |
31 | - | |
32 | - element.html(template); | |
33 | - | |
34 | - scope.eventType = types.edgeDownlinks.value; | |
35 | - | |
36 | - var pageSize = 20; | |
37 | - var startTime = 0; | |
38 | - var endTime = 0; | |
39 | - | |
40 | - scope.timewindow = { | |
41 | - history: { | |
42 | - timewindowMs: 24 * 60 * 60 * 1000 // 1 day | |
43 | - } | |
44 | - } | |
45 | - | |
46 | - scope.topIndex = 0; | |
47 | - | |
48 | - scope.theEvents = { | |
49 | - getItemAtIndex: function (index) { | |
50 | - if (index > scope.events.data.length) { | |
51 | - scope.theEvents.fetchMoreItems_(index); | |
52 | - return null; | |
53 | - } | |
54 | - var item = scope.events.data[index]; | |
55 | - if (item) { | |
56 | - item.indexNumber = index + 1; | |
57 | - } | |
58 | - return item; | |
59 | - }, | |
60 | - | |
61 | - getLength: function () { | |
62 | - if (scope.events.hasNext) { | |
63 | - return scope.events.data.length + scope.events.nextPageLink.limit; | |
64 | - } else { | |
65 | - return scope.events.data.length; | |
66 | - } | |
67 | - }, | |
68 | - | |
69 | - fetchMoreItems_: function () { | |
70 | - if (scope.events.hasNext && !scope.events.pending) { | |
71 | - if (scope.entityType && scope.entityId && scope.eventType && scope.tenantId) { | |
72 | - scope.loadEdgeInfo(); | |
73 | - scope.events.pending = true; | |
74 | - edgeService.getEdgeDownlinks(scope.entityId, scope.events.nextPageLink).then( | |
75 | - function success(events) { | |
76 | - scope.events.data = scope.events.data.concat(prepareEdgeEventData(events.data)); | |
77 | - scope.events.nextPageLink = events.nextPageLink; | |
78 | - scope.events.hasNext = events.hasNext; | |
79 | - if (scope.events.hasNext) { | |
80 | - scope.events.nextPageLink.limit = pageSize; | |
81 | - } | |
82 | - scope.events.pending = false; | |
83 | - }, | |
84 | - function fail() { | |
85 | - scope.events.hasNext = false; | |
86 | - scope.events.pending = false; | |
87 | - }); | |
88 | - } else { | |
89 | - scope.events.hasNext = false; | |
90 | - } | |
91 | - } | |
92 | - } | |
93 | - }; | |
94 | - | |
95 | - scope.$watch("entityId", function(newVal, prevVal) { | |
96 | - if (newVal && !angular.equals(newVal, prevVal)) { | |
97 | - scope.resetFilter(); | |
98 | - scope.reload(); | |
99 | - } | |
100 | - }); | |
101 | - | |
102 | - scope.$watch("timewindow", function(newVal, prevVal) { | |
103 | - if (newVal && !angular.equals(newVal, prevVal)) { | |
104 | - scope.reload(); | |
105 | - } | |
106 | - }, true); | |
107 | - | |
108 | - scope.resetFilter = function() { | |
109 | - scope.timewindow = { | |
110 | - history: { | |
111 | - timewindowMs: 24 * 60 * 60 * 1000 // 1 day | |
112 | - } | |
113 | - }; | |
114 | - } | |
115 | - | |
116 | - scope.updateTimeWindowRange = function() { | |
117 | - if (scope.timewindow.history.timewindowMs) { | |
118 | - var currentTime = (new Date).getTime(); | |
119 | - startTime = currentTime - scope.timewindow.history.timewindowMs; | |
120 | - endTime = currentTime; | |
121 | - } else { | |
122 | - startTime = scope.timewindow.history.fixedTimewindow.startTimeMs; | |
123 | - endTime = scope.timewindow.history.fixedTimewindow.endTimeMs; | |
124 | - } | |
125 | - } | |
126 | - | |
127 | - scope.reload = function() { | |
128 | - scope.topIndex = 0; | |
129 | - scope.selected = []; | |
130 | - scope.updateTimeWindowRange(); | |
131 | - scope.events = { | |
132 | - data: [], | |
133 | - nextPageLink: { | |
134 | - limit: pageSize, | |
135 | - startTime: startTime, | |
136 | - endTime: endTime | |
137 | - }, | |
138 | - hasNext: true, | |
139 | - pending: false | |
140 | - }; | |
141 | - scope.theEvents.getItemAtIndex(pageSize); | |
142 | - } | |
143 | - | |
144 | - scope.noData = function() { | |
145 | - return scope.events.data.length == 0 && !scope.events.hasNext; | |
146 | - } | |
147 | - | |
148 | - scope.hasData = function() { | |
149 | - return scope.events.data.length > 0; | |
150 | - } | |
151 | - | |
152 | - scope.loading = function() { | |
153 | - return $rootScope.loading; | |
154 | - } | |
155 | - | |
156 | - scope.hasScroll = function() { | |
157 | - var repeatContainer = scope.repeatContainer[0]; | |
158 | - if (repeatContainer) { | |
159 | - var scrollElement = repeatContainer.children[0]; | |
160 | - if (scrollElement) { | |
161 | - return scrollElement.scrollHeight > scrollElement.clientHeight; | |
162 | - } | |
163 | - } | |
164 | - return false; | |
165 | - } | |
166 | - | |
167 | - scope.subscriptionId = null; | |
168 | - | |
169 | - scope.loadEdgeInfo = function() { | |
170 | - attributeService.getEntityAttributesValues( | |
171 | - scope.entityType, | |
172 | - scope.entityId, | |
173 | - types.attributesScope.server.value, | |
174 | - types.edgeAttributeKeys.queueStartTs, | |
175 | - null).then( | |
176 | - function success(attributes) { | |
177 | - attributes.length > 0 ? scope.onEdgeAttributesUpdate(attributes) : scope.queueStartTs = 0; | |
178 | - }); | |
179 | - scope.checkSubscription(); | |
180 | - } | |
181 | - | |
182 | - scope.onEdgeAttributesUpdate = function(attributes) { | |
183 | - let edgeAttributes = attributes.reduce(function (map, attribute) { | |
184 | - map[attribute.key] = attribute; | |
185 | - return map; | |
186 | - }, {}); | |
187 | - if (edgeAttributes.queueStartTs) { | |
188 | - scope.queueStartTs = edgeAttributes.queueStartTs.lastUpdateTs; | |
189 | - } | |
190 | - } | |
191 | - | |
192 | - scope.checkSubscription = function() { | |
193 | - var newSubscriptionId = null; | |
194 | - if (scope.entityId && scope.entityType && types.attributesScope.server.value) { | |
195 | - newSubscriptionId = | |
196 | - attributeService.subscribeForEntityAttributes(scope.entityType, scope.entityId, types.attributesScope.server.value); | |
197 | - } | |
198 | - if (scope.subscriptionId && scope.subscriptionId != newSubscriptionId) { | |
199 | - attributeService.unsubscribeForEntityAttributes(scope.subscriptionId); | |
200 | - } | |
201 | - scope.subscriptionId = newSubscriptionId; | |
202 | - } | |
203 | - | |
204 | - scope.$on('$destroy', function () { | |
205 | - if (scope.subscriptionId) { | |
206 | - attributeService.unsubscribeForEntityAttributes(scope.subscriptionId); | |
207 | - } | |
208 | - }); | |
209 | - | |
210 | - scope.reload(); | |
211 | - | |
212 | - $compile(element.contents())(scope); | |
213 | - } | |
214 | - function prepareEdgeEventData(data) { | |
215 | - | |
216 | - data.forEach( | |
217 | - edgeEvent => { | |
218 | - edgeEvent.edgeEventActionText = $translate.instant(types.edgeEventActionType[edgeEvent.action].name); | |
219 | - edgeEvent.edgeEventTypeText = $translate.instant(types.edgeEventTypeTranslations[edgeEvent.edgeId.entityType].name); | |
220 | - } | |
221 | - ); | |
222 | - return data; | |
223 | - } | |
224 | - | |
225 | - return { | |
226 | - restrict: "E", | |
227 | - link: linker, | |
228 | - scope: { | |
229 | - entityType: '=', | |
230 | - entityId: '=', | |
231 | - tenantId: '=' | |
232 | - } | |
233 | - }; | |
234 | -} |
ui/src/app/event/edge-downlinks-table.tpl.html
deleted
100644 → 0
1 | -<!-- | |
2 | - | |
3 | - Copyright © 2016-2020 The Thingsboard Authors | |
4 | - | |
5 | - Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | - you may not use this file except in compliance with the License. | |
7 | - You may obtain a copy of the License at | |
8 | - | |
9 | - http://www.apache.org/licenses/LICENSE-2.0 | |
10 | - | |
11 | - Unless required by applicable law or agreed to in writing, software | |
12 | - distributed under the License is distributed on an "AS IS" BASIS, | |
13 | - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | - See the License for the specific language governing permissions and | |
15 | - limitations under the License. | |
16 | - | |
17 | ---> | |
18 | -<md-content flex class="md-padding tb-absolute-fill" layout="column"> | |
19 | - <section layout="row"> | |
20 | - <tb-timewindow flex ng-model="timewindow" history-only as-button="true"></tb-timewindow> | |
21 | - <md-button ng-disabled="$root.loading" | |
22 | - class="md-icon-button" ng-click="reload()"> | |
23 | - <md-icon>refresh</md-icon> | |
24 | - <md-tooltip md-direction="top"> | |
25 | - {{ 'action.refresh' | translate }} | |
26 | - </md-tooltip> | |
27 | - </md-button> | |
28 | - </section> | |
29 | - <md-list flex layout="column" class="md-whiteframe-z1 tb-edge-downlinks-table-old"> | |
30 | - <md-list class="tb-row tb-header" layout="row" layout-align="start center" tb-event-header event-type="{{eventType}}"> | |
31 | - </md-list> | |
32 | - <md-progress-linear style="max-height: 0px;" md-mode="indeterminate" ng-disabled="!$root.loading" | |
33 | - ng-show="$root.loading"></md-progress-linear> | |
34 | - <md-divider></md-divider> | |
35 | - <span translate layout-align="center center" | |
36 | - style="margin-top: 25px;" | |
37 | - class="tb-prompt" ng-show="noData()">edge.no-downlinks-prompt</span> | |
38 | - <md-virtual-repeat-container ng-show="hasData()" flex md-top-index="topIndex" tb-scope-element="repeatContainer"> | |
39 | - <md-list-item md-virtual-repeat="event in theEvents" md-on-demand flex ng-style="hasScroll() ? {'margin-right':'-15px'} : {}"> | |
40 | - <md-list class="tb-row" flex layout="row" layout-align="start center" tb-event-row event-type="{{eventType}}" event="{{event}}"> | |
41 | - </md-list> | |
42 | - <md-divider flex></md-divider> | |
43 | - </md-list-item> | |
44 | - </md-virtual-repeat-container> | |
45 | - </md-list> | |
46 | -</md-content> |
ui/src/app/event/event-header-edge-event.tpl.html
deleted
100644 → 0
1 | -<!-- | |
2 | - | |
3 | - Copyright © 2016-2020 The Thingsboard Authors | |
4 | - | |
5 | - Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | - you may not use this file except in compliance with the License. | |
7 | - You may obtain a copy of the License at | |
8 | - | |
9 | - http://www.apache.org/licenses/LICENSE-2.0 | |
10 | - | |
11 | - Unless required by applicable law or agreed to in writing, software | |
12 | - distributed under the License is distributed on an "AS IS" BASIS, | |
13 | - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | - See the License for the specific language governing permissions and | |
15 | - limitations under the License. | |
16 | - | |
17 | ---> | |
18 | -<div translate class="tb-cell" flex="20">event.event-time</div> | |
19 | -<div translate class="tb-cell" flex="10">event.event-type</div> | |
20 | -<div translate class="tb-cell" flex="15">edge.event-action</div> | |
21 | -<div translate class="tb-cell" flex="30">edge.entity-id</div> | |
22 | -<div translate class="tb-cell" flex="15">edge.status</div> | |
23 | -<div translate class="tb-cell" flex="10">edge.entity-info</div> |
... | ... | @@ -19,7 +19,6 @@ import eventHeaderLcEventTemplate from './event-header-lc-event.tpl.html'; |
19 | 19 | import eventHeaderStatsTemplate from './event-header-stats.tpl.html'; |
20 | 20 | import eventHeaderErrorTemplate from './event-header-error.tpl.html'; |
21 | 21 | import eventHeaderDebugRuleNodeTemplate from './event-header-debug-rulenode.tpl.html'; |
22 | -import edgeDownlinksHeaderTemplate from './event-header-edge-event.tpl.html' | |
23 | 22 | |
24 | 23 | /* eslint-enable import/no-unresolved, import/default */ |
25 | 24 | |
... | ... | @@ -46,9 +45,6 @@ export default function EventHeaderDirective($compile, $templateCache, types) { |
46 | 45 | case types.debugEventType.debugRuleChain.value: |
47 | 46 | template = eventHeaderDebugRuleNodeTemplate; |
48 | 47 | break; |
49 | - case types.edgeDownlinks.value: | |
50 | - template = edgeDownlinksHeaderTemplate; | |
51 | - break; | |
52 | 48 | } |
53 | 49 | return $templateCache.get(template); |
54 | 50 | } | ... | ... |
ui/src/app/event/event-row-edge-event.tpl.html
deleted
100644 → 0
1 | -<!-- | |
2 | - | |
3 | - Copyright © 2016-2020 The Thingsboard Authors | |
4 | - | |
5 | - Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | - you may not use this file except in compliance with the License. | |
7 | - You may obtain a copy of the License at | |
8 | - | |
9 | - http://www.apache.org/licenses/LICENSE-2.0 | |
10 | - | |
11 | - Unless required by applicable law or agreed to in writing, software | |
12 | - distributed under the License is distributed on an "AS IS" BASIS, | |
13 | - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | - See the License for the specific language governing permissions and | |
15 | - limitations under the License. | |
16 | - | |
17 | ---> | |
18 | -<div class="tb-cell" flex="20">{{ event.createdTime | date : 'yyyy-MM-dd HH:mm:ss' }}</div> | |
19 | -<div class="tb-cell" flex="10">{{ event.edgeEventTypeText }}</div> | |
20 | -<div class="tb-cell" flex="15">{{ event.edgeEventActionText }}</div> | |
21 | -<div class="tb-cell" flex="30">{{ event.entityId }}</div> | |
22 | -<div class="tb-cell" flex="15" ng-style="{'color': statusColor}">{{ updateStatus(event.createdTime) }}</div> | |
23 | -<div class="tb-cell" flex="10"> | |
24 | - <md-button ng-if="checkEdgeEventType(event.type)" class="md-icon-button md-primary" | |
25 | - ng-click="showEdgeEntityContent($event, 'edge.entity-info', 'JSON')" | |
26 | - aria-label="{{ 'action.view' | translate }}"> | |
27 | - <md-tooltip md-direction="top"> | |
28 | - {{ 'action.view' | translate }} | |
29 | - </md-tooltip> | |
30 | - <md-icon aria-label="{{ 'action.view' | translate }}" | |
31 | - class="material-icons"> | |
32 | - more_horiz | |
33 | - </md-icon> | |
34 | - </md-button> | |
35 | -</div> | |
36 | - | |
37 | - |
... | ... | @@ -21,13 +21,12 @@ import eventRowLcEventTemplate from './event-row-lc-event.tpl.html'; |
21 | 21 | import eventRowStatsTemplate from './event-row-stats.tpl.html'; |
22 | 22 | import eventRowErrorTemplate from './event-row-error.tpl.html'; |
23 | 23 | import eventRowDebugRuleNodeTemplate from './event-row-debug-rulenode.tpl.html'; |
24 | -import edgeDownlinlsRowTemplate from './event-row-edge-event.tpl.html'; | |
25 | 24 | |
26 | 25 | /* eslint-enable import/no-unresolved, import/default */ |
27 | 26 | |
28 | 27 | /*@ngInject*/ |
29 | 28 | export default function EventRowDirective($compile, $templateCache, $mdDialog, $document, $translate, |
30 | - types, utils, toast, entityService, ruleChainService) { | |
29 | + types, utils) { | |
31 | 30 | |
32 | 31 | var linker = function (scope, element, attrs) { |
33 | 32 | |
... | ... | @@ -49,9 +48,6 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $ |
49 | 48 | case types.debugEventType.debugRuleChain.value: |
50 | 49 | template = eventRowDebugRuleNodeTemplate; |
51 | 50 | break; |
52 | - case types.edgeDownlinks.value: | |
53 | - template = edgeDownlinlsRowTemplate; | |
54 | - break; | |
55 | 51 | } |
56 | 52 | return $templateCache.get(template); |
57 | 53 | } |
... | ... | @@ -98,85 +94,7 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $ |
98 | 94 | }); |
99 | 95 | } |
100 | 96 | |
101 | - scope.showEdgeEntityContent = function($event, title, contentType) { | |
102 | - var onShowingCallback = { | |
103 | - onShowing: function(){} | |
104 | - } | |
105 | - if (!contentType) { | |
106 | - contentType = null; | |
107 | - } | |
108 | - var content = ''; | |
109 | - switch(scope.event.type) { | |
110 | - case types.edgeEventType.relation: | |
111 | - content = angular.toJson(scope.event.body); | |
112 | - showDialog(); | |
113 | - break; | |
114 | - case types.edgeEventType.ruleChainMetaData: | |
115 | - content = ruleChainService.getRuleChainMetaData(scope.event.entityId, {ignoreErrors: true}).then( | |
116 | - function success(info) { | |
117 | - showDialog(); | |
118 | - return angular.toJson(info); | |
119 | - }, function fail() { | |
120 | - showError(); | |
121 | - }); | |
122 | - break; | |
123 | - default: | |
124 | - content = entityService.getEntity(scope.event.type, scope.event.entityId, {ignoreErrors: true}).then( | |
125 | - function success(info) { | |
126 | - showDialog(); | |
127 | - return angular.toJson(info); | |
128 | - }, function fail() { | |
129 | - showError(); | |
130 | - }); | |
131 | - break; | |
132 | - } | |
133 | - function showDialog() { | |
134 | - $mdDialog.show({ | |
135 | - controller: 'EventContentDialogController', | |
136 | - controllerAs: 'vm', | |
137 | - templateUrl: eventErrorDialogTemplate, | |
138 | - locals: {content: content, title: title, contentType: contentType, showingCallback: onShowingCallback}, | |
139 | - parent: angular.element($document[0].body), | |
140 | - fullscreen: true, | |
141 | - targetEvent: $event, | |
142 | - multiple: true, | |
143 | - onShowing: function(scope, element) { | |
144 | - onShowingCallback.onShowing(scope, element); | |
145 | - } | |
146 | - }); | |
147 | - } | |
148 | - function showError() { | |
149 | - toast.showError($translate.instant('edge.load-entity-error')); | |
150 | - } | |
151 | - } | |
152 | - | |
153 | - scope.checkEdgeEventType = function (type) { | |
154 | - return !(type === types.edgeEventType.widgetType || | |
155 | - type === types.edgeEventType.adminSettings || | |
156 | - type === types.edgeEventType.widgetsBundle ); | |
157 | - } | |
158 | - | |
159 | - scope.checkTooltip = function($event) { | |
160 | - var el = $event.target; | |
161 | - var $el = angular.element(el); | |
162 | - if(el.offsetWidth < el.scrollWidth && !$el.attr('title')){ | |
163 | - $el.attr('title', $el.text()); | |
164 | - } | |
165 | - } | |
166 | - | |
167 | 97 | $compile(element.contents())(scope); |
168 | - | |
169 | - scope.updateStatus = function(eventCreatedTime) { | |
170 | - var status; | |
171 | - if (eventCreatedTime < scope.queueStartTs) { | |
172 | - status = $translate.instant(types.edgeEventStatus.DEPLOYED.name); | |
173 | - scope.statusColor = types.edgeEventStatus.DEPLOYED.color; | |
174 | - } else { | |
175 | - status = $translate.instant(types.edgeEventStatus.PENDING.name); | |
176 | - scope.statusColor = types.edgeEventStatus.PENDING.color; | |
177 | - } | |
178 | - return status; | |
179 | - } | |
180 | 98 | } |
181 | 99 | |
182 | 100 | return { | ... | ... |
... | ... | @@ -19,7 +19,6 @@ import EventContentDialogController from './event-content-dialog.controller'; |
19 | 19 | import EventHeaderDirective from './event-header.directive'; |
20 | 20 | import EventRowDirective from './event-row.directive'; |
21 | 21 | import EventTableDirective from './event-table.directive'; |
22 | -import EdgeDownlinksDirective from "./edge-downlinks-table.directive"; | |
23 | 22 | |
24 | 23 | export default angular.module('thingsboard.event', [ |
25 | 24 | thingsboardApiEvent |
... | ... | @@ -28,5 +27,4 @@ export default angular.module('thingsboard.event', [ |
28 | 27 | .directive('tbEventHeader', EventHeaderDirective) |
29 | 28 | .directive('tbEventRow', EventRowDirective) |
30 | 29 | .directive('tbEventTable', EventTableDirective) |
31 | - .directive('tbEdgeDownlinksTableOld', EdgeDownlinksDirective) | |
32 | 30 | .name; | ... | ... |