Commit e761f53dd09bb29c48c7d2aaea9db96a73fbf98b
1 parent
f17acd5a
Hide entity type edge if disabled. Renaming edge rule chain to rule chain templa…
…tes. Minor fixes after demo
Showing
18 changed files
with
181 additions
and
174 deletions
... | ... | @@ -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." | ... | ... |