diff --git a/ui/src/app/api/edge.service.js b/ui/src/app/api/edge.service.js index f5e43f7ef5..debd49069a 100644 --- a/ui/src/app/api/edge.service.js +++ b/ui/src/app/api/edge.service.js @@ -36,7 +36,8 @@ function EdgeService($http, $q, customerService) { makeEdgePublic: makeEdgePublic, setRootRuleChain: setRootRuleChain, getEdgeEvents: getEdgeEvents, - syncEdge: syncEdge + syncEdge: syncEdge, + findMissingToRelatedRuleChains: findMissingToRelatedRuleChains }; return service; @@ -305,4 +306,15 @@ function EdgeService($http, $q, customerService) { }); return deferred.promise; } + + function findMissingToRelatedRuleChains(edgeId) { + var deferred = $q.defer(); + var url = '/api/edge/missingToRelatedRuleChains/' + edgeId; + $http.get(url, null).then(function success(response) { + deferred.resolve(response.data); + }, function fail(response) { + deferred.reject(response.data); + }); + return deferred.promise; + } } diff --git a/ui/src/app/api/entity.service.js b/ui/src/app/api/entity.service.js index df684c334e..56e4378eba 100644 --- a/ui/src/app/api/entity.service.js +++ b/ui/src/app/api/entity.service.js @@ -910,6 +910,9 @@ function EntityService($http, $q, $filter, $translate, $log, userService, device } } } + if (!userService.isEdgesSupportEnabled()) { + delete entityTypes.edge; + } return entityTypes; } diff --git a/ui/src/app/api/user.service.js b/ui/src/app/api/user.service.js index b84bcf8428..cdf18c27ed 100644 --- a/ui/src/app/api/user.service.js +++ b/ui/src/app/api/user.service.js @@ -29,7 +29,8 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time allowedDashboardIds = [], redirectParams = null, userTokenAccessEnabled = false, - userLoaded = false; + userLoaded = false, + edgesSupportEnabled = false; var refreshTokenQueue = []; @@ -65,7 +66,8 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time reloadUser: reloadUser, isUserTokenAccessEnabled: isUserTokenAccessEnabled, loginAsUser: loginAsUser, - setUserCredentialsEnabled: setUserCredentialsEnabled + setUserCredentialsEnabled: setUserCredentialsEnabled, + isEdgesSupportEnabled: isEdgesSupportEnabled } reloadUser(); @@ -451,6 +453,7 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time function loadSystemParams() { var promises = []; promises.push(loadIsUserTokenAccessEnabled()); + promises.push(loadIsEdgesSupportEnabled()); promises.push(timeService.loadMaxDatapointsLimit()); return $q.all(promises); } @@ -685,4 +688,20 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time }); } + function isEdgesSupportEnabled() { + return edgesSupportEnabled; + } + + function loadIsEdgesSupportEnabled() { + var deferred = $q.defer(); + var url = '/api/edges/enabled'; + $http.get(url).then(function success(response) { + edgesSupportEnabled = response.data; + deferred.resolve(response); + }, function fail() { + deferred.reject(); + }); + return deferred.promise; + } + } diff --git a/ui/src/app/common/types.constant.js b/ui/src/app/common/types.constant.js index a9a833bd7e..e43dd9aa8a 100644 --- a/ui/src/app/common/types.constant.js +++ b/ui/src/app/common/types.constant.js @@ -1076,6 +1076,127 @@ export default angular.module('thingsboard.types', []) }, translate: { customTranslationsPrefix: "custom." - } + }, + edgeEventActionType: { + "ADDED": { + name: "audit-log.type-added" + }, + "DELETED": { + name: "audit-log.type-deleted" + }, + "UPDATED": { + name: "audit-log.type-updated" + }, + "ATTRIBUTES_UPDATED": { + name: "audit-log.type-attributes-updated" + }, + "ATTRIBUTES_DELETED": { + name: "audit-log.type-attributes-deleted" + }, + "RPC_CALL": { + name: "audit-log.type-rpc-call" + }, + "CREDENTIALS_UPDATED": { + name: "audit-log.type-credentials-updated" + }, + "RELATION_ADD_OR_UPDATE": { + name: "audit-log.type-relation-add-or-update" + }, + "RELATION_DELETED": { + name: "audit-log.type-relation-delete" + }, + "ALARM_ACK": { + name: "audit-log.type-alarm-ack" + }, + "ALARM_CLEAR": { + name: "audit-log.type-alarm-clear" + }, + "CREDENTIALS_REQUEST": { + name: "edge.credentials-request" + }, + "ATTRIBUTES_REQUEST": { + name: "edge.attributes-request" + }, + "TIMESERIES_UPDATED": { + name: "edge.timeseries-updated" + }, + "RELATION_REQUEST": { + name: "edge.relation-request" + }, + "RULE_CHAIN_METADATA_REQUEST": { + name: "edge.rule-chain-metadata-request" + }, + "GROUP_ENTITIES_REQUEST": { + name: "edge.group_entities_request" + }, + "GROUP_PERMISSIONS_REQUEST": { + name: "edge.group-permissions-request" + }, + "ASSIGNED_TO_EDGE": { + name: "audit-log.type-assigned-to-edge" + }, + "UNASSIGNED_FROM_EDGE": { + name: "audit-log.type-unassigned-from-edge" + } + }, + edgeEventTypeTranslations:{ + "DASHBOARD": { + name: "entity.type-dashboard" + }, + "ASSET": { + name: "entity.type-asset" + }, + "DEVICE": { + name: "entity.type-device" + }, + "ENTITY_VIEW": { + name: "entity.type-entity_view" + }, + "ALARM": { + name: "entity.type-alarm" + }, + "RULE_CHAIN": { + name: "entity.type-rulechain" + }, + "RULE_CHAIN_META_DATA": { + name: "entity.type-rule-chain-metadata" + }, + "EDGE": { + name: "entity.type-edge" + }, + "USER": { + name: "entity.type-user" + }, + "CUSTOMER": { + name: "entity.type-customer" + }, + "RELATION": { + name: "entity.type-relation" + }, + "ENTITY_GROUP": { + name: "entity.type-entity-group" + }, + "SCHEDULER_EVENT": { + name: "entity.type-scheduler-event" + }, + "WHITE_LABELING": { + name: "white-labeling.white-labeling" + }, + "LOGIN_WHITE_LABELING": { + name: "white-labeling.login-white-labeling" + }, + "CUSTOM_TRANSLATION": { + name: "custom-translation.custom-translation", + }, + "WIDGETS_BUNDLE": { + name: "widget.widget-bundle" + }, + "WIDGET_TYPE": { + name: "widget.type" + }, + "ADMIN_SETTINGS": { + name: "permission.resource.display-type.ADMIN_SETTINGS" + } + }, } ).name; diff --git a/ui/src/app/customer/customer.controller.js b/ui/src/app/customer/customer.controller.js index c61962f9f3..2d1d2202a8 100644 --- a/ui/src/app/customer/customer.controller.js +++ b/ui/src/app/customer/customer.controller.js @@ -81,7 +81,7 @@ export default function CustomerController(customerService, $state, $stateParams onAction: function ($event, item) { openCustomerEdges($event, item); }, - name: function() { return $translate.instant('edge.edges') }, + name: function() { return $translate.instant('edge.edge-instances') }, details: function(customer) { if (customer && customer.additionalInfo && customer.additionalInfo.isPublic) { return $translate.instant('customer.manage-public-edges') diff --git a/ui/src/app/edge/edge-fieldset.tpl.html b/ui/src/app/edge/edge-fieldset.tpl.html index 2f2195ec39..aee00875b9 100644 --- a/ui/src/app/edge/edge-fieldset.tpl.html +++ b/ui/src/app/edge/edge-fieldset.tpl.html @@ -15,34 +15,38 @@ limitations under the License. --> -{{ 'edge.assign-to-customer' | translate }} -{{ isPublic ? 'edge.make-private' : 'edge.unassign-from-customer' | translate }} -{{ 'edge.make-public' | translate }} -{{ 'edge.manage-edge-assets' | translate }} -{{ 'edge.manage-edge-devices' | translate }} -{{ 'edge.manage-edge-entity-views' | translate }} -{{ 'edge.manage-edge-dashboards' | translate }} -{{ 'edge.manage-edge-rulechains' | translate }} -{{ 'edge.delete' | translate }} +
+ {{ 'edge.assign-to-customer' | translate }} + {{ isPublic ? 'edge.make-private' : 'edge.unassign-from-customer' | translate }} + {{ 'edge.make-public' | translate }} + {{ 'edge.delete' | translate }} +
+
+ {{ 'edge.assets' | translate }} + {{ 'edge.devices' | translate }} + {{ 'edge.entity-views' | translate }} + {{ 'edge.dashboards' | translate }} + {{ 'edge.rulechain-templates' | translate }} +
- - - - - - - - +
edge.license-key-hint
@@ -113,6 +110,7 @@
edge.edge-license-key-required
+
edge.cloud-endpoint-hint
@@ -122,7 +120,6 @@
- @@ -152,4 +149,14 @@
+
+ + + + + + + + +
diff --git a/ui/src/app/edge/edge.controller.js b/ui/src/app/edge/edge.controller.js index 0c9d42c584..6239789edc 100644 --- a/ui/src/app/edge/edge.controller.js +++ b/ui/src/app/edge/edge.controller.js @@ -283,7 +283,7 @@ export function EdgeController($rootScope, userService, edgeService, customerSer details: function() { return $translate.instant('edge.manage-edge-rulechains'); }, - icon: "code" + icon: "settings_ethernet" } ); diff --git a/ui/src/app/edge/edge.directive.js b/ui/src/app/edge/edge.directive.js index e306a4d5d2..7f8e6c3436 100644 --- a/ui/src/app/edge/edge.directive.js +++ b/ui/src/app/edge/edge.directive.js @@ -36,6 +36,7 @@ export default function EdgeDirective($compile, $templateCache, $translate, $mdD scope.edge.routingKey = utils.guid(''); scope.edge.secret = generateSecret(20); scope.edge.cloudEndpoint = utils.baseUrl(); + scope.edge.type = 'default'; } if (scope.edge.customerId && scope.edge.customerId.id !== types.id.nullUid) { scope.isAssignedToCustomer = true; diff --git a/ui/src/app/edge/edge.routes.js b/ui/src/app/edge/edge.routes.js index ccfb3a7b14..bed701009a 100644 --- a/ui/src/app/edge/edge.routes.js +++ b/ui/src/app/edge/edge.routes.js @@ -46,10 +46,10 @@ export default function EdgeRoutes($stateProvider, types) { searchEnabled: true, searchByEntitySubtype: true, searchEntityType: types.entityType.edge, - pageTitle: 'edge.edges' + pageTitle: 'edge.edge-instances' }, ncyBreadcrumb: { - label: '{"icon": "router", "label": "edge.edges"}' + label: '{"icon": "router", "label": "edge.edge-instances"}' } }).state('home.edges.entityViews', { url: '/:edgeId/entityViews', @@ -194,11 +194,11 @@ export default function EdgeRoutes($stateProvider, types) { }, data: { searchEnabled: true, - pageTitle: 'edge.rulechains', + pageTitle: 'edge.rulechain-templates', ruleChainsType: 'edge' }, ncyBreadcrumb: { - label: '{"icon": "code", "label": "rulechain.edge-rulechains"}' + label: '{"icon": "settings_ethernet", "label": "edge.rulechain-templates"}' } }).state('home.edges.ruleChains.ruleChain', { url: '/:ruleChainId', @@ -232,10 +232,10 @@ export default function EdgeRoutes($stateProvider, types) { data: { import: false, searchEnabled: false, - pageTitle: 'edge.rulechain' + pageTitle: 'edge.rulechain-templates' }, ncyBreadcrumb: { - label: '{"icon": "code", "label": "{{ vm.ruleChain.name }}", "translate": "false"}' + label: '{"icon": "settings_ethernet", "label": "{{ vm.ruleChain.name }}", "translate": "false"}' } }); } diff --git a/ui/src/app/entity/entity-filter.directive.js b/ui/src/app/entity/entity-filter.directive.js index 629433545d..e29fbf4a78 100644 --- a/ui/src/app/entity/entity-filter.directive.js +++ b/ui/src/app/entity/entity-filter.directive.js @@ -22,7 +22,7 @@ import entityFilterTemplate from './entity-filter.tpl.html'; import './entity-filter.scss'; /*@ngInject*/ -export default function EntityFilterDirective($compile, $templateCache, $q, $document, $mdDialog, types, entityService) { +export default function EntityFilterDirective($compile, $templateCache, $q, $document, $mdDialog, types, entityService, userService) { var linker = function (scope, element, attrs, ngModelCtrl) { @@ -31,6 +31,9 @@ export default function EntityFilterDirective($compile, $templateCache, $q, $doc scope.ngModelCtrl = ngModelCtrl; scope.types = types; + if (!userService.isEdgesSupportEnabled()) { + scope.allowedEntityTypes = Object.values(types.entityType).filter(entityType => entityType !== types.entityType.edge); + } scope.aliasFilterTypes = entityService.getAliasFilterTypesByEntityTypes(scope.allowedEntityTypes); scope.$watch('filter.type', function (newType, prevType) { diff --git a/ui/src/app/event/event-header-edge-event.tpl.html b/ui/src/app/event/event-header-edge-event.tpl.html index e84922f6a5..3de281ddc7 100644 --- a/ui/src/app/event/event-header-edge-event.tpl.html +++ b/ui/src/app/event/event-header-edge-event.tpl.html @@ -16,8 +16,8 @@ -->
event.event-time
-
event.event-type
-
edge.event-action
-
edge.entity-id
+
event.event-type
+
edge.event-action
+
edge.entity-id
edge.status
edge.entity-info
diff --git a/ui/src/app/event/event-row-edge-event.tpl.html b/ui/src/app/event/event-row-edge-event.tpl.html index 01b6c6e261..a842b5d787 100644 --- a/ui/src/app/event/event-row-edge-event.tpl.html +++ b/ui/src/app/event/event-row-edge-event.tpl.html @@ -16,9 +16,9 @@ -->
{{ event.createdTime | date : 'yyyy-MM-dd HH:mm:ss' }}
-
{{ event.type }}
-
{{ event.action }}
-
{{ event.entityId }}
+
{{ event.edgeEventTypeText }}
+
{{ event.edgeEventActionText }}
+
{{ event.entityId }}
{{ updateStatus(event.createdTime) }}
{ + edgeEvent.edgeEventActionText = $translate.instant(types.edgeEventActionType[edgeEvent.action].name); + edgeEvent.edgeEventTypeText = $translate.instant(types.edgeEventTypeTranslations[edgeEvent.edgeId.entityType].name); + } + ); + return data; + } return { restrict: "E", diff --git a/ui/src/app/locale/locale.constant-de_DE.json b/ui/src/app/locale/locale.constant-de_DE.json index 81558e7ab2..6c69c25910 100644 --- a/ui/src/app/locale/locale.constant-de_DE.json +++ b/ui/src/app/locale/locale.constant-de_DE.json @@ -431,7 +431,7 @@ "customer-required": "Kunde ist erforderlich", "select-default-customer": "Wählen Sie den Standardkunden aus.", "default-customer": "Standardkunde", - "edges": "Kunden Rand", + "edge-instances": "Kunden Rand", "default-customer-required": "Ein Standardkunde ist erforderlich, um das Dashboard auf Mandantenebene zu testen." }, "datetime": { @@ -730,7 +730,7 @@ }, "edge": { "edge": "Rand", - "edges": "Rand", + "edge-instances": "Rand", "management": "Rand verwalten", "no-edges-matching": "Keine passenden Rand '{{entity}}' gefunden.", "add": "Rand hinzufügen", @@ -1355,8 +1355,6 @@ "rulechain": { "rulechain": "Regelkette", "rulechains": "Regelketten", - "core-rulechains": "Kernregelketten", - "edge-rulechains": "Randregelketten", "root": "Wurzel", "delete": "Regelkette löschen", "name": "Name", @@ -1393,7 +1391,6 @@ "assign-rulechains": "Regelketten zuweisen", "assign-new-rulechain": "Neues Regelkette zuweisen", "delete-rulechains": "Regelketten löschen", - "default": "Standard", "unassign-rulechain": "Nicht zugeordnete Regelkette", "unassign-rulechains": "Nicht zugeordnete Regelketten", "unassign-rulechain-title": "Möchten Sie die Zuordnung die Regelkette '{{ruleChainTitle}}' wirklich aufheben?", @@ -1403,16 +1400,17 @@ "unassign-rulechains-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelketten aufgehoben und sie sind für den Rand nicht mehr zugänglich.", "assign-rulechain-to-edge": "Regelkette(n) dem Rand zuordnen", "assign-rulechain-to-edge-text": "Bitte wählen Sie die Regelketten aus, die Sie dem Rand zuordnen möchten", - "set-default-root-edge": "Machen Sie Randregelkette zur Wurzel Standard", - "set-default-root-edge-rulechain-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' zur Wurzel machen Standard?", - "set-default-root-edge-rulechain-text": "Nach der Bestätigung wird die Randregelkette zur Wurzel Standard und behandelt alle eingehenden Transportnachrichten.", + "set-edge-template-root-rulechain": "Regelkette als Rand der Kantenvorlage erstellen", + "set-edge-template-root-rulechain-title": "Möchten Sie die Kantenvorlage der Regelkette '{{ruleChainName}}' wirklich als Root festlegen?", + "set-edge-template-root-rulechain-text": "Nach der Bestätigung wird die Regelkette zum Stamm der Kantenvorlage und zur Stammregelkette für neu erstellte Kanten.", "invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.", - "set-default-edge": "Machen Sie Regelkette Standard", - "set-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' machen Standard?", - "set-default-edge-text": "Nach der Bestätigung wird die Randregelkette für neu erstellte Rand vergeben.", - "remove-default-edge": "Randregelkette Standard entfernen", - "remove-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' aus der Standardliste entfernen?", - "remove-default-edge-text": "Nach der Bestätigung wird die Randregelkette nicht für neu erstellte Rand vergeben." + "set-auto-assign-to-edge": "Weisen Sie den Kanten bei der Erstellung eine Regelkette zu", + "set-auto-assign-to-edge-title": "Sind Sie sicher, dass Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung den Kanten zuweisen möchten? ", + "set-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung automatisch den Kanten zugewiesen.", + "unset-auto-assign-to-edge": "Weisen Sie Kanten bei der Erstellung keine Regelkette zu", + "unset-auto-assign-to-edge-title": "Sind Sie sicher, dass Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung nicht den Kanten zuweisen möchten?", + "unset-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung nicht mehr automatisch den Kanten zugewiesen.", + "edge-template-root": "Vorlagenstamm" }, "rulenode": { "details": "Details", diff --git a/ui/src/app/locale/locale.constant-en_US.json b/ui/src/app/locale/locale.constant-en_US.json index 5e02bc95b5..56f45586c3 100644 --- a/ui/src/app/locale/locale.constant-en_US.json +++ b/ui/src/app/locale/locale.constant-en_US.json @@ -457,7 +457,7 @@ "select-default-customer": "Select default customer", "default-customer": "Default customer", "default-customer-required": "Default customer is required in order to debug dashboard on Tenant level", - "edges": "Customer Edges" + "edges": "Customer edge instances" }, "datetime": { "date-from": "Date from", @@ -764,7 +764,7 @@ }, "edge": { "edge": "Edge", - "edges": "Edges", + "edge-instances": "Edge instances", "edge-file": "Edge file", "management": "Edge management", "no-edges-matching": "No edges matching '{{entity}}' were found.", @@ -828,8 +828,8 @@ "unassign-from-edge": "Unassign from edge", "dashboards": "Edge Dashboards", "manage-edge-rulechains": "Manage edge rule chains", - "rulechains": "Edge Rule Chains", - "rulechain": "Edge Rule Chain", + "rulechain-templates": "Rule chain templates", + "rulechain-template": "Rule chain template", "edge-key": "Edge key", "copy-edge-key": "Copy edge key", "edge-key-copied-message": "Edge key has been copied to clipboard", @@ -852,7 +852,11 @@ "enter-edge-type": "Enter edge type", "no-edge-types-matching": "No edge types matching '{{entitySubtype}}' were found.", "edge-type-list-empty": "No edge types selected.", - "edge-types": "Edge types" + "edge-types": "Edge types", + "license-key-hint": "To obtain your license please navigate to the pricing page and select the best license option for your case.", + "cloud-endpoint-hint": "Edge requires HTTP(s) access to Cloud (ThingsBoard CE/PE) to verify the license key. Please specify Cloud URL that Edge is able to connect to.", + "missing-related-rule-chains-title": "Edge has missing related rule chain(s)", + "missing-related-rule-chains-text": "Assigned to edge rule chain(s) use rule nodes that forward message(s) to rule chain(s) that are not assigned to this edge.

List of missing rule chain(s):
{{missingRuleChains}}" }, "error": { "unable-to-connect": "Unable to connect to the server! Please check your internet connection.", @@ -1549,9 +1553,6 @@ "rulechain": { "rulechain": "Rule chain", "rulechains": "Rule chains", - "core-rulechains": "Core Rule chains", - "edge-rulechains": "Edge Rule chains", - "default-root": "Default root", "root": "Root", "delete": "Delete rule chain", "name": "Name", @@ -1588,7 +1589,7 @@ "assign-rulechains": "Assign rulechains", "assign-new-rulechain": "Assign new rulechain", "delete-rulechains": "Delete rulechains", - "default": "Default", + "set-auto-assign-to-edge-card": "Assign to edge(s) on creation", "unassign-rulechain": "Unassign rulechain", "unassign-rulechains": "Unassign rulechains", "unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainTitle}}'?", @@ -1601,13 +1602,17 @@ "set-default-root-edge": "Make rule chain default root", "set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?", "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.", + "set-edge-template-root-rulechain": "Make rule chain as edge template root", + "set-edge-template-root-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' edge template root?", + "set-edge-template-root-rulechain-text": "After the confirmation the rule chain will become edge template root and will be root rule chain for a newly created edges.", "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.", - "set-default-edge": "Make rule chain default", - "set-default-edge-title": "Are you sure you want to make the edge rule chain '{{ruleChainName}}' default?", - "set-default-edge-text": "After the confirmation the edge rule chain will be added to default list and assigned to newly created edge(s).", - "remove-default-edge": "Remove rule chain from defaults", - "remove-default-edge-title": "Are you sure you want to remove the edge rule chain '{{ruleChainName}}' from default list?", - "remove-default-edge-text": "After the confirmation the edge rule chain will not be assigned for a newly created edges." + "set-auto-assign-to-edge": "Assign rule chain to edge(s) on creation", + "set-auto-assign-to-edge-title": "Are you sure you want to assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?", + "set-auto-assign-to-edge-text": "After the confirmation the edge rule chain will be automatically assigned to edge(s) on creation.", + "unset-auto-assign-to-edge": "Do not assign rule chain to edge(s) on creation", + "unset-auto-assign-to-edge-title": "Are you sure you do not want to assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?", + "unset-auto-assign-to-edge-text": "After the confirmation the edge rule chain will no longer be automatically assigned to edge(s) on creation.", + "edge-template-root": "Template Root" }, "rulenode": { "details": "Details", diff --git a/ui/src/app/locale/locale.constant-es_ES.json b/ui/src/app/locale/locale.constant-es_ES.json index 060c762fec..301e292de2 100644 --- a/ui/src/app/locale/locale.constant-es_ES.json +++ b/ui/src/app/locale/locale.constant-es_ES.json @@ -743,7 +743,7 @@ }, "edge": { "edge": "Borde", - "edges": "Bordes", + "edge-instances": "Bordes", "management": "Gestión de bordes", "no-edges-matching": "No se encontraron bordes que coincidan con '{{entity}}'", "add": "Agregar borde", @@ -1423,8 +1423,6 @@ "rulechain": { "rulechain": "Cadena de reglas", "rulechains": "Cadenas de reglas", - "core-rulechains": "Cadenas de reglas centrales", - "edge-rulechains": "Cadenas de reglas de borde", "root": "Raíz", "delete": "Eliminar cadena de reglas", "name": "Nombre", @@ -1461,7 +1459,6 @@ "assign-rulechains": "Asignar cadenas de reglas", "assign-new-rulechain": "Asignar nueva cadena de reglas", "delete-rulechains": "Eliminar cadenas de reglas", - "default": "Predeterminado", "unassign-rulechain": "Anular asignación de cadena de reglas", "unassign-rulechains": "Anular asignación de cadenas de reglas", "unassign-rulechain-title": "¿Está seguro de que desea desasignar la cadena de reglas '{{ruleChainTitle}}'?", @@ -1471,16 +1468,17 @@ "unassign-rulechains-from-edge-text": "Después de la confirmación, todas las cadenas de reglas seleccionadas quedarán sin asignar y el borde no podrá acceder a ellas", "assign-rulechain-to-edge": "Asignar cadena (s) de reglas a borde", "assign-rulechain-to-edge-text": "Seleccione las cadenas de reglas para asignar al borde", - "set-default-root-edge": "Hacer que la cadena de reglas sea la raíz predeterminada", - "set-default-root-edge-rulechain-title": "¿Está seguro de que desea hacer que la cadena de reglas '{{ruleChainName}}' sea la raíz de borde predeterminada?", - "set-default-root-edge-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en raíz raíz predeterminada y manejará todos los mensajes de transporte entrantes", + "set-edge-template-root-rulechain": "Hacer una cadena de reglas como raíz de la plantilla de borde", + "set-edge-template-root-rulechain-title": "¿Está seguro de que desea que la cadena de reglas '{{ruleChainName}}' sea la raíz de la plantilla de borde?", + "set-edge-template-root-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en la raíz de la plantilla de borde y será la cadena de reglas raíz para los bordes recién creados.", "invalid-rulechain-type-error": "No se puede importar la cadena de reglas: Tipo de cadena de reglas no válido. El tipo esperado es {{expectedRuleChainType}}", - "set-default-edge": "Hacer que la cadena de reglas de borde sea predeterminada", - "set-default-edge-title": "¿Está seguro de que desea que la cadena de reglas de borde '{{ruleChainName}}' sea predeterminada?", - "set-default-edge-text": "Después de la confirmación, la cadena de reglas de borde se agregará a la lista predeterminada y se asignará a los bordes recién creados", - "remove-default-edge": "Eliminar la cadena de regla de borde de los valores predeterminados", - "remove-default-edge-title": "¿Está seguro de que desea eliminar la cadena de reglas de borde '{{ruleChainName}}' de la lista predeterminada?", - "remove-default-edge-text": "Después de la confirmación, la cadena de reglas de borde no se asignará a los bordes recién creados" + "set-auto-assign-to-edge": "Asignar cadena de reglas a los bordes en la creación", + "set-auto-assign-to-edge-title": "¿Está seguro de que desea asignar la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?", + "set-auto-assign-to-edge-text": "Después de la confirmación, la cadena de reglas de borde se asignará automáticamente a los bordes en la creación.", + "unset-auto-assign-to-edge": "No asigne una cadena de reglas a los bordes en la creación", + "unset-auto-assign-to-edge-title": "¿Está seguro de que no desea asignar la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?", + "unset-auto-assign-to-edge-text": "Después de la confirmación, la cadena de reglas de borde ya no se asignará automáticamente a los bordes en la creación.", + "edge-template-root": "Raíz de plantilla" }, "rulenode": { "details": "Detalles", diff --git a/ui/src/app/locale/locale.constant-fr_FR.json b/ui/src/app/locale/locale.constant-fr_FR.json index fcd2bc4d22..a4b92cae37 100644 --- a/ui/src/app/locale/locale.constant-fr_FR.json +++ b/ui/src/app/locale/locale.constant-fr_FR.json @@ -748,7 +748,7 @@ }, "edge": { "edge": "Bordure", - "edges": "Bordures", + "edge-instances": "Bordures", "management": "Gestion des bordures", "no-edges-matching": "Aucun bordure correspondant à {{entity}} n'a été trouvé.", "add": "Ajouter un bordure", @@ -1429,8 +1429,6 @@ "rulechain-required": "Chaîne de règles requise", "rulechains": "Chaînes de règles", "select-rulechain": "Sélectionner la chaîne de règles", - "core-rulechains": "Chaînes de règles fondamentales", - "edge-rulechains": "Chaînes de règles de la bordure", "set-root": "Rend la chaîne de règles racine (root) ", "set-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra racine (root) et gérera tous les messages de transport entrants.", "set-root-rulechain-title": "Voulez-vous vraiment que la chaîne de règles '{{ruleChainName}} soit racine (root) ?", @@ -1438,7 +1436,6 @@ "assign-rulechains": "Attribuer aux chaînes de règles", "assign-new-rulechain": "Attribuer une nouvele chaînes de règles", "delete-rulechains": "Supprimer une chaînes de règles", - "default": "Défaut", "unassign-rulechain": "Retirer chaîne de règles", "unassign-rulechains": "Retirer chaînes de règles", "unassign-rulechain-title": "AÊtes-vous sûr de vouloir retirer l'attribution de chaînes de règles '{{ruleChainTitle}}'?", @@ -1448,16 +1445,17 @@ "unassign-rulechains-from-edge-text": "Après la confirmation, tous les chaînes de règles sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.", "assign-rulechain-to-edge": "Attribuer les chaînes de règles a la bordure", "assign-rulechain-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les chaînes de règles", - "set-default-root-edge": "Définir la racine par défaut de la chaîne de règles", - "set-default-root-edge-rulechain-title": "AVoulez-vous vraiment créer de chaînes de règles par défaut '{{ruleChainName}}'?", - "set-default-root-edge-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine de la bordure par défaut et gérera tous les messages de transport entrants.", + "set-edge-template-root-rulechain": "Faire de la chaîne de règles la racine du modèle d'arête", + "set-edge-template-root-rulechain-title": "Voulez-vous vraiment définir la racine du modèle d'arête de la chaîne de règles '{{ruleChainName}}'?", + "set-edge-template-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine du modèle d'arête et sera la chaîne de règles racine pour les arêtes nouvellement créées.", "invalid-rulechain-type-error": "Impossible d'importer la chaîne de règles: type de chaîne de règles non valide. Le type attendu est {{attenduRuleChainType}}.", - "set-default-edge": "Définir la chaîne de règles de la bordure par défaut", - "set-default-edge-title": "Voulez-vous vraiment définir la chaîne de règles de la bordure '{{ruleChainName}}' par défaut?", - "set-default-edge-text": "Après la confirmation, la chaîne de règles d'arête sera ajoutée à la liste par défaut et affectée aux arêtes nouvellement créées.", - "remove-default-edge": "Supprimer la chaîne de règles de la bordure des valeurs par défaut", - "remove-default-edge-title": "Voulez-vous vraiment supprimer la chaîne de règles de la bordure '{{ruleChainName}}' de la liste par défaut", - "remove-default-edge-text": "Après la confirmation, la chaîne de règles d'arête ne sera pas affectée aux arêtes nouvellement créées." + "set-auto-assign-to-edge": "Attribuer une chaîne de règles aux arêtes lors de la création", + "set-auto-assign-to-edge-title": "Voulez-vous vraiment attribuer la chaîne de règles d'arête '{{ruleChainName}}' à l'arête (s) lors de la création?", + "set-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arêtes sera automatiquement affectée aux arêtes lors de la création.", + "unset-auto-assign-to-edge": "N'attribuez pas de chaîne de règles aux arêtes lors de la création", + "unset-auto-assign-to-edge-title": "Êtes-vous sûr de ne pas vouloir attribuer la chaîne de règles d'arête '{{ruleChainName}}' à l'arête (s) lors de la création?", + "unset-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arêtes ne sera plus automatiquement affectée aux arêtes lors de la création.", + "edge-template-root": "Racine du modèle" }, "rulenode": { "add": "Ajouter un noeud de règle", diff --git a/ui/src/app/rulechain/rulechain-card.tpl.html b/ui/src/app/rulechain/rulechain-card.tpl.html index e4df4c9471..974a0af4cf 100644 --- a/ui/src/app/rulechain/rulechain-card.tpl.html +++ b/ui/src/app/rulechain/rulechain-card.tpl.html @@ -18,6 +18,6 @@
rulechain.root
-
rulechain.default-root
+
rulechain.edge-template-root
-
rulechain.default
+
rulechain.set-auto-assign-to-edge-card
diff --git a/ui/src/app/rulechain/rulechain-fieldset.tpl.html b/ui/src/app/rulechain/rulechain-fieldset.tpl.html index 5d3bf08739..6a4841a550 100644 --- a/ui/src/app/rulechain/rulechain-fieldset.tpl.html +++ b/ui/src/app/rulechain/rulechain-fieldset.tpl.html @@ -15,32 +15,31 @@ limitations under the License. --> -{{ 'rulechain.export' | translate }} - -{{ 'rulechain.set-root' | translate }} - -{{ 'rulechain.set-default-root-edge' | translate }} -{{ 'rulechain.set-default-edge' | translate }} -{{ 'rulechain.remove-default-edge' | translate }} - -{{ 'rulechain.set-root' | translate }} - -{{ 'rulechain.delete' | translate }} +
+ {{ 'rulechain.export' | translate }} + {{ 'rulechain.delete' | translate }} +
+
{{ 'rulechain.set-root' | translate }} + {{ 'rulechain.set-edge-template-root-rulechain' | translate }} + {{ 'rulechain.set-auto-assign-to-edge' | translate }} + {{ 'rulechain.unset-auto-assign-to-edge' | translate }} + {{ 'rulechain.set-root' | translate }} +
{ if (vm.ruleChain.type === vm.types.ruleChainType.core) { - $state.go('home.ruleChains.core.ruleChain', {ruleChainId: vm.ruleChain.id.id}); + $state.go('home.ruleChains.ruleChain', {ruleChainId: vm.ruleChain.id.id}); } else { - $state.go('home.ruleChains.edge.ruleChain', {ruleChainId: vm.ruleChain.id.id}); + $state.go('home.edges.edgeRuleChains.ruleChain', {ruleChainId: vm.ruleChain.id.id}); } }); } else { diff --git a/ui/src/app/rulechain/rulechain.directive.js b/ui/src/app/rulechain/rulechain.directive.js index 750c96d05c..9aaca2aec0 100644 --- a/ui/src/app/rulechain/rulechain.directive.js +++ b/ui/src/app/rulechain/rulechain.directive.js @@ -42,8 +42,8 @@ export default function RuleChainDirective($compile, $templateCache, $mdDialog, theForm: '=', ruleChainsScope: '=', edge: '=', - onSetDefaultEdgeRuleChain: '&', - onRemoveDefaultEdgeRuleChain: '&', + onSetAutoAssignToEdgeRuleChain: '&', + onUnsetAutoAssignToEdgeRuleChain: '&', onSetRootRuleChain: '&', onExportRuleChain: '&', onDeleteRuleChain: '&' diff --git a/ui/src/app/rulechain/rulechain.routes.js b/ui/src/app/rulechain/rulechain.routes.js index 8a5c13cc1d..9bdb5c2981 100644 --- a/ui/src/app/rulechain/rulechain.routes.js +++ b/ui/src/app/rulechain/rulechain.routes.js @@ -29,15 +29,6 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider $stateProvider .state('home.ruleChains', { url: '/ruleChains', - module: 'private', - auth: ['SYS_ADMIN', 'TENANT_ADMIN'], - redirectTo: 'home.ruleChains.core', - ncyBreadcrumb: { - label: '{"icon": "settings_ethernet", "label": "rulechain.rulechains"}' - } - }) - .state('home.ruleChains.core', { - url: '/ruleChains/core', params: {'topIndex': 0}, module: 'private', auth: ['SYS_ADMIN', 'TENANT_ADMIN'], @@ -50,13 +41,13 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider }, data: { searchEnabled: true, - pageTitle: 'rulechain.core-rulechains', + pageTitle: 'rulechain.rulechains', ruleChainsType: 'tenant' }, ncyBreadcrumb: { - label: '{"icon": "settings_ethernet", "label": "rulechain.core-rulechains"}' + label: '{"icon": "settings_ethernet", "label": "rulechain.rulechains"}' } - }).state('home.ruleChains.core.ruleChain', { + }).state('home.ruleChains.ruleChain', { url: '/:ruleChainId', reloadOnSearch: false, module: 'private', @@ -134,8 +125,8 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider ncyBreadcrumb: { label: '{"icon": "settings_ethernet", "label": "{{ (\'rulechain.import\' | translate) + \': \'+ vm.ruleChain.name }}", "translate": "false"}' } - }).state('home.ruleChains.edge', { - url: '/ruleChains/edge', + }).state('home.edges.edgeRuleChains', { + url: '/ruleChains', params: {'topIndex': 0}, module: 'private', auth: ['TENANT_ADMIN'], @@ -148,13 +139,13 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider }, data: { searchEnabled: true, - pageTitle: 'rulechain.edge-rulechains', + pageTitle: 'edge.rulechain-templates', ruleChainsType: 'edges' }, ncyBreadcrumb: { - label: '{"icon": "code", "label": "rulechain.edge-rulechains"}' + label: '{"icon": "settings_ethernet", "label": "edge.rulechain-templates"}' } - }).state('home.ruleChains.edge.ruleChain', { + }).state('home.edges.edgeRuleChains.ruleChain', { url: '/:ruleChainId', reloadOnSearch: false, module: 'private', @@ -186,10 +177,51 @@ export default function RuleChainRoutes($stateProvider, NodeTemplatePathProvider data: { import: false, searchEnabled: false, - pageTitle: 'edge.rulechain' + pageTitle: 'edge.rulechain-template' + }, + ncyBreadcrumb: { + label: '{"icon": "settings_ethernet", "label": "{{ vm.ruleChain.name }}", "translate": "false"}' + } + }).state('home.edges.edgeRuleChains.importRuleChain', { + url: '/edges/ruleChains/import', + reloadOnSearch: false, + module: 'private', + auth: ['SYS_ADMIN', 'TENANT_ADMIN'], + views: { + "content@home": { + templateUrl: ruleChainTemplate, + controller: 'RuleChainController', + controllerAs: 'vm' + } + }, + params: { + ruleChainImport: {}, + ruleChainType: {} + }, + resolve: { + ruleChain: + /*@ngInject*/ + function($stateParams) { + return $stateParams.ruleChainImport.ruleChain; + }, + ruleChainMetaData: + /*@ngInject*/ + function($stateParams) { + return $stateParams.ruleChainImport.metadata; + }, + ruleNodeComponents: + /*@ngInject*/ + function($stateParams, ruleChainService) { + return ruleChainService.getRuleNodeComponents($stateParams.ruleChainType); + } + }, + data: { + import: true, + searchEnabled: true, + pageTitle: 'edge.rulechain-template' }, ncyBreadcrumb: { - label: '{"icon": "code", "label": "{{ vm.ruleChain.name }}", "translate": "false"}' + label: '{"icon": "settings_ethernet", "label": "{{ (\'rulechain.import\' | translate) + \': \'+ vm.ruleChain.name }}", "translate": "false"}' } }); } diff --git a/ui/src/app/rulechain/rulechains.controller.js b/ui/src/app/rulechain/rulechains.controller.js index a457883b16..4ea5d5ffd1 100644 --- a/ui/src/app/rulechain/rulechains.controller.js +++ b/ui/src/app/rulechain/rulechains.controller.js @@ -97,7 +97,7 @@ export default function RuleChainsController(ruleChainService, userService, impo vm.exportRuleChain = exportRuleChain; vm.setRootRuleChain = setRootRuleChain; - vm.setDefaultEdgeRuleChain = setDefaultEdgeRuleChain; + vm.setAutoAssignToEdgeRuleChain = setAutoAssignToEdgeRuleChain; vm.unsetAutoAssignToEdgeRuleChain = unsetAutoAssignToEdgeRuleChain; initController(); @@ -185,10 +185,10 @@ export default function RuleChainsController(ruleChainService, userService, impo ruleChainActionsList.push({ onAction: function ($event, item) { - setDefaultEdgeRuleChain($event, item); + setAutoAssignToEdgeRuleChain($event, item); }, - name: function() { return $translate.instant('rulechain.set-default-edge') }, - details: function() { return $translate.instant('rulechain.set-default-edge') }, + name: function() { return $translate.instant('rulechain.set-auto-assign-to-edge') }, + details: function() { return $translate.instant('rulechain.set-auto-assign-to-edge') }, icon: "bookmark_outline", isEnabled: isNonDefaultEdgeRuleChain }); @@ -197,8 +197,8 @@ export default function RuleChainsController(ruleChainService, userService, impo onAction: function ($event, item) { unsetAutoAssignToEdgeRuleChain($event, item); }, - name: function() { return $translate.instant('rulechain.remove-default-edge') }, - details: function() { return $translate.instant('rulechain.remove-default-edge') }, + name: function() { return $translate.instant('rulechain.unset-auto-assign-to-edge') }, + details: function() { return $translate.instant('rulechain.unset-auto-assign-to-edge') }, icon: "bookmark", isEnabled: isDefaultEdgeRuleChain }); @@ -207,8 +207,8 @@ export default function RuleChainsController(ruleChainService, userService, impo onAction: function ($event, item) { setEdgeTemplateRootRuleChain($event, item); }, - name: function() { return $translate.instant('rulechain.set-default-root-edge') }, - details: function() { return $translate.instant('rulechain.set-default-root-edge') }, + name: function() { return $translate.instant('rulechain.set-edge-template-root-rulechain') }, + details: function() { return $translate.instant('rulechain.set-edge-template-root-rulechain') }, icon: "flag", isEnabled: isNonRootRuleChain }); @@ -247,7 +247,7 @@ export default function RuleChainsController(ruleChainService, userService, impo onAction: function ($event) { importExport.importRuleChain($event, types.ruleChainType.edge).then( function(ruleChainImport) { - $state.go('home.ruleChains.importRuleChain', {ruleChainImport:ruleChainImport, ruleChainType: types.ruleChainType.edge}); + $state.go('home.edges.edgeRuleChains.importRuleChain', {ruleChainImport:ruleChainImport, ruleChainType: types.ruleChainType.edge}); } ); }, @@ -401,9 +401,9 @@ export default function RuleChainsController(ruleChainService, userService, impo if (vm.ruleChainsScope === 'edge') { $state.go('home.edges.ruleChains.ruleChain', Object.assign(ruleChainParams, edgeId = vm.edge.id.id)); } else if (vm.ruleChainsScope === 'edges') { - $state.go('home.ruleChains.edge.ruleChain', ruleChainParams); + $state.go('home.edges.edgeRuleChains.ruleChain', ruleChainParams); } else { - $state.go('home.ruleChains.core.ruleChain', ruleChainParams); + $state.go('home.ruleChains.ruleChain', ruleChainParams); } } @@ -471,13 +471,13 @@ export default function RuleChainsController(ruleChainService, userService, impo }); } - function setDefaultEdgeRuleChain($event, ruleChain) { + function setAutoAssignToEdgeRuleChain($event, ruleChain) { $event.stopPropagation(); var confirm = $mdDialog.confirm() .targetEvent($event) - .title($translate.instant('rulechain.set-default-edge-title', {ruleChainName: ruleChain.name})) - .htmlContent($translate.instant('rulechain.set-default-edge-text')) - .ariaLabel($translate.instant('rulechain.set-default-edge')) + .title($translate.instant('rulechain.set-auto-assign-to-edge-title', {ruleChainName: ruleChain.name})) + .htmlContent($translate.instant('rulechain.set-auto-assign-to-edge-text')) + .ariaLabel($translate.instant('rulechain.set-auto-assign-to-edge')) .cancel($translate.instant('action.no')) .ok($translate.instant('action.yes')); $mdDialog.show(confirm).then(function () { @@ -493,9 +493,9 @@ export default function RuleChainsController(ruleChainService, userService, impo $event.stopPropagation(); var confirm = $mdDialog.confirm() .targetEvent($event) - .title($translate.instant('rulechain.remove-default-edge-title', {ruleChainName: ruleChain.name})) - .htmlContent($translate.instant('rulechain.remove-default-edge-text')) - .ariaLabel($translate.instant('rulechain.remove-default-edge')) + .title($translate.instant('rulechain.unset-auto-assign-to-edge-title', {ruleChainName: ruleChain.name})) + .htmlContent($translate.instant('rulechain.unset-auto-assign-to-edge-text')) + .ariaLabel($translate.instant('rulechain.unset-auto-assign-to-edge')) .cancel($translate.instant('action.no')) .ok($translate.instant('action.yes')); $mdDialog.show(confirm).then(function () { @@ -511,8 +511,8 @@ export default function RuleChainsController(ruleChainService, userService, impo $event.stopPropagation(); var confirm = $mdDialog.confirm() .targetEvent($event) - .title($translate.instant('rulechain.set-default-root-edge-rulechain-title', {ruleChainName: ruleChain.name})) - .htmlContent($translate.instant('rulechain.set-default-root-edge-rulechain-text')) + .title($translate.instant('rulechain.set-edge-template-root-rulechain-title', {ruleChainName: ruleChain.name})) + .htmlContent($translate.instant('rulechain.set-edge-template-root-rulechain-text')) .ariaLabel($translate.instant('rulechain.set-root-rulechain-text')) .cancel($translate.instant('action.no')) .ok($translate.instant('action.yes')); @@ -572,8 +572,32 @@ export default function RuleChainsController(ruleChainService, userService, impo fullscreen: true, targetEvent: $event }).then(function () { - vm.grid.refreshList(); - }, function () { + edgeService.findMissingToRelatedRuleChains(edgeId).then( + function success(missingRuleChains) { + if (missingRuleChains && Object.keys(missingRuleChains).length > 0) { + let formattedMissingRuleChains = []; + for (const missingRuleChain of Object.keys(missingRuleChains)) { + const arrayOfMissingRuleChains = missingRuleChains[missingRuleChain]; + const tmp = "- '" + missingRuleChain + "': '" + arrayOfMissingRuleChains.join("', ") + "'"; + formattedMissingRuleChains.push(tmp); + } + var alert = $mdDialog.alert() + .parent(angular.element($document[0].body)) + .clickOutsideToClose(true) + .title($translate.instant('edge.missing-related-rule-chains-title')) + .htmlContent($translate.instant('edge.missing-related-rule-chains-text', {missingRuleChains: formattedMissingRuleChains.join("
")})) + .ok($translate.instant('action.close')); + alert._options.fullscreen = true; + $mdDialog.show(alert).then( + function () { + vm.grid.refreshList(); + } + ); + } else { + vm.grid.refreshList(); + } + } + ); }); }, function fail() { diff --git a/ui/src/app/rulechain/rulechains.tpl.html b/ui/src/app/rulechain/rulechains.tpl.html index fe9b9fdc64..94ca52f3c6 100644 --- a/ui/src/app/rulechain/rulechains.tpl.html +++ b/ui/src/app/rulechain/rulechains.tpl.html @@ -28,8 +28,8 @@ the-form="vm.grid.detailsForm" rule-chains-scope="vm.ruleChainsScope" edge="vm.edge" - on-set-default-edge-rule-chain="vm.setDefaultEdgeRuleChain(event, vm.grid.detailsConfig.currentItem)" - on-remove-default-edge-rule-chain="vm.unsetAutoAssignToEdgeRuleChain(event, vm.grid.detailsConfig.currentItem)" + on-set-auto-assign-to-edge-rule-chain="vm.setAutoAssignToEdgeRuleChain(event, vm.grid.detailsConfig.currentItem)" + on-unset-auto-assign-to-edge-rule-chain="vm.unsetAutoAssignToEdgeRuleChain(event, vm.grid.detailsConfig.currentItem)" on-set-root-rule-chain="vm.setRootRuleChain(event, vm.grid.detailsConfig.currentItem)" on-export-rule-chain="vm.exportRuleChain(event, vm.grid.detailsConfig.currentItem)" on-delete-rule-chain="vm.grid.deleteItem(event, vm.grid.detailsConfig.currentItem)"> diff --git a/ui/src/app/services/menu.service.js b/ui/src/app/services/menu.service.js index 4cad286de8..2d01daccdf 100644 --- a/ui/src/app/services/menu.service.js +++ b/ui/src/app/services/menu.service.js @@ -156,24 +156,9 @@ function Menu(userService, $state, $rootScope) { }, { name: 'rulechain.rulechains', - type: 'toggle', + type: 'link', state: 'home.ruleChains', - height: '80px', - icon: 'settings_ethernet', - pages: [ - { - name: 'rulechain.core-rulechains', - type: 'link', - state: 'home.ruleChains.core', - icon: 'settings_ethernet' - }, - { - name: 'rulechain.edge-rulechains', - type: 'link', - state: 'home.ruleChains.edge', - icon: 'code' - } - ] + icon: 'settings_ethernet' }, { name: 'customer.customers', @@ -198,13 +183,33 @@ function Menu(userService, $state, $rootScope) { type: 'link', state: 'home.entityViews', icon: 'view_quilt' - }, - { - name: 'edge.edges', - type: 'link', - state: 'home.edges', - icon: 'router' - }, + }]; + if (userService.isEdgesSupportEnabled()) { + sections.push( + { + name: 'edge.management', + type: 'toggle', + state: 'home.edges', + height: '80px', + icon: 'router', + pages: [ + { + name: 'edge.edge-instances', + type: 'link', + state: 'home.edges', + icon: 'router' + }, + { + name: 'edge.rulechain-templates', + type: 'link', + state: 'home.edges.edgeRuleChains', + icon: 'settings_ethernet' + } + ] + } + ); + } + sections.push( { name: 'widget.widget-library', type: 'link', @@ -222,21 +227,17 @@ function Menu(userService, $state, $rootScope) { type: 'link', state: 'home.auditLogs', icon: 'track_changes' - }]; + } + ); homeSections = [{ - name: 'rulechain.management', + name: 'rulechain.rulechains', places: [ { - name: 'rulechain.core-rulechains', + name: 'rulechain.rulechains', icon: 'settings_ethernet', - state: 'home.ruleChains.core' - }, - { - name: 'rulechain.edge-rulechains', - icon: 'code', - state: 'home.ruleChains.edge' + state: 'home.ruleChains' } ] }, @@ -279,43 +280,51 @@ function Menu(userService, $state, $rootScope) { state: 'home.entityViews' } ] - }, - { - name: 'edge.management', - places: [ - { - name: 'edge.edges', - icon: 'router', - state: 'home.edges' - } - ] - }, - { - name: 'dashboard.management', - places: [ - { - name: 'widget.widget-library', - icon: 'now_widgets', - state: 'home.widgets-bundles' - }, - { - name: 'dashboard.dashboards', - icon: 'dashboard', - state: 'home.dashboards' - } - ] - }, - { - name: 'audit-log.audit', - places: [ - { - name: 'audit-log.audit-logs', - icon: 'track_changes', - state: 'home.auditLogs' - } - ] }]; + if (userService.isEdgesSupportEnabled()) { + homeSections.push({ + name: 'edge.management', + places: [ + { + name: 'edge.edge-instances', + icon: 'router', + state: 'home.edges' + }, + { + name: 'edge.rulechain-templates', + icon: 'settings_ethernet', + state: 'home.edges.edgeRuleChains' + } + ] + }); + } + homeSections.push( + { + name: 'dashboard.management', + places: [ + { + name: 'widget.widget-library', + icon: 'now_widgets', + state: 'home.widgets-bundles' + }, + { + name: 'dashboard.dashboards', + icon: 'dashboard', + state: 'home.dashboards' + } + ] + }, + { + name: 'audit-log.audit', + places: [ + { + name: 'audit-log.audit-logs', + icon: 'track_changes', + state: 'home.auditLogs' + } + ] + }); } else if (authority === 'CUSTOMER_USER') { sections = [ { @@ -341,19 +350,25 @@ function Menu(userService, $state, $rootScope) { type: 'link', state: 'home.entityViews', icon: 'view_quilt' - }, - { - name: 'edge.edges', - type: 'link', - state: 'home.edges', - icon: 'router' - }, + }]; + if (userService.isEdgesSupportEnabled()) { + sections.push( + { + name: 'edge.edge-instances', + type: 'link', + state: 'home.edges', + icon: 'router' + } + ); + } + sections.push( { name: 'dashboard.dashboards', type: 'link', state: 'home.dashboards', icon: 'dashboard' - }]; + } + ); homeSections = [{ @@ -385,17 +400,22 @@ function Menu(userService, $state, $rootScope) { state: 'home.entityViews' } ] - }, - { - name: 'edge.management', - places: [ - { - name: 'edge.edges', - icon: 'router', - state: 'home.edges' - } - ] - }, + }]; + if (userService.isEdgesSupportEnabled()) { + homeSections.push( + { + name: 'edge.edge-instances', + places: [ + { + name: 'edge.edge-instances', + icon: 'router', + state: 'home.edges' + } + ] + } + ); + } + homeSections.push( { name: 'dashboard.view-dashboards', places: [ @@ -405,7 +425,8 @@ function Menu(userService, $state, $rootScope) { state: 'home.dashboards' } ] - }]; + } + ); } } } @@ -423,4 +444,4 @@ function Menu(userService, $state, $rootScope) { return $state.includes(section.state); } -} \ No newline at end of file +}