Commit e761f53dd09bb29c48c7d2aaea9db96a73fbf98b

Authored by Volodymyr Babak
1 parent f17acd5a

Hide entity type edge if disabled. Renaming edge rule chain to rule chain templa…

…tes. Minor fixes after demo
... ... @@ -28,8 +28,8 @@ import { RuleChainType } from "@shared/models/rule-chain.models";
28 28 })
29 29 export class ComponentDescriptorService {
30 30
31   - private componentsByType: Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>> =
32   - new Map<ComponentType, Array<ComponentDescriptor>>();
  31 + private componentsByTypeByRuleChainType: Map<RuleChainType, Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>> =
  32 + new Map<RuleChainType, Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>>();
33 33 private componentsByClazz: Map<string, ComponentDescriptor> = new Map<string, ComponentDescriptor>();
34 34
35 35 constructor(
... ... @@ -37,14 +37,17 @@ export class ComponentDescriptorService {
37 37 ) {
38 38 }
39 39
40   - public getComponentDescriptorsByType(componentType: ComponentType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
41   - const existing = this.componentsByType.get(componentType);
  40 + public getComponentDescriptorsByType(componentType: ComponentType, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
  41 + if (!this.componentsByTypeByRuleChainType.get(ruleChainType)) {
  42 + this.componentsByTypeByRuleChainType.set(ruleChainType, new Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>());
  43 + }
  44 + const existing = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentType);
42 45 if (existing) {
43 46 return of(existing);
44 47 } else {
45   - return this.http.get<Array<ComponentDescriptor>>(`/api/components/${componentType}`, defaultHttpOptionsFromConfig(config)).pipe(
  48 + return this.http.get<Array<ComponentDescriptor>>(`/api/components/${componentType}&ruleChainType=${ruleChainType}`, defaultHttpOptionsFromConfig(config)).pipe(
46 49 map((componentDescriptors) => {
47   - this.componentsByType.set(componentType, componentDescriptors);
  50 + this.componentsByTypeByRuleChainType.get(ruleChainType).set(componentType, componentDescriptors);
48 51 componentDescriptors.forEach((componentDescriptor) => {
49 52 this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor);
50 53 });
... ... @@ -55,10 +58,13 @@ export class ComponentDescriptorService {
55 58 }
56 59
57 60 public getComponentDescriptorsByTypes(componentTypes: Array<ComponentType>, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
  61 + if (!this.componentsByTypeByRuleChainType.get(ruleChainType)) {
  62 + this.componentsByTypeByRuleChainType.set(ruleChainType, new Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>());
  63 + }
58 64 let result: ComponentDescriptor[] = [];
59 65 for (let i = componentTypes.length - 1; i >= 0; i--) {
60 66 const componentType = componentTypes[i];
61   - const componentDescriptors = this.componentsByType.get(componentType);
  67 + const componentDescriptors = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentType);
62 68 if (componentDescriptors) {
63 69 result = result.concat(componentDescriptors);
64 70 componentTypes.splice(i, 1);
... ... @@ -71,10 +77,10 @@ export class ComponentDescriptorService {
71 77 defaultHttpOptionsFromConfig(config)).pipe(
72 78 map((componentDescriptors) => {
73 79 componentDescriptors.forEach((componentDescriptor) => {
74   - let componentsList = this.componentsByType.get(componentDescriptor.type);
  80 + let componentsList = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentDescriptor.type);
75 81 if (!componentsList) {
76 82 componentsList = new Array<ComponentDescriptor>();
77   - this.componentsByType.set(componentDescriptor.type, componentsList);
  83 + this.componentsByTypeByRuleChainType.get(ruleChainType).set(componentDescriptor.type, componentsList);
78 84 }
79 85 componentsList.push(componentDescriptor);
80 86 this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor);
... ...
... ... @@ -28,7 +28,7 @@ import { UserService } from './user.service';
28 28 import { DashboardService } from '@core/http/dashboard.service';
29 29 import { Direction } from '@shared/models/page/sort-order';
30 30 import { PageData } from '@shared/models/page/page-data';
31   -import { getCurrentAuthUser } from '@core/auth/auth.selectors';
  31 +import { getCurrentAuthState, getCurrentAuthUser } from '@core/auth/auth.selectors';
32 32 import { Store } from '@ngrx/store';
33 33 import { AppState } from '@core/core.state';
34 34 import { Authority } from '@shared/models/authority.enum';
... ... @@ -579,16 +579,18 @@ export class EntityService {
579 579
580 580 public prepareAllowedEntityTypesList(allowedEntityTypes: Array<EntityType | AliasEntityType>,
581 581 useAliasEntityTypes?: boolean): Array<EntityType | AliasEntityType> {
582   - const authUser = getCurrentAuthUser(this.store);
  582 + const authState = getCurrentAuthState(this.store);
583 583 const entityTypes: Array<EntityType | AliasEntityType> = [];
584   - switch (authUser.authority) {
  584 + switch (authState.authUser.authority) {
585 585 case Authority.SYS_ADMIN:
586 586 entityTypes.push(EntityType.TENANT);
587 587 break;
588 588 case Authority.TENANT_ADMIN:
589 589 entityTypes.push(EntityType.DEVICE);
590 590 entityTypes.push(EntityType.ASSET);
591   - entityTypes.push(EntityType.EDGE);
  591 + if (authState.edgesSupportEnabled) {
  592 + entityTypes.push(EntityType.EDGE);
  593 + }
592 594 entityTypes.push(EntityType.ENTITY_VIEW);
593 595 entityTypes.push(EntityType.TENANT);
594 596 entityTypes.push(EntityType.CUSTOMER);
... ... @@ -602,7 +604,9 @@ export class EntityService {
602 604 case Authority.CUSTOMER_USER:
603 605 entityTypes.push(EntityType.DEVICE);
604 606 entityTypes.push(EntityType.ASSET);
605   - entityTypes.push(EntityType.EDGE);
  607 + if (authState.edgesSupportEnabled) {
  608 + entityTypes.push(EntityType.EDGE);
  609 + }
606 610 entityTypes.push(EntityType.ENTITY_VIEW);
607 611 entityTypes.push(EntityType.CUSTOMER);
608 612 entityTypes.push(EntityType.USER);
... ... @@ -614,7 +618,7 @@ export class EntityService {
614 618 }
615 619 if (useAliasEntityTypes) {
616 620 entityTypes.push(AliasEntityType.CURRENT_USER);
617   - if (authUser.authority !== Authority.SYS_ADMIN) {
  621 + if (authState.authUser.authority !== Authority.SYS_ADMIN) {
618 622 entityTypes.push(AliasEntityType.CURRENT_USER_OWNER);
619 623 }
620 624 }
... ...
... ... @@ -51,7 +51,8 @@ import { Edge } from "@shared/models/edge.models";
51 51 })
52 52 export class RuleChainService {
53 53
54   - private ruleNodeComponents: Array<RuleNodeComponentDescriptor>;
  54 + private ruleNodeComponentsMap: Map<RuleChainType, Array<RuleNodeComponentDescriptor>> =
  55 + new Map<RuleChainType, Array<RuleNodeComponentDescriptor>>();
55 56 private ruleNodeConfigFactories: {[directive: string]: ComponentFactory<IRuleNodeConfigurationComponent>} = {};
56 57
57 58 constructor(
... ... @@ -120,16 +121,16 @@ export class RuleChainService {
120 121
121 122 public getRuleNodeComponents(ruleNodeConfigResourcesModulesMap: {[key: string]: any}, ruleChainType: RuleChainType, config?: RequestConfig):
122 123 Observable<Array<RuleNodeComponentDescriptor>> {
123   - if (this.ruleNodeComponents) {
124   - return of(this.ruleNodeComponents);
  124 + if (this.ruleNodeComponentsMap.get(ruleChainType)) {
  125 + return of(this.ruleNodeComponentsMap.get(ruleChainType));
125 126 } else {
126 127 return this.loadRuleNodeComponents(ruleChainType, config).pipe(
127 128 mergeMap((components) => {
128 129 return this.resolveRuleNodeComponentsUiResources(components, ruleNodeConfigResourcesModulesMap).pipe(
129 130 map((ruleNodeComponents) => {
130   - this.ruleNodeComponents = ruleNodeComponents;
131   - this.ruleNodeComponents.push(ruleChainNodeComponent);
132   - this.ruleNodeComponents.sort(
  131 + this.ruleNodeComponentsMap.set(ruleChainType, ruleNodeComponents);
  132 + this.ruleNodeComponentsMap.get(ruleChainType).push(ruleChainNodeComponent);
  133 + this.ruleNodeComponentsMap.get(ruleChainType).sort(
133 134 (comp1, comp2) => {
134 135 let result = comp1.type.toString().localeCompare(comp2.type.toString());
135 136 if (result === 0) {
... ... @@ -138,7 +139,7 @@ export class RuleChainService {
138 139 return result;
139 140 }
140 141 );
141   - return this.ruleNodeComponents;
  142 + return this.ruleNodeComponentsMap.get(ruleChainType);
142 143 })
143 144 );
144 145 })
... ... @@ -151,7 +152,11 @@ export class RuleChainService {
151 152 }
152 153
153 154 public getRuleNodeComponentByClazz(clazz: string): RuleNodeComponentDescriptor {
154   - const found = this.ruleNodeComponents.filter((component) => component.clazz === clazz);
  155 + let mergedRuleNodeComponents: RuleNodeComponentDescriptor[] = [];
  156 + this.ruleNodeComponentsMap.forEach((value: Array<RuleNodeComponentDescriptor>, key: RuleChainType) => {
  157 + mergedRuleNodeComponents = mergedRuleNodeComponents.concat(value);
  158 + });
  159 + const found = mergedRuleNodeComponents.filter((component) => component.clazz === clazz);
155 160 if (found && found.length) {
156 161 return found[0];
157 162 } else {
... ...
... ... @@ -18,14 +18,13 @@ import { Injectable } from '@angular/core';
18 18 import { AuthService } from '../auth/auth.service';
19 19 import { select, Store } from '@ngrx/store';
20 20 import { AppState } from '../core.state';
21   -import {selectAuth, selectAuthUser, selectIsAuthenticated} from '../auth/auth.selectors';
  21 +import { selectAuth, selectAuthUser, selectIsAuthenticated } from '../auth/auth.selectors';
22 22 import { take } from 'rxjs/operators';
23 23 import { HomeSection, MenuSection } from '@core/services/menu.models';
24 24 import { BehaviorSubject, Observable, Subject } from 'rxjs';
25 25 import { Authority } from '@shared/models/authority.enum';
26   -import { AuthUser } from '@shared/models/user.model';
27 26 import { guid } from '@core/utils';
28   -import {AuthState} from "@core/auth/auth.models";
  27 +import { AuthState } from "@core/auth/auth.models";
29 28
30 29 @Injectable({
31 30 providedIn: 'root'
... ... @@ -282,14 +281,14 @@ export class MenuService {
282 281 pages: [
283 282 {
284 283 id: guid(),
285   - name: 'edge.edges',
  284 + name: 'edge.edge-instances',
286 285 type: 'link',
287 286 path: '/edges',
288 287 icon: 'router'
289 288 },
290 289 {
291 290 id: guid(),
292   - name: 'rulechain.edge-rulechains',
  291 + name: 'edge.rulechain-templates',
293 292 type: 'link',
294 293 path: '/edges/ruleChains',
295 294 icon: 'settings_ethernet'
... ... @@ -398,12 +397,12 @@ export class MenuService {
398 397 name: 'edge.management',
399 398 places: [
400 399 {
401   - name: 'edge.edges',
  400 + name: 'edge.edge-instances',
402 401 icon: 'router',
403 402 path: '/edges'
404 403 },
405 404 {
406   - name: 'rulechain.edge-rulechains',
  405 + name: 'edge.rulechain-templates',
407 406 icon: 'settings_ethernet',
408 407 path: '/edges/ruleChains'
409 408 }
... ... @@ -476,7 +475,20 @@ export class MenuService {
476 475 type: 'link',
477 476 path: '/entityViews',
478 477 icon: 'view_quilt'
479   - },
  478 + }
  479 + );
  480 + if (authState.edgesSupportEnabled) {
  481 + sections.push(
  482 + {
  483 + id: guid(),
  484 + name: 'edge.edge-instances',
  485 + type: 'link',
  486 + path: '/edges',
  487 + icon: 'router'
  488 + }
  489 + );
  490 + }
  491 + sections.push(
480 492 {
481 493 id: guid(),
482 494 name: 'dashboard.dashboards',
... ... @@ -489,7 +501,8 @@ export class MenuService {
489 501 }
490 502
491 503 private buildCustomerUserHome(authState: AuthState): Array<HomeSection> {
492   - const homeSections: Array<HomeSection> = [
  504 + const homeSections: Array<HomeSection> = [];
  505 + homeSections.push(
493 506 {
494 507 name: 'asset.view-assets',
495 508 places: [
... ... @@ -519,7 +532,23 @@ export class MenuService {
519 532 path: '/entityViews'
520 533 }
521 534 ]
522   - },
  535 + }
  536 + );
  537 + if (authState.edgesSupportEnabled) {
  538 + homeSections.push(
  539 + {
  540 + name: 'edge.management',
  541 + places: [
  542 + {
  543 + name: 'edge.edge-instances',
  544 + icon: 'router',
  545 + path: '/edges'
  546 + }
  547 + ]
  548 + }
  549 + );
  550 + }
  551 + homeSections.push(
523 552 {
524 553 name: 'dashboard.view-dashboards',
525 554 places: [
... ... @@ -530,7 +559,7 @@ export class MenuService {
530 559 }
531 560 ]
532 561 }
533   - ];
  562 + );
534 563 return homeSections;
535 564 }
536 565
... ...
... ... @@ -250,7 +250,7 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
250 250
251 251 resetSortAndFilter(update: boolean = true) {
252 252 const entityType = this.entityIdValue.entityType;
253   - if (entityType === EntityType.DEVICE || entityType === EntityType.ENTITY_VIEW || entityType === EntityType.EDGE) {
  253 + if (entityType === EntityType.DEVICE || entityType === EntityType.ENTITY_VIEW) {
254 254 this.attributeScopes = Object.keys(AttributeScope);
255 255 this.attributeScopeSelectionReadonly = false;
256 256 } else {
... ...
... ... @@ -239,7 +239,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
239 239 actions.push(
240 240 {
241 241 name: this.translate.instant('edge.unassign-from-edge'),
242   - icon: 'portable_wifi_off',
  242 + icon: 'assignment_return',
243 243 isEnabled: (entity) => true,
244 244 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
245 245 }
... ... @@ -274,7 +274,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
274 274 actions.push(
275 275 {
276 276 name: this.translate.instant('asset.unassign-assets-from-edge'),
277   - icon: 'portable_wifi_off',
  277 + icon: 'assignment_return',
278 278 isEnabled: true,
279 279 onAction: ($event, entities) => this.unassignAssetsFromEdge($event, entities)
280 280 }
... ...
... ... @@ -257,7 +257,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
257 257 },
258 258 {
259 259 name: this.translate.instant('edge.unassign-from-edge'),
260   - icon: 'portable_wifi_off',
  260 + icon: 'assignment_return',
261 261 isEnabled: (entity) => true,
262 262 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
263 263 }
... ... @@ -301,7 +301,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
301 301 actions.push(
302 302 {
303 303 name: this.translate.instant('dashboard.unassign-dashboards-from-edge'),
304   - icon: 'portable_wifi_off',
  304 + icon: 'assignment_return',
305 305 isEnabled: true,
306 306 onAction: ($event, entities) => this.unassignDashboardsFromEdge($event, entities)
307 307 }
... ...
... ... @@ -281,7 +281,7 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
281 281 actions.push(
282 282 {
283 283 name: this.translate.instant('edge.unassign-from-edge'),
284   - icon: 'portable_wifi_off',
  284 + icon: 'assignment_return',
285 285 isEnabled: (entity) => true,
286 286 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
287 287 }
... ... @@ -315,10 +315,10 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
315 315 if (deviceScope === 'edge') {
316 316 actions.push(
317 317 {
318   - name: this.translate.instant('asset.unassign-assets-from-edge'),
319   - icon: 'portable_wifi_off',
  318 + name: this.translate.instant('device.unassign-devices-from-edge'),
  319 + icon: 'assignment_return',
320 320 isEnabled: true,
321   - onAction: ($event, entities) => this.unassignDevicesFromCustomer($event, entities)
  321 + onAction: ($event, entities) => this.unassignDevicesFromEdge($event, entities)
322 322 }
323 323 );
324 324 }
... ...
... ... @@ -42,7 +42,7 @@ const routes: Routes = [
42 42 path: 'edges',
43 43 data: {
44 44 breadcrumb: {
45   - label: 'edge.edges',
  45 + label: 'edge.edge-instances',
46 46 icon: 'router'
47 47 }
48 48 },
... ... @@ -65,7 +65,7 @@ const routes: Routes = [
65 65 auth: [Authority.TENANT_ADMIN],
66 66 ruleChainsType: 'edge',
67 67 breadcrumb: {
68   - label: 'rulechain.edge-rulechains',
  68 + label: 'edge.rulechain-templates',
69 69 icon: 'settings_ethernet'
70 70 },
71 71 },
... ... @@ -131,7 +131,7 @@ const routes: Routes = [
131 131 path: '',
132 132 component: EntitiesTableComponent,
133 133 data: {
134   - auth: [Authority.TENANT_ADMIN],
  134 + auth: [Authority.TENANT_ADMIN, Authority.CUSTOMER_USER],
135 135 dashboardsType: 'edge'
136 136 },
137 137 resolve: {
... ... @@ -160,7 +160,7 @@ const routes: Routes = [
160 160 path: 'ruleChains',
161 161 data: {
162 162 breadcrumb: {
163   - label: 'rulechain.edge-rulechains',
  163 + label: 'edge.rulechain-templates',
164 164 icon: 'settings_ethernet'
165 165 }
166 166 },
... ... @@ -170,7 +170,7 @@ const routes: Routes = [
170 170 component: EntitiesTableComponent,
171 171 data: {
172 172 auth: [Authority.TENANT_ADMIN],
173   - title: 'rulechain.edge-rulechains',
  173 + title: 'edge.rulechain-templates',
174 174 ruleChainsType: 'edges'
175 175 },
176 176 resolve: {
... ...
... ... @@ -17,7 +17,7 @@
17 17 -->
18 18 <mat-tab *ngIf="entity"
19 19 label="{{ 'attribute.attributes' | translate }}" #attributesTab="matTab">
20   - <tb-attribute-table [defaultAttributeScope]="attributeScopes.CLIENT_SCOPE"
  20 + <tb-attribute-table [defaultAttributeScope]="attributeScopes.SERVER_SCOPE"
21 21 [active]="attributesTab.isActive"
22 22 [entityId]="entity.id"
23 23 [entityName]="entity.name">
... ...
... ... @@ -34,36 +34,6 @@
34 34 [fxShow]="!isEdit && (edgeScope === 'customer' || edgeScope === 'tenant') && isAssignedToCustomer(entity)">
35 35 {{ (entity?.customerIsPublic ? 'edge.make-private' : 'edge.unassign-from-customer') | translate }}
36 36 </button>
37   - <button mat-raised-button color="primary"
38   - [disabled]="(isLoading$ | async)"
39   - (click)="onEntityAction($event, 'openEdgeAssets')"
40   - [fxShow]="!isEdit && edgeScope === 'tenant'">
41   - {{'edge.manage-edge-assets' | translate }}
42   - </button>
43   - <button mat-raised-button color="primary"
44   - [disabled]="(isLoading$ | async)"
45   - (click)="onEntityAction($event, 'openEdgeDevices')"
46   - [fxShow]="!isEdit && edgeScope === 'tenant'">
47   - {{'edge.manage-edge-devices' | translate }}
48   - </button>
49   - <button mat-raised-button color="primary"
50   - [disabled]="(isLoading$ | async)"
51   - (click)="onEntityAction($event, 'openEdgeEntityViews')"
52   - [fxShow]="!isEdit && edgeScope === 'tenant'">
53   - {{'edge.manage-edge-entity-views' | translate }}
54   - </button>
55   - <button mat-raised-button color="primary"
56   - [disabled]="(isLoading$ | async)"
57   - (click)="onEntityAction($event, 'openEdgeDashboards')"
58   - [fxShow]="!isEdit && edgeScope === 'tenant'">
59   - {{'edge.manage-edge-dashboards' | translate }}
60   - </button>
61   - <button mat-raised-button color="primary"
62   - [disabled]="(isLoading$ | async)"
63   - (click)="onEntityAction($event, 'openEdgeRuleChains')"
64   - [fxShow]="!isEdit && edgeScope === 'tenant'">
65   - {{'edge.manage-edge-rulechains' | translate }}
66   - </button>
67 37 <button mat-raised-button color="primary" fxFlex.xs
68 38 [disabled]="(isLoading$ | async)"
69 39 (click)="onEntityAction($event, 'delete')"
... ... @@ -71,6 +41,38 @@
71 41 {{'edge.delete' | translate }}
72 42 </button>
73 43 <div fxLayout="row" fxLayout.xs="column">
  44 + <button mat-raised-button color="primary"
  45 + [disabled]="(isLoading$ | async)"
  46 + (click)="onEntityAction($event, 'openEdgeAssets')"
  47 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  48 + {{'edge.manage-edge-assets' | translate }}
  49 + </button>
  50 + <button mat-raised-button color="primary"
  51 + [disabled]="(isLoading$ | async)"
  52 + (click)="onEntityAction($event, 'openEdgeDevices')"
  53 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  54 + {{'edge.manage-edge-devices' | translate }}
  55 + </button>
  56 + <button mat-raised-button color="primary"
  57 + [disabled]="(isLoading$ | async)"
  58 + (click)="onEntityAction($event, 'openEdgeEntityViews')"
  59 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  60 + {{'edge.manage-edge-entity-views' | translate }}
  61 + </button>
  62 + <button mat-raised-button color="primary"
  63 + [disabled]="(isLoading$ | async)"
  64 + (click)="onEntityAction($event, 'openEdgeDashboards')"
  65 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  66 + {{'edge.manage-edge-dashboards' | translate }}
  67 + </button>
  68 + <button mat-raised-button color="primary"
  69 + [disabled]="(isLoading$ | async)"
  70 + (click)="onEntityAction($event, 'openEdgeRuleChains')"
  71 + [fxShow]="!isEdit && edgeScope === 'tenant'">
  72 + {{'edge.manage-edge-rulechains' | translate }}
  73 + </button>
  74 + </div>
  75 + <div fxLayout="row" fxLayout.xs="column">
74 76 <button mat-raised-button
75 77 ngxClipboard
76 78 (cbOnSuccess)="onEdgeIdCopied($event)"
... ... @@ -95,7 +97,6 @@
95 97 <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon>
96 98 <span translate>edge.copy-edge-secret</span>
97 99 </button>
98   -
99 100 </div>
100 101 </div>
101 102 <div class="mat-padding" fxLayout="column">
... ... @@ -123,18 +124,6 @@
123 124 [required]="true"
124 125 [entityType]="entityType.EDGE">
125 126 </tb-entity-subtype-autocomplete>
126   - <mat-form-field class="mat-block">
127   - <mat-label translate>edge.label</mat-label>
128   - <input matInput formControlName="label">
129   - </mat-form-field>
130   -
131   - <div formGroupName="additionalInfo" fxLayout="column">
132   - <mat-form-field class="mat-block">
133   - <mat-label translate>edge.description</mat-label>
134   - <textarea matInput formControlName="description" rows="2"></textarea>
135   - </mat-form-field>
136   - </div>
137   - </fieldset>
138 127 <div fxLayout="row">
139 128 <fieldset fxFlex>
140 129 <mat-form-field class="mat-block">
... ... @@ -163,7 +152,7 @@
163 152 <mat-label translate>edge.edge-key</mat-label>
164 153 <input matInput formControlName="routingKey">
165 154 </mat-form-field>
166   - </fieldset>
  155 + </fieldset>
167 156 </div>
168 157 <div fxLayout="row">
169 158 <fieldset fxFlex disabled>
... ... @@ -173,5 +162,16 @@
173 162 </mat-form-field>
174 163 </fieldset>
175 164 </div>
  165 + <mat-form-field class="mat-block">
  166 + <mat-label translate>edge.label</mat-label>
  167 + <input matInput formControlName="label">
  168 + </mat-form-field>
  169 + <div formGroupName="additionalInfo" fxLayout="column">
  170 + <mat-form-field class="mat-block">
  171 + <mat-label translate>edge.description</mat-label>
  172 + <textarea matInput formControlName="description" rows="2"></textarea>
  173 + </mat-form-field>
  174 + </div>
  175 + </fieldset>
176 176 </form>
177 177 </div>
... ...
... ... @@ -122,10 +122,10 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI
122 122 if (parentCustomer.additionalInfo && parentCustomer.additionalInfo.isPublic) {
123 123 this.config.tableTitle = this.translate.instant('customer.public-edges');
124 124 } else {
125   - this.config.tableTitle = parentCustomer.title + ': ' + this.translate.instant('edge.edges');
  125 + this.config.tableTitle = parentCustomer.title + ': ' + this.translate.instant('edge.edge-instances');
126 126 }
127 127 } else {
128   - this.config.tableTitle = this.translate.instant('edge.edges');
  128 + this.config.tableTitle = this.translate.instant('edge.edge-instances');
129 129 }
130 130 this.config.columns = this.configureColumns(this.config.componentsData.edgeScope);
131 131 this.configureEntityFunctions(this.config.componentsData.edgeScope);
... ... @@ -170,6 +170,11 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI
170 170 this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink);
171 171 this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id);
172 172 }
  173 + if (edgeScope === 'customer_user') {
  174 + this.config.entitiesFetchFunction = pageLink =>
  175 + this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink);
  176 + this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id);
  177 + }
173 178 }
174 179
175 180 configureCellActions(edgeScope: string): Array<CellActionDescriptor<EdgeInfo>> {
... ...
... ... @@ -239,7 +239,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
239 239 actions.push(
240 240 {
241 241 name: this.translate.instant('edge.unassign-from-edge'),
242   - icon: 'portable_wifi_off',
  242 + icon: 'assignment_return',
243 243 isEnabled: (entity) => true,
244 244 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
245 245 }
... ... @@ -274,7 +274,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
274 274 actions.push(
275 275 {
276 276 name: this.translate.instant('entity-view.unassign-entity-views-from-edge'),
277   - icon: 'portable_wifi_off',
  277 + icon: 'assignment_return',
278 278 isEnabled: true,
279 279 onAction: ($event, entities) => this.unassignEntityViewsFromEdge($event, entities)
280 280 }
... ...
... ... @@ -101,7 +101,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
101 101 this.config.entitySelectionEnabled = ruleChain => this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id;
102 102 this.edgeService.getEdge(this.config.componentsData.edgeId).subscribe(edge => {
103 103 this.config.componentsData.edge = edge;
104   - this.config.tableTitle = edge.name + ': ' + this.translate.instant('rulechain.edge-rulechains');
  104 + this.config.tableTitle = edge.name + ': ' + this.translate.instant('edge.rulechain-templates');
105 105 });
106 106 this.config.entitiesDeleteEnabled = false;
107 107 }
... ... @@ -128,7 +128,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
128 128 columns.push(
129 129 new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'),
130 130 new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'),
131   - new EntityTableColumn<RuleChain>('root', 'rulechain.default-root', '60px',
  131 + new EntityTableColumn<RuleChain>('root', 'rulechain.root', '60px',
132 132 entity => {
133 133 return checkBoxCell(entity.root);
134 134 })
... ... @@ -173,7 +173,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
173 173 this.config.tableTitle = this.translate.instant('rulechain.rulechains');
174 174 this.config.entitiesFetchFunction = pageLink => this.fetchRuleChains(pageLink);
175 175 } else if (ruleChainScope === 'edges') {
176   - this.config.tableTitle = this.translate.instant('rulechain.edge-rulechains');
  176 + this.config.tableTitle = this.translate.instant('edge.rulechain-templates');
177 177 this.config.entitiesFetchFunction = pageLink => this.fetchEdgeRuleChains(pageLink);
178 178 } else if (ruleChainScope === 'edge') {
179 179 this.config.entitiesFetchFunction = pageLink => this.ruleChainService.getEdgeRuleChains(this.config.componentsData.edgeId, pageLink);
... ... @@ -186,7 +186,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
186 186 actions.push(
187 187 {
188 188 name: this.translate.instant('rulechain.unassign-rulechains'),
189   - icon: 'portable_wifi_off',
  189 + icon: 'assignment_return',
190 190 isEnabled: true,
191 191 onAction: ($event, entities) => this.unassignRuleChainsFromEdge($event, entities)
192 192 }
... ... @@ -232,7 +232,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
232 232 onAction: ($event, entity) => this.setDefaultRootEdgeRuleChain($event, entity)
233 233 },
234 234 {
235   - name: this.translate.instant('rulechain.set-default-edge'),
  235 + name: this.translate.instant('rulechain.set-auto-assign-to-edge'),
236 236 icon: 'bookmark_outline',
237 237 isEnabled: (entity) => this.isNonDefaultEdgeRuleChain(entity),
238 238 onAction: ($event, entity) => this.setDefaultEdgeRuleChain($event, entity)
... ... @@ -255,7 +255,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
255 255 },
256 256 {
257 257 name: this.translate.instant('edge.unassign-from-edge'),
258   - icon: 'portable_wifi_off',
  258 + icon: 'assignment_return',
259 259 isEnabled: (entity) => entity.id.id != this.config.componentsData.edge.rootRuleChainId.id,
260 260 onAction: ($event, entity) => this.unassignFromEdge($event, entity)
261 261 }
... ... @@ -449,8 +449,8 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
449 449 $event.stopPropagation();
450 450 }
451 451 this.dialogService.confirm(
452   - this.translate.instant('rulechain.set-default-edge-title', {ruleChainName: ruleChain.name}),
453   - this.translate.instant('rulechain.set-default-edge-text'),
  452 + this.translate.instant('rulechain.set-auto-assign-to-edge-title', {ruleChainName: ruleChain.name}),
  453 + this.translate.instant('rulechain.set-auto-assign-to-edge-text'),
454 454 this.translate.instant('action.no'),
455 455 this.translate.instant('action.yes'),
456 456 true
... ...
... ... @@ -419,7 +419,6 @@
419 419 "manage-assets": "Objekte verwalten",
420 420 "manage-devices": "Geräte verwalten",
421 421 "manage-dashboards": "Dashboards verwalten",
422   - "manage-edges": "Öffentliche Rand",
423 422 "title": "Titel",
424 423 "title-required": "Titel ist erforderlich.",
425 424 "description": "Beschreibung",
... ... @@ -582,7 +581,6 @@
582 581 "select-state": "Soll-Zustand auswählen",
583 582 "state-controller": "Zustandssteuerung",
584 583 "unassign-dashboard-from-edge-text": "Nach der Bestätigung wird die Zuordnung des Dashboards aufgehoben und es ist für der Rand nicht mehr zugänglich.",
585   - "unassign-dashboards-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Dashboard} other {# Dashboards} } vom Rand aufheben",
586 584 "unassign-dashboards-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Dashboards aufgehoben und sie sind für den Rand nicht mehr zugänglich.",
587 585 "assign-dashboard-to-edge": "Dashboard(s) dem Rand zuordnen",
588 586 "assign-dashboard-to-edge-text": "Bitte wählen Sie die Dashboards aus, die Sie dem Rand zuordnen möchten"
... ... @@ -717,12 +715,9 @@
717 715 "public": "Öffentlich",
718 716 "device-public": "Gerät ist öffentlich",
719 717 "select-device": "Gerät auswählen",
720   - "assign-device-to-edge": "Dashboard(s) dem Gerät zuordnen",
721 718 "assign-device-to-edge-text":"Bitte wählen Sie die Geräte aus, die Sie dem Rand zuordnen möchten",
722 719 "unassign-device-from-edge-title": "Sind Sie sicher, dass Sie die Zuordnung zum Gerät '{{deviceName}}' wirklich aufheben möchten?",
723 720 "unassign-device-from-edge-text": "Nach der Bestätigung ist das Gerät nicht zugeordnet und für den Kunden nicht zugänglich.",
724   - "unassign-devices-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Gerät} other {# Geräte} } vom Rand aufheben",
725   - "unassign-device-from-edge": "Nicht zugeordnete Geräte",
726 721 "unassign-devices-from-edge-title": "Sind Sie sicher, dass Sie { count, plural, 1 {1 Gerät} other {# Geräte} } nicht mehr zuordnen möchten?",
727 722 "unassign-devices-from-edge-text": "Nach der Bestätigung werden alle ausgewählten Geräte nicht zugewiesen und sind für den Rand nicht zugänglich."
728 723 },
... ... @@ -731,9 +726,10 @@
731 726 },
732 727 "edge": {
733 728 "edge": "Rand",
734   - "edges": "Rand",
  729 + "edge-instances": "Kanteninstanzen",
735 730 "management": "Rand verwalten",
736 731 "no-edges-matching": "Keine passenden Rand '{{entity}}' gefunden.",
  732 + "rulechain-templates": "Regelkettenvorlagen",
737 733 "add": "Rand hinzufügen",
738 734 "view": "Rand anzeigen",
739 735 "no-edges-text": "Kein Rand gefunden.",
... ... @@ -744,7 +740,6 @@
744 740 "delete-edge-title": "Möchten Sie des Rands wirklich löschen '{{edgeName}}'?",
745 741 "delete-edge-text": "Seien Sie vorsichtig, nach der Bestätigung werden der Rand und alle zugehörigen Daten nicht wiederhergestellt.",
746 742 "delete-edges-title": "Sind Sie sicher, dass Sie die Rand löschen möchten { count, plural, 1 {1 Rand} other {# Rand} }?",
747   - "delete-edges-action-title": "Löschen { count, plural, 1 {1 Rand} other {# Rand} }",
748 743 "delete-edges-text": "Vorsicht, nach Bestätigung werden alle ausgewählten Rand entfernt und alle zugehörigen Daten werden nicht wiederhergestellt.",
749 744 "name": "Name",
750 745 "name-required": "Name ist erforderlich.",
... ... @@ -1356,8 +1351,6 @@
1356 1351 "rulechain": {
1357 1352 "rulechain": "Regelkette",
1358 1353 "rulechains": "Regelketten",
1359   - "core-rulechains": "Kernregelketten",
1360   - "edge-rulechains": "Randregelketten",
1361 1354 "root": "Wurzel",
1362 1355 "delete": "Regelkette löschen",
1363 1356 "name": "Name",
... ... @@ -1394,11 +1387,9 @@
1394 1387 "assign-rulechains": "Regelketten zuweisen",
1395 1388 "assign-new-rulechain": "Neues Regelkette zuweisen",
1396 1389 "delete-rulechains": "Regelketten löschen",
1397   - "default": "Standard",
1398 1390 "unassign-rulechain": "Nicht zugeordnete Regelkette",
1399 1391 "unassign-rulechains": "Nicht zugeordnete Regelketten",
1400 1392 "unassign-rulechain-title": "Möchten Sie die Zuordnung die Regelkette '{{ruleChainTitle}}' wirklich aufheben?",
1401   - "unassign-rulechains-title": "Sind Sie sicher, dass Sie die Zuordnung aufheben möchten { count, plural, 1 {1 Regelkette} other {# Regelketten} }?",
1402 1393 "unassign-rulechain-from-edge-text": "Nach der Bestätigung wird die Zuordnung aller ausgewählten Regelkette aufgehoben und sie sind für den Rand nicht mehr zugänglich.",
1403 1394 "unassign-rulechains-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Regelkette} other {# Regelketten} } vom Rand aufheben",
1404 1395 "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.",
... ... @@ -1408,9 +1399,9 @@
1408 1399 "set-default-root-edge-rulechain-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' zur Wurzel machen Standard?",
1409 1400 "set-default-root-edge-rulechain-text": "Nach der Bestätigung wird die Randregelkette zur Wurzel Standard und behandelt alle eingehenden Transportnachrichten.",
1410 1401 "invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.",
1411   - "set-default-edge": "Machen Sie Regelkette Standard",
1412   - "set-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' machen Standard?",
1413   - "set-default-edge-text": "Nach der Bestätigung wird die Randregelkette für neu erstellte Rand vergeben.",
  1402 + "set-auto-assign-to-edge": "Ordnen Sie die Regelkette bei der Erstellung automatisch den Kanten zu",
  1403 + "set-auto-assign-to-edge-title": "Möchten Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung automatisch den Kanten zuweisen?",
  1404 + "set-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung automatisch den Kanten zugewiesen.",
1414 1405 "remove-default-edge": "Randregelkette Standard entfernen",
1415 1406 "remove-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' aus der Standardliste entfernen?",
1416 1407 "remove-default-edge-text": "Nach der Bestätigung wird die Randregelkette nicht für neu erstellte Rand vergeben."
... ...
... ... @@ -412,7 +412,6 @@
412 412 "unassign-asset-from-edge": "Unassign asset",
413 413 "unassign-asset-from-edge-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
414 414 "unassign-asset-from-edge-text": "After the confirmation the asset will be unassigned and won't be accessible by the edge.",
415   - "unassign-assets-from-edge-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from edge",
416 415 "unassign-assets-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
417 416 "unassign-assets-from-edge-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the edge."
418 417 },
... ... @@ -611,7 +610,6 @@
611 610 "delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.",
612 611 "manage-users": "Manage users",
613 612 "manage-assets": "Manage assets",
614   - "manage-edges": "Manage edges",
615 613 "manage-devices": "Manage devices",
616 614 "manage-dashboards": "Manage dashboards",
617 615 "title": "Title",
... ... @@ -783,7 +781,6 @@
783 781 "select-state": "Select target state",
784 782 "state-controller": "State controller",
785 783 "unassign-dashboard-from-edge-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the edge.",
786   - "unassign-dashboards-from-edge-action-title": "Unassign { count, plural, 1 {1 dashboard} other {# dashboards} } from edge",
787 784 "unassign-dashboards-from-edge-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the edge.",
788 785 "assign-dashboard-to-edge": "Assign Dashboard(s) To Edge",
789 786 "assign-dashboard-to-edge-text": "Please select the dashboards to assign to the edge"
... ... @@ -877,6 +874,7 @@
877 874 "unassign-devices-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from customer",
878 875 "unassign-device-from-edge-title": "Are you sure you want to unassign the device '{{deviceName}}'?",
879 876 "unassign-device-from-edge-text": "After the confirmation the device will be unassigned and won't be accessible by the edge.",
  877 + "unassign-devices-from-edge": "Unassign devices from edge",
880 878 "assign-new-device": "Assign new device",
881 879 "make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?",
882 880 "make-public-device-text": "After the confirmation the device and all its data will be made public and accessible by others.",
... ... @@ -950,12 +948,8 @@
950 948 "customer-to-assign-device": "Customer to assign the device",
951 949 "add-credential": "Add credential"
952 950 },
953   - "assign-device-to-edge": "Assign Device(s) To Edge",
954   - "unassign-devices-from-edge-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from edge",
955   - "unassign-device-from-edge": "Unassign device",
956 951 "unassign-devices-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 device} other {# devices} }?",
957 952 "unassign-devices-from-edge-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the edge."
958   -
959 953 },
960 954 "device-profile": {
961 955 "device-profile": "Device profile",
... ... @@ -1116,10 +1110,11 @@
1116 1110 },
1117 1111 "edge": {
1118 1112 "edge": "Edge",
1119   - "edges": "Edges",
  1113 + "edge-instances": "Edge instances",
1120 1114 "edge-file": "Edge file",
1121 1115 "management": "Edge management",
1122 1116 "no-edges-matching": "No edges matching '{{entity}}' were found.",
  1117 + "rulechain-templates": "Rule chain templates",
1123 1118 "add": "Add Edge",
1124 1119 "view": "View Edge",
1125 1120 "no-edges-text": "No edges found",
... ... @@ -1130,7 +1125,6 @@
1130 1125 "delete-edge-title": "Are you sure you want to delete the edge '{{edgeName}}'?",
1131 1126 "delete-edge-text": "Be careful, after the confirmation the edge and all related data will become unrecoverable.",
1132 1127 "delete-edges-title": "Are you sure you want to edge { count, plural, 1 {1 edge} other {# edges} }?",
1133   - "delete-edges-action-title": "Delete { count, plural, 1 {1 edge} other {# edges} }",
1134 1128 "delete-edges-text": "Be careful, after the confirmation all selected edges will be removed and all related data will become unrecoverable.",
1135 1129 "name": "Name",
1136 1130 "name-starts-with": "Edge name starts with",
... ... @@ -1176,21 +1170,19 @@
1176 1170 "label": "Label",
1177 1171 "load-entity-error": "Failed to load data. Entity not found or has been deleted.",
1178 1172 "assign-new-edge": "Assign new edge",
1179   - "manage-edge-dashboards": "Manage edge dashboards",
  1173 + "manage-edge-dashboards": "Edge dashboards",
1180 1174 "unassign-from-edge": "Unassign from edge",
1181 1175 "dashboards": "Edge Dashboards",
1182   - "manage-edge-rulechains": "Manage edge rule chains",
1183   - "rulechains": "Edge Rule Chains",
1184   - "rulechain": "Edge Rule Chain",
  1176 + "manage-edge-rulechains": "Edge rule chains",
1185 1177 "edge-key": "Edge key",
1186 1178 "copy-edge-key": "Copy edge key",
1187 1179 "edge-key-copied-message": "Edge key has been copied to clipboard",
1188 1180 "edge-secret": "Edge secret",
1189 1181 "copy-edge-secret": "Copy edge secret",
1190 1182 "edge-secret-copied-message": "Edge secret has been copied to clipboard",
1191   - "manage-edge-assets": "Manage edge assets",
1192   - "manage-edge-devices": "Manage edge devices",
1193   - "manage-edge-entity-views": "Manage edge entity views",
  1183 + "manage-edge-assets": "Edge assets",
  1184 + "manage-edge-devices": "Edge devices",
  1185 + "manage-edge-entity-views": "Edge entity views",
1194 1186 "assets": "Edge assets",
1195 1187 "devices": "Edge devices",
1196 1188 "entity-views": "Edge entity views",
... ... @@ -1207,7 +1199,6 @@
1207 1199 "edge-type-list-empty": "No edge types selected.",
1208 1200 "edge-types": "Edge types",
1209 1201 "dashboard": "Edge dashboard",
1210   - "unassign-edges-action-title": "Unassign { count, plural, 1 {1 edge} other {# edges} } from customer",
1211 1202 "enter-edge-type": "Enter edge type",
1212 1203 "deployed": "Deployed",
1213 1204 "pending": "Pending"
... ... @@ -2006,7 +1997,6 @@
2006 1997 "rulechain": {
2007 1998 "rulechain": "Rule chain",
2008 1999 "rulechains": "Rule chains",
2009   - "default-root": "Default root",
2010 2000 "root": "Root",
2011 2001 "delete": "Delete rule chain",
2012 2002 "name": "Name",
... ... @@ -2044,9 +2034,7 @@
2044 2034 "selected-rulechains": "{ count, plural, 1 {1 rule chain} other {# rule chains} } selected",
2045 2035 "open-rulechain": "Open rule chain",
2046 2036 "assign-new-rulechain": "Assign new rulechain",
2047   - "edge-rulechains": "Edge Rule chains",
2048 2037 "edge-rulechain": "Edge Rule chain",
2049   - "core-rulechains": "Core Rule chains",
2050 2038 "unassign-rulechain-from-edge-text": "After the confirmation the rulechain will be unassigned and won't be accessible by the edge.",
2051 2039 "unassign-rulechains-from-edge-title": "Unassign { count, plural, 1 {1 rulechain} other {# rulechains} } from edge",
2052 2040 "unassign-rulechains-from-edge-text": "After the confirmation all selected rulechains will be unassigned and won't be accessible by the edge.",
... ... @@ -2056,17 +2044,14 @@
2056 2044 "set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?",
2057 2045 "set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.",
2058 2046 "invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.",
2059   - "set-default-edge": "Make rule chain default",
2060   - "set-default-edge-title": "Are you sure you want to make the edge rule chain '{{ruleChainName}}' default?",
2061   - "set-default-edge-text": "After the confirmation the edge rule chain will be added to default list and assigned to newly created edge(s).",
  2047 + "set-auto-assign-to-edge": "Auto-assign rule chain to edge(s) on creation",
  2048 + "set-auto-assign-to-edge-title": "Are you sure you want to auto-assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?",
  2049 + "set-auto-assign-to-edge-text": "After the confirmation the edge rule chain will be automatically assigned to edge(s) on creation.",
2062 2050 "remove-default-edge": "Remove rule chain from defaults",
2063 2051 "remove-default-edge-title": "Are you sure you want to remove the edge rule chain '{{ruleChainName}}' from default list?",
2064 2052 "remove-default-edge-text": "After the confirmation the edge rule chain will not be assigned for a newly created edges.",
2065 2053 "unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainName}}'?",
2066   - "unassign-rulechains-title": "Are you sure you want to unassign { count, plural, 1 {1 rulechain} other {# rulechains} }?",
2067   - "unassign-rulechains": "Unassign rulechains",
2068   - "default": "Default",
2069   - "default-root": "Default root"
  2054 + "unassign-rulechains": "Unassign rulechains"
2070 2055 },
2071 2056 "rulenode": {
2072 2057 "details": "Details",
... ...
... ... @@ -432,7 +432,6 @@
432 432 "manage-assets": "Gestionar activos",
433 433 "manage-devices": "Gestionar dispositivos",
434 434 "manage-dashboards": "Gestionar paneles",
435   - "manage-edges": "Administrar bordes",
436 435 "title": "Título",
437 436 "title-required": "Título requerido.",
438 437 "description": "Descripción",
... ... @@ -595,7 +594,6 @@
595 594 "select-state": "Seleccionar estado destino (target state)",
596 595 "state-controller": "Controlador de estados",
597 596 "unassign-dashboard-from-edge-text": "Después de la confirmación, el tablero no será asignado y el borde no podrá acceder a él",
598   - "unassign-dashboards-from-edge-action-title": "Anular asignación { count, plural, 1 {1 panel} other {# paneles} } de borde",
599 597 "unassign-dashboards-from-edge-text": "Después de la confirmación, se anulará la asignación de todos los paneles seleccionados y no serán accesibles por de borde",
600 598 "assign-dashboard-to-edge": "Asignar panel(es) al borde",
601 599 "assign-dashboard-to-edge-text": "Por favor selecciona los paneles para asignar al borde"
... ... @@ -735,12 +733,9 @@
735 733 "select-device": "Seleccionar dispositivo",
736 734 "device-file": "Archivo de dispositivo",
737 735 "import": "Importar dispositivo",
738   - "assign-device-to-edge": "Asignar dispositivo (s) a borde",
739 736 "assign-device-to-edge-text": "Seleccione los dispositivos para asignar al borde",
740 737 "unassign-device-from-edge-title": "¿Está seguro de que desea desasignar el dispositivo '{{deviceName}}'?",
741 738 "unassign-device-from-edge-text": "Después de la confirmación, el dispositivo no será asignado y el borde no podrá acceder a él",
742   - "unassign-devices-from-edge-action-title": "Anular asignación {count, plural, 1 {1 dispositivo} other {# dispositivos}} desde el borde",
743   - "unassign-device-from-edge": "Desasignar dispositivo",
744 739 "unassign-devices-from-edge-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 dispositivo} other {# dispositivos}}?",
745 740 "unassign-devices-from-edge-text": "Después de la confirmación, todos los dispositivos seleccionados quedarán sin asignar y el borde no podrá acceder a ellos."
746 741 },
... ... @@ -753,9 +748,10 @@
753 748 },
754 749 "edge": {
755 750 "edge": "Borde",
756   - "edges": "Bordes",
  751 + "edge-instances": "Instancias de Borde",
757 752 "management": "Gestión de bordes",
758 753 "no-edges-matching": "No se encontraron bordes que coincidan con '{{entity}}'",
  754 + "rulechain-templates": "Plantillas, de cadena de reglas",
759 755 "add": "Agregar borde",
760 756 "view": "Ver borde",
761 757 "no-edges-text": "No se encontraron bordes",
... ... @@ -766,7 +762,6 @@
766 762 "delete-edge-title": "¿Está seguro de que desea eliminar el borde '{{edgeName}}'?",
767 763 "delete-edge-text": "Tenga cuidado, después de la confirmación, el borde y todos los datos relacionados serán irrecuperables",
768 764 "delete-edges-title": "¿Está seguro de que desea edge {count, plural, 1 {1 borde} other {# bordes}}?",
769   - "delete-edges-action-title": "Eliminar {cuenta, plural, 1 {1 borde} other {# bordes}}",
770 765 "delete-edges-text": "Tenga cuidado, después de la confirmación se eliminarán todos los bordes seleccionados y todos los datos relacionados se volverán irrecuperables",
771 766 "name": "Nombre",
772 767 "name-required": "Se requiere nombre",
... ... @@ -1527,8 +1522,6 @@
1527 1522 "rulechain": {
1528 1523 "rulechain": "Cadena de Regla",
1529 1524 "rulechains": "Cadenas de Reglas",
1530   - "core-rulechains": "Cadenas de reglas centrales",
1531   - "edge-rulechains": "Cadenas de reglas de borde",
1532 1525 "root": "Raíz",
1533 1526 "delete": "Borrar cadena de reglas",
1534 1527 "name": "Nombre",
... ... @@ -1565,11 +1558,9 @@
1565 1558 "assign-rulechains": "Asignar cadenas de reglas",
1566 1559 "assign-new-rulechain": "Asignar nueva cadena de reglas",
1567 1560 "delete-rulechains": "Eliminar cadenas de reglas",
1568   - "default": "Predeterminado",
1569 1561 "unassign-rulechain": "Anular asignación de cadena de reglas",
1570 1562 "unassign-rulechains": "Anular asignación de cadenas de reglas",
1571 1563 "unassign-rulechain-title": "¿Está seguro de que desea desasignar la cadena de reglas '{{ruleChainTitle}}'?",
1572   - "unassign-rulechains-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}}?",
1573 1564 "unassign-rulechain-from-edge-text": "Después de la confirmación, la cadena de reglas quedará sin asignar y el borde no podrá acceder a ella",
1574 1565 "unassign-rulechains-from-edge-action-title": "Anular asignación {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}} des bordes",
1575 1566 "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",
... ... @@ -1579,9 +1570,9 @@
1579 1570 "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?",
1580 1571 "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",
1581 1572 "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}}",
1582   - "set-default-edge": "Hacer que la cadena de reglas de borde sea predeterminada",
1583   - "set-default-edge-title": "¿Está seguro de que desea que la cadena de reglas de borde '{{ruleChainName}}' sea predeterminada?",
1584   - "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",
  1573 + "set-auto-assign-to-edge": "Asignar automáticamente la cadena de reglas a los bordes en la creación",
  1574 + "set-auto-assign-to-edge-title": "¿Está seguro de que desea asignar automáticamente la cadena de reglas de borde '{{ruleChainName}}' a los bordes en la creación?",
  1575 + "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.",
1585 1576 "remove-default-edge": "Eliminar la cadena de regla de borde de los valores predeterminados",
1586 1577 "remove-default-edge-title": "¿Está seguro de que desea eliminar la cadena de reglas de borde '{{ruleChainName}}' de la lista predeterminada?",
1587 1578 "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"
... ...
... ... @@ -433,7 +433,6 @@
433 433 "manage-customer-users": "Gérer les utilisateurs du client",
434 434 "manage-dashboards": "Gérer les tableaux de bord",
435 435 "manage-devices": "Gérer les dispositifs",
436   - "manage-edges": "Gérer les bordures",
437 436 "manage-public-assets": "Gérer les actifs publics",
438 437 "manage-public-dashboards": "Gérer les tableaux de bord publics",
439 438 "manage-public-devices": "Gérer les dispositifs publics",
... ... @@ -593,7 +592,6 @@
593 592 "widget-import-missing-aliases-title": "Configurer les alias utilisés par le widget importé",
594 593 "widgets-margins": "Marge entre les widgets",
595 594 "unassign-dashboard-from-edge-text": "Après la confirmation, tableau de bord sera non attribué et ne sera pas accessible a la bordure.",
596   - "unassign-dashboards-from-edge-action-title": "Annuler l'affectation {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}} de la bordure",
597 595 "unassign-dashboards-from-edge-text": "Après la confirmation, tous les tableaux de bord sélectionnés ne seront pas attribués et ne seront pas accessibles a la bordure.",
598 596 "assign-dashboard-to-edge": "Attribuer des tableaux de bord a la bordure",
599 597 "assign-dashboard-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les tableaux de bord"
... ... @@ -735,12 +733,9 @@
735 733 "use-device-name-filter": "Utiliser le filtre",
736 734 "view-credentials": "Afficher les informations d'identification",
737 735 "view-devices": "Afficher les dispositifs",
738   - "assign-device-to-edge": "Attribuer a la bordure",
739 736 "assign-device-to-edge-text":"Veuillez sélectionner la bordure pour attribuer le ou les dispositifs",
740 737 "unassign-device-from-edge-title": "Êtes-vous sûr de vouloir annuler l'affection du dispositif {{deviceName}} '?",
741 738 "unassign-device-from-edge-text": "Après la confirmation, dispositif sera non attribué et ne sera pas accessible a la bordure.",
742   - "unassign-devices-from-edge-action-title": "Annuler l'affectation de {count, plural, 1 {1 device} other {#devices}} de la bordure",
743   - "unassign-device-from-edge": "Retirer de la bordure",
744 739 "unassign-devices-from-edge-title": "Voulez-vous vraiment annuler l'affectation de {count, plural, 1 {1 device} other {# devices}}?",
745 740 "unassign-devices-from-edge-text": "Après la confirmation, tous les dispositifs sélectionnés ne seront pas attribues et ne seront pas accessibles par la bordure."
746 741 },
... ... @@ -749,9 +744,10 @@
749 744 },
750 745 "edge": {
751 746 "edge": "Bordure",
752   - "edges": "Bordures",
  747 + "edge-instances": "Instances de Bord",
753 748 "management": "Gestion des bordures",
754 749 "no-edges-matching": "Aucun bordure correspondant à {{entity}} n'a été trouvé.",
  750 + "rulechain-templates": "Modèles de chaîne de règles",
755 751 "add": "Ajouter un bordure",
756 752 "view": "Afficher la bordure",
757 753 "no-edges-text": "Aucun bordure trouvé",
... ... @@ -762,7 +758,6 @@
762 758 "delete-edge-title": "Êtes-vous sûr de vouloir supprimer la bordure '{{edgeName}}'?",
763 759 "delete-edge-text": "Faites attention, après la confirmation, la bordure et toutes les données associées deviendront irrécupérables",
764 760 "delete-edges-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 bordure} other {# bordure}}?",
765   - "delete-edges-action-title": "Supprimer {count, plural, 1 {1 bordure} other {# bordure}}",
766 761 "delete-edges-text": "Faites attention, après la confirmation, tous les bordures sélectionnés seront supprimés et toutes les données associées deviendront irrécupérables.",
767 762 "name": "Nom",
768 763 "name-required": "Le nom de la bordure est requis",
... ... @@ -1430,8 +1425,6 @@
1430 1425 "rulechain-required": "Chaîne de règles requise",
1431 1426 "rulechains": "Chaînes de règles",
1432 1427 "select-rulechain": "Sélectionner la chaîne de règles",
1433   - "core-rulechains": "Chaînes de règles fondamentales",
1434   - "edge-rulechains": "Chaînes de règles de la bordure",
1435 1428 "set-root": "Rend la chaîne de règles racine (root) ",
1436 1429 "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.",
1437 1430 "set-root-rulechain-title": "Voulez-vous vraiment que la chaîne de règles '{{ruleChainName}} soit racine (root) ?",
... ... @@ -1439,11 +1432,9 @@
1439 1432 "assign-rulechains": "Attribuer aux chaînes de règles",
1440 1433 "assign-new-rulechain": "Attribuer une nouvele chaînes de règles",
1441 1434 "delete-rulechains": "Supprimer une chaînes de règles",
1442   - "default": "Défaut",
1443 1435 "unassign-rulechain": "Retirer chaîne de règles",
1444 1436 "unassign-rulechains": "Retirer chaînes de règles",
1445 1437 "unassign-rulechain-title": "AÊtes-vous sûr de vouloir retirer l'attribution de chaînes de règles '{{ruleChainTitle}}'?",
1446   - "unassign-rulechains-title": "Êtes-vous sûr de vouloir retirer l'attribution de {count, plural, 1 {1 chaîne de règles} other {# chaînes de règles}}?",
1447 1438 "unassign-rulechain-from-edge-text": "Après la confirmation, l'actif sera non attribué et ne sera pas accessible a la bordure.",
1448 1439 "unassign-rulechains-from-edge-action-title": "Retirer {count, plural, 1 {1 chaîne de règles} other {# chaînes de règles}} de la bordure",
1449 1440 "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.",
... ... @@ -1453,9 +1444,9 @@
1453 1444 "set-default-root-edge-rulechain-title": "AVoulez-vous vraiment créer de chaînes de règles par défaut '{{ruleChainName}}'?",
1454 1445 "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.",
1455 1446 "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}}.",
1456   - "set-default-edge": "Définir la chaîne de règles de la bordure par défaut",
1457   - "set-default-edge-title": "Voulez-vous vraiment définir la chaîne de règles de la bordure '{{ruleChainName}}' par défaut?",
1458   - "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.",
  1447 + "set-auto-assign-to-edge": "Assigner automatiquement la chaîne de règles aux arêtes lors de la création",
  1448 + "set-auto-assign-to-edge-title": "Voulez-vous vraiment attribuer automatiquement la chaîne de règles d'arête '{{ruleChainName}}' à l'arête (s) lors de la création?",
  1449 + "set-auto-assign-to-edge-text": "Après la confirmation, la chaîne de règles d'arête sera automatiquement affectée à l'arête (s) lors de la création.",
1459 1450 "remove-default-edge": "Supprimer la chaîne de règles de la bordure des valeurs par défaut",
1460 1451 "remove-default-edge-title": "Voulez-vous vraiment supprimer la chaîne de règles de la bordure '{{ruleChainName}}' de la liste par défaut",
1461 1452 "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."
... ...