Browse Source

Hide entity type edge if disabled. Renaming edge rule chain to rule chain templates. Minor fixes after demo

pull/3811/head
Volodymyr Babak 6 years ago
parent
commit
e761f53dd0
  1. 24
      ui-ngx/src/app/core/http/component-descriptor.service.ts
  2. 16
      ui-ngx/src/app/core/http/entity.service.ts
  3. 21
      ui-ngx/src/app/core/http/rule-chain.service.ts
  4. 51
      ui-ngx/src/app/core/services/menu.service.ts
  5. 2
      ui-ngx/src/app/modules/home/components/attribute/attribute-table.component.ts
  6. 4
      ui-ngx/src/app/modules/home/pages/asset/assets-table-config.resolver.ts
  7. 4
      ui-ngx/src/app/modules/home/pages/dashboard/dashboards-table-config.resolver.ts
  8. 8
      ui-ngx/src/app/modules/home/pages/device/devices-table-config.resolver.ts
  9. 10
      ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts
  10. 2
      ui-ngx/src/app/modules/home/pages/edge/edge-tabs.component.html
  11. 88
      ui-ngx/src/app/modules/home/pages/edge/edge.component.html
  12. 9
      ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts
  13. 4
      ui-ngx/src/app/modules/home/pages/entity-view/entity-views-table-config.resolver.ts
  14. 16
      ui-ngx/src/app/modules/home/pages/rulechain/rulechains-table-config.resolver.ts
  15. 19
      ui-ngx/src/assets/locale/locale.constant-de_DE.json
  16. 39
      ui-ngx/src/assets/locale/locale.constant-en_US.json
  17. 19
      ui-ngx/src/assets/locale/locale.constant-es_ES.json
  18. 19
      ui-ngx/src/assets/locale/locale.constant-fr_FR.json

24
ui-ngx/src/app/core/http/component-descriptor.service.ts

@ -28,8 +28,8 @@ import { RuleChainType } from "@shared/models/rule-chain.models";
})
export class ComponentDescriptorService {
private componentsByType: Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>> =
new Map<ComponentType, Array<ComponentDescriptor>>();
private componentsByTypeByRuleChainType: Map<RuleChainType, Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>> =
new Map<RuleChainType, Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>>();
private componentsByClazz: Map<string, ComponentDescriptor> = new Map<string, ComponentDescriptor>();
constructor(
@ -37,14 +37,17 @@ export class ComponentDescriptorService {
) {
}
public getComponentDescriptorsByType(componentType: ComponentType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
const existing = this.componentsByType.get(componentType);
public getComponentDescriptorsByType(componentType: ComponentType, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
if (!this.componentsByTypeByRuleChainType.get(ruleChainType)) {
this.componentsByTypeByRuleChainType.set(ruleChainType, new Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>());
}
const existing = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentType);
if (existing) {
return of(existing);
} else {
return this.http.get<Array<ComponentDescriptor>>(`/api/components/${componentType}`, defaultHttpOptionsFromConfig(config)).pipe(
return this.http.get<Array<ComponentDescriptor>>(`/api/components/${componentType}&ruleChainType=${ruleChainType}`, defaultHttpOptionsFromConfig(config)).pipe(
map((componentDescriptors) => {
this.componentsByType.set(componentType, componentDescriptors);
this.componentsByTypeByRuleChainType.get(ruleChainType).set(componentType, componentDescriptors);
componentDescriptors.forEach((componentDescriptor) => {
this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor);
});
@ -55,10 +58,13 @@ export class ComponentDescriptorService {
}
public getComponentDescriptorsByTypes(componentTypes: Array<ComponentType>, ruleChainType: RuleChainType, config?: RequestConfig): Observable<Array<ComponentDescriptor>> {
if (!this.componentsByTypeByRuleChainType.get(ruleChainType)) {
this.componentsByTypeByRuleChainType.set(ruleChainType, new Map<ComponentType | RuleNodeType, Array<ComponentDescriptor>>());
}
let result: ComponentDescriptor[] = [];
for (let i = componentTypes.length - 1; i >= 0; i--) {
const componentType = componentTypes[i];
const componentDescriptors = this.componentsByType.get(componentType);
const componentDescriptors = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentType);
if (componentDescriptors) {
result = result.concat(componentDescriptors);
componentTypes.splice(i, 1);
@ -71,10 +77,10 @@ export class ComponentDescriptorService {
defaultHttpOptionsFromConfig(config)).pipe(
map((componentDescriptors) => {
componentDescriptors.forEach((componentDescriptor) => {
let componentsList = this.componentsByType.get(componentDescriptor.type);
let componentsList = this.componentsByTypeByRuleChainType.get(ruleChainType).get(componentDescriptor.type);
if (!componentsList) {
componentsList = new Array<ComponentDescriptor>();
this.componentsByType.set(componentDescriptor.type, componentsList);
this.componentsByTypeByRuleChainType.get(ruleChainType).set(componentDescriptor.type, componentsList);
}
componentsList.push(componentDescriptor);
this.componentsByClazz.set(componentDescriptor.clazz, componentDescriptor);

16
ui-ngx/src/app/core/http/entity.service.ts

@ -28,7 +28,7 @@ import { UserService } from './user.service';
import { DashboardService } from '@core/http/dashboard.service';
import { Direction } from '@shared/models/page/sort-order';
import { PageData } from '@shared/models/page/page-data';
import { getCurrentAuthUser } from '@core/auth/auth.selectors';
import { getCurrentAuthState, getCurrentAuthUser } from '@core/auth/auth.selectors';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { Authority } from '@shared/models/authority.enum';
@ -579,16 +579,18 @@ export class EntityService {
public prepareAllowedEntityTypesList(allowedEntityTypes: Array<EntityType | AliasEntityType>,
useAliasEntityTypes?: boolean): Array<EntityType | AliasEntityType> {
const authUser = getCurrentAuthUser(this.store);
const authState = getCurrentAuthState(this.store);
const entityTypes: Array<EntityType | AliasEntityType> = [];
switch (authUser.authority) {
switch (authState.authUser.authority) {
case Authority.SYS_ADMIN:
entityTypes.push(EntityType.TENANT);
break;
case Authority.TENANT_ADMIN:
entityTypes.push(EntityType.DEVICE);
entityTypes.push(EntityType.ASSET);
entityTypes.push(EntityType.EDGE);
if (authState.edgesSupportEnabled) {
entityTypes.push(EntityType.EDGE);
}
entityTypes.push(EntityType.ENTITY_VIEW);
entityTypes.push(EntityType.TENANT);
entityTypes.push(EntityType.CUSTOMER);
@ -602,7 +604,9 @@ export class EntityService {
case Authority.CUSTOMER_USER:
entityTypes.push(EntityType.DEVICE);
entityTypes.push(EntityType.ASSET);
entityTypes.push(EntityType.EDGE);
if (authState.edgesSupportEnabled) {
entityTypes.push(EntityType.EDGE);
}
entityTypes.push(EntityType.ENTITY_VIEW);
entityTypes.push(EntityType.CUSTOMER);
entityTypes.push(EntityType.USER);
@ -614,7 +618,7 @@ export class EntityService {
}
if (useAliasEntityTypes) {
entityTypes.push(AliasEntityType.CURRENT_USER);
if (authUser.authority !== Authority.SYS_ADMIN) {
if (authState.authUser.authority !== Authority.SYS_ADMIN) {
entityTypes.push(AliasEntityType.CURRENT_USER_OWNER);
}
}

21
ui-ngx/src/app/core/http/rule-chain.service.ts

@ -51,7 +51,8 @@ import { Edge } from "@shared/models/edge.models";
})
export class RuleChainService {
private ruleNodeComponents: Array<RuleNodeComponentDescriptor>;
private ruleNodeComponentsMap: Map<RuleChainType, Array<RuleNodeComponentDescriptor>> =
new Map<RuleChainType, Array<RuleNodeComponentDescriptor>>();
private ruleNodeConfigFactories: {[directive: string]: ComponentFactory<IRuleNodeConfigurationComponent>} = {};
constructor(
@ -120,16 +121,16 @@ export class RuleChainService {
public getRuleNodeComponents(ruleNodeConfigResourcesModulesMap: {[key: string]: any}, ruleChainType: RuleChainType, config?: RequestConfig):
Observable<Array<RuleNodeComponentDescriptor>> {
if (this.ruleNodeComponents) {
return of(this.ruleNodeComponents);
if (this.ruleNodeComponentsMap.get(ruleChainType)) {
return of(this.ruleNodeComponentsMap.get(ruleChainType));
} else {
return this.loadRuleNodeComponents(ruleChainType, config).pipe(
mergeMap((components) => {
return this.resolveRuleNodeComponentsUiResources(components, ruleNodeConfigResourcesModulesMap).pipe(
map((ruleNodeComponents) => {
this.ruleNodeComponents = ruleNodeComponents;
this.ruleNodeComponents.push(ruleChainNodeComponent);
this.ruleNodeComponents.sort(
this.ruleNodeComponentsMap.set(ruleChainType, ruleNodeComponents);
this.ruleNodeComponentsMap.get(ruleChainType).push(ruleChainNodeComponent);
this.ruleNodeComponentsMap.get(ruleChainType).sort(
(comp1, comp2) => {
let result = comp1.type.toString().localeCompare(comp2.type.toString());
if (result === 0) {
@ -138,7 +139,7 @@ export class RuleChainService {
return result;
}
);
return this.ruleNodeComponents;
return this.ruleNodeComponentsMap.get(ruleChainType);
})
);
})
@ -151,7 +152,11 @@ export class RuleChainService {
}
public getRuleNodeComponentByClazz(clazz: string): RuleNodeComponentDescriptor {
const found = this.ruleNodeComponents.filter((component) => component.clazz === clazz);
let mergedRuleNodeComponents: RuleNodeComponentDescriptor[] = [];
this.ruleNodeComponentsMap.forEach((value: Array<RuleNodeComponentDescriptor>, key: RuleChainType) => {
mergedRuleNodeComponents = mergedRuleNodeComponents.concat(value);
});
const found = mergedRuleNodeComponents.filter((component) => component.clazz === clazz);
if (found && found.length) {
return found[0];
} else {

51
ui-ngx/src/app/core/services/menu.service.ts

@ -18,14 +18,13 @@ import { Injectable } from '@angular/core';
import { AuthService } from '../auth/auth.service';
import { select, Store } from '@ngrx/store';
import { AppState } from '../core.state';
import {selectAuth, selectAuthUser, selectIsAuthenticated} from '../auth/auth.selectors';
import { selectAuth, selectAuthUser, selectIsAuthenticated } from '../auth/auth.selectors';
import { take } from 'rxjs/operators';
import { HomeSection, MenuSection } from '@core/services/menu.models';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { Authority } from '@shared/models/authority.enum';
import { AuthUser } from '@shared/models/user.model';
import { guid } from '@core/utils';
import {AuthState} from "@core/auth/auth.models";
import { AuthState } from "@core/auth/auth.models";
@Injectable({
providedIn: 'root'
@ -282,14 +281,14 @@ export class MenuService {
pages: [
{
id: guid(),
name: 'edge.edges',
name: 'edge.edge-instances',
type: 'link',
path: '/edges',
icon: 'router'
},
{
id: guid(),
name: 'rulechain.edge-rulechains',
name: 'edge.rulechain-templates',
type: 'link',
path: '/edges/ruleChains',
icon: 'settings_ethernet'
@ -398,12 +397,12 @@ export class MenuService {
name: 'edge.management',
places: [
{
name: 'edge.edges',
name: 'edge.edge-instances',
icon: 'router',
path: '/edges'
},
{
name: 'rulechain.edge-rulechains',
name: 'edge.rulechain-templates',
icon: 'settings_ethernet',
path: '/edges/ruleChains'
}
@ -476,7 +475,20 @@ export class MenuService {
type: 'link',
path: '/entityViews',
icon: 'view_quilt'
},
}
);
if (authState.edgesSupportEnabled) {
sections.push(
{
id: guid(),
name: 'edge.edge-instances',
type: 'link',
path: '/edges',
icon: 'router'
}
);
}
sections.push(
{
id: guid(),
name: 'dashboard.dashboards',
@ -489,7 +501,8 @@ export class MenuService {
}
private buildCustomerUserHome(authState: AuthState): Array<HomeSection> {
const homeSections: Array<HomeSection> = [
const homeSections: Array<HomeSection> = [];
homeSections.push(
{
name: 'asset.view-assets',
places: [
@ -519,7 +532,23 @@ export class MenuService {
path: '/entityViews'
}
]
},
}
);
if (authState.edgesSupportEnabled) {
homeSections.push(
{
name: 'edge.management',
places: [
{
name: 'edge.edge-instances',
icon: 'router',
path: '/edges'
}
]
}
);
}
homeSections.push(
{
name: 'dashboard.view-dashboards',
places: [
@ -530,7 +559,7 @@ export class MenuService {
}
]
}
];
);
return homeSections;
}

2
ui-ngx/src/app/modules/home/components/attribute/attribute-table.component.ts

@ -250,7 +250,7 @@ export class AttributeTableComponent extends PageComponent implements AfterViewI
resetSortAndFilter(update: boolean = true) {
const entityType = this.entityIdValue.entityType;
if (entityType === EntityType.DEVICE || entityType === EntityType.ENTITY_VIEW || entityType === EntityType.EDGE) {
if (entityType === EntityType.DEVICE || entityType === EntityType.ENTITY_VIEW) {
this.attributeScopes = Object.keys(AttributeScope);
this.attributeScopeSelectionReadonly = false;
} else {

4
ui-ngx/src/app/modules/home/pages/asset/assets-table-config.resolver.ts

@ -239,7 +239,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
actions.push(
{
name: this.translate.instant('edge.unassign-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: (entity) => true,
onAction: ($event, entity) => this.unassignFromEdge($event, entity)
}
@ -274,7 +274,7 @@ export class AssetsTableConfigResolver implements Resolve<EntityTableConfig<Asse
actions.push(
{
name: this.translate.instant('asset.unassign-assets-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: true,
onAction: ($event, entities) => this.unassignAssetsFromEdge($event, entities)
}

4
ui-ngx/src/app/modules/home/pages/dashboard/dashboards-table-config.resolver.ts

@ -257,7 +257,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
},
{
name: this.translate.instant('edge.unassign-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: (entity) => true,
onAction: ($event, entity) => this.unassignFromEdge($event, entity)
}
@ -301,7 +301,7 @@ export class DashboardsTableConfigResolver implements Resolve<EntityTableConfig<
actions.push(
{
name: this.translate.instant('dashboard.unassign-dashboards-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: true,
onAction: ($event, entities) => this.unassignDashboardsFromEdge($event, entities)
}

8
ui-ngx/src/app/modules/home/pages/device/devices-table-config.resolver.ts

@ -281,7 +281,7 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
actions.push(
{
name: this.translate.instant('edge.unassign-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: (entity) => true,
onAction: ($event, entity) => this.unassignFromEdge($event, entity)
}
@ -315,10 +315,10 @@ export class DevicesTableConfigResolver implements Resolve<EntityTableConfig<Dev
if (deviceScope === 'edge') {
actions.push(
{
name: this.translate.instant('asset.unassign-assets-from-edge'),
icon: 'portable_wifi_off',
name: this.translate.instant('device.unassign-devices-from-edge'),
icon: 'assignment_return',
isEnabled: true,
onAction: ($event, entities) => this.unassignDevicesFromCustomer($event, entities)
onAction: ($event, entities) => this.unassignDevicesFromEdge($event, entities)
}
);
}

10
ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts

@ -42,7 +42,7 @@ const routes: Routes = [
path: 'edges',
data: {
breadcrumb: {
label: 'edge.edges',
label: 'edge.edge-instances',
icon: 'router'
}
},
@ -65,7 +65,7 @@ const routes: Routes = [
auth: [Authority.TENANT_ADMIN],
ruleChainsType: 'edge',
breadcrumb: {
label: 'rulechain.edge-rulechains',
label: 'edge.rulechain-templates',
icon: 'settings_ethernet'
},
},
@ -131,7 +131,7 @@ const routes: Routes = [
path: '',
component: EntitiesTableComponent,
data: {
auth: [Authority.TENANT_ADMIN],
auth: [Authority.TENANT_ADMIN, Authority.CUSTOMER_USER],
dashboardsType: 'edge'
},
resolve: {
@ -160,7 +160,7 @@ const routes: Routes = [
path: 'ruleChains',
data: {
breadcrumb: {
label: 'rulechain.edge-rulechains',
label: 'edge.rulechain-templates',
icon: 'settings_ethernet'
}
},
@ -170,7 +170,7 @@ const routes: Routes = [
component: EntitiesTableComponent,
data: {
auth: [Authority.TENANT_ADMIN],
title: 'rulechain.edge-rulechains',
title: 'edge.rulechain-templates',
ruleChainsType: 'edges'
},
resolve: {

2
ui-ngx/src/app/modules/home/pages/edge/edge-tabs.component.html

@ -17,7 +17,7 @@
-->
<mat-tab *ngIf="entity"
label="{{ 'attribute.attributes' | translate }}" #attributesTab="matTab">
<tb-attribute-table [defaultAttributeScope]="attributeScopes.CLIENT_SCOPE"
<tb-attribute-table [defaultAttributeScope]="attributeScopes.SERVER_SCOPE"
[active]="attributesTab.isActive"
[entityId]="entity.id"
[entityName]="entity.name">

88
ui-ngx/src/app/modules/home/pages/edge/edge.component.html

@ -34,42 +34,44 @@
[fxShow]="!isEdit && (edgeScope === 'customer' || edgeScope === 'tenant') && isAssignedToCustomer(entity)">
{{ (entity?.customerIsPublic ? 'edge.make-private' : 'edge.unassign-from-customer') | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeAssets')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-assets' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeDevices')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-devices' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeEntityViews')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-entity-views' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeDashboards')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-dashboards' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeRuleChains')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-rulechains' | translate }}
</button>
<button mat-raised-button color="primary" fxFlex.xs
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'delete')"
[fxShow]="!hideDelete() && !isEdit">
{{'edge.delete' | translate }}
</button>
<div fxLayout="row" fxLayout.xs="column">
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeAssets')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-assets' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeDevices')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-devices' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeEntityViews')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-entity-views' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeDashboards')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-dashboards' | translate }}
</button>
<button mat-raised-button color="primary"
[disabled]="(isLoading$ | async)"
(click)="onEntityAction($event, 'openEdgeRuleChains')"
[fxShow]="!isEdit && edgeScope === 'tenant'">
{{'edge.manage-edge-rulechains' | translate }}
</button>
</div>
<div fxLayout="row" fxLayout.xs="column">
<button mat-raised-button
ngxClipboard
@ -95,7 +97,6 @@
<mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon>
<span translate>edge.copy-edge-secret</span>
</button>
</div>
</div>
<div class="mat-padding" fxLayout="column">
@ -123,18 +124,6 @@
[required]="true"
[entityType]="entityType.EDGE">
</tb-entity-subtype-autocomplete>
<mat-form-field class="mat-block">
<mat-label translate>edge.label</mat-label>
<input matInput formControlName="label">
</mat-form-field>
<div formGroupName="additionalInfo" fxLayout="column">
<mat-form-field class="mat-block">
<mat-label translate>edge.description</mat-label>
<textarea matInput formControlName="description" rows="2"></textarea>
</mat-form-field>
</div>
</fieldset>
<div fxLayout="row">
<fieldset fxFlex>
<mat-form-field class="mat-block">
@ -163,7 +152,7 @@
<mat-label translate>edge.edge-key</mat-label>
<input matInput formControlName="routingKey">
</mat-form-field>
</fieldset>
</fieldset>
</div>
<div fxLayout="row">
<fieldset fxFlex disabled>
@ -173,5 +162,16 @@
</mat-form-field>
</fieldset>
</div>
<mat-form-field class="mat-block">
<mat-label translate>edge.label</mat-label>
<input matInput formControlName="label">
</mat-form-field>
<div formGroupName="additionalInfo" fxLayout="column">
<mat-form-field class="mat-block">
<mat-label translate>edge.description</mat-label>
<textarea matInput formControlName="description" rows="2"></textarea>
</mat-form-field>
</div>
</fieldset>
</form>
</div>

9
ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts

@ -122,10 +122,10 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI
if (parentCustomer.additionalInfo && parentCustomer.additionalInfo.isPublic) {
this.config.tableTitle = this.translate.instant('customer.public-edges');
} else {
this.config.tableTitle = parentCustomer.title + ': ' + this.translate.instant('edge.edges');
this.config.tableTitle = parentCustomer.title + ': ' + this.translate.instant('edge.edge-instances');
}
} else {
this.config.tableTitle = this.translate.instant('edge.edges');
this.config.tableTitle = this.translate.instant('edge.edge-instances');
}
this.config.columns = this.configureColumns(this.config.componentsData.edgeScope);
this.configureEntityFunctions(this.config.componentsData.edgeScope);
@ -170,6 +170,11 @@ export class EdgesTableConfigResolver implements Resolve<EntityTableConfig<EdgeI
this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink);
this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id);
}
if (edgeScope === 'customer_user') {
this.config.entitiesFetchFunction = pageLink =>
this.edgeService.getCustomerEdgeInfos(this.customerId, pageLink);
this.config.deleteEntity = id => this.edgeService.unassignEdgeFromCustomer(id.id);
}
}
configureCellActions(edgeScope: string): Array<CellActionDescriptor<EdgeInfo>> {

4
ui-ngx/src/app/modules/home/pages/entity-view/entity-views-table-config.resolver.ts

@ -239,7 +239,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
actions.push(
{
name: this.translate.instant('edge.unassign-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: (entity) => true,
onAction: ($event, entity) => this.unassignFromEdge($event, entity)
}
@ -274,7 +274,7 @@ export class EntityViewsTableConfigResolver implements Resolve<EntityTableConfig
actions.push(
{
name: this.translate.instant('entity-view.unassign-entity-views-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: true,
onAction: ($event, entities) => this.unassignEntityViewsFromEdge($event, entities)
}

16
ui-ngx/src/app/modules/home/pages/rulechain/rulechains-table-config.resolver.ts

@ -101,7 +101,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
this.config.entitySelectionEnabled = ruleChain => this.config.componentsData.edge.rootRuleChainId.id != ruleChain.id.id;
this.edgeService.getEdge(this.config.componentsData.edgeId).subscribe(edge => {
this.config.componentsData.edge = edge;
this.config.tableTitle = edge.name + ': ' + this.translate.instant('rulechain.edge-rulechains');
this.config.tableTitle = edge.name + ': ' + this.translate.instant('edge.rulechain-templates');
});
this.config.entitiesDeleteEnabled = false;
}
@ -128,7 +128,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
columns.push(
new DateEntityTableColumn<RuleChain>('createdTime', 'common.created-time', this.datePipe, '150px'),
new EntityTableColumn<RuleChain>('name', 'rulechain.name', '100%'),
new EntityTableColumn<RuleChain>('root', 'rulechain.default-root', '60px',
new EntityTableColumn<RuleChain>('root', 'rulechain.root', '60px',
entity => {
return checkBoxCell(entity.root);
})
@ -173,7 +173,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
this.config.tableTitle = this.translate.instant('rulechain.rulechains');
this.config.entitiesFetchFunction = pageLink => this.fetchRuleChains(pageLink);
} else if (ruleChainScope === 'edges') {
this.config.tableTitle = this.translate.instant('rulechain.edge-rulechains');
this.config.tableTitle = this.translate.instant('edge.rulechain-templates');
this.config.entitiesFetchFunction = pageLink => this.fetchEdgeRuleChains(pageLink);
} else if (ruleChainScope === 'edge') {
this.config.entitiesFetchFunction = pageLink => this.ruleChainService.getEdgeRuleChains(this.config.componentsData.edgeId, pageLink);
@ -186,7 +186,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
actions.push(
{
name: this.translate.instant('rulechain.unassign-rulechains'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: true,
onAction: ($event, entities) => this.unassignRuleChainsFromEdge($event, entities)
}
@ -232,7 +232,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
onAction: ($event, entity) => this.setDefaultRootEdgeRuleChain($event, entity)
},
{
name: this.translate.instant('rulechain.set-default-edge'),
name: this.translate.instant('rulechain.set-auto-assign-to-edge'),
icon: 'bookmark_outline',
isEnabled: (entity) => this.isNonDefaultEdgeRuleChain(entity),
onAction: ($event, entity) => this.setDefaultEdgeRuleChain($event, entity)
@ -255,7 +255,7 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
},
{
name: this.translate.instant('edge.unassign-from-edge'),
icon: 'portable_wifi_off',
icon: 'assignment_return',
isEnabled: (entity) => entity.id.id != this.config.componentsData.edge.rootRuleChainId.id,
onAction: ($event, entity) => this.unassignFromEdge($event, entity)
}
@ -449,8 +449,8 @@ export class RuleChainsTableConfigResolver implements Resolve<EntityTableConfig<
$event.stopPropagation();
}
this.dialogService.confirm(
this.translate.instant('rulechain.set-default-edge-title', {ruleChainName: ruleChain.name}),
this.translate.instant('rulechain.set-default-edge-text'),
this.translate.instant('rulechain.set-auto-assign-to-edge-title', {ruleChainName: ruleChain.name}),
this.translate.instant('rulechain.set-auto-assign-to-edge-text'),
this.translate.instant('action.no'),
this.translate.instant('action.yes'),
true

19
ui-ngx/src/assets/locale/locale.constant-de_DE.json

@ -419,7 +419,6 @@
"manage-assets": "Objekte verwalten",
"manage-devices": "Geräte verwalten",
"manage-dashboards": "Dashboards verwalten",
"manage-edges": "Öffentliche Rand",
"title": "Titel",
"title-required": "Titel ist erforderlich.",
"description": "Beschreibung",
@ -582,7 +581,6 @@
"select-state": "Soll-Zustand auswählen",
"state-controller": "Zustandssteuerung",
"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.",
"unassign-dashboards-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Dashboard} other {# Dashboards} } vom Rand aufheben",
"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.",
"assign-dashboard-to-edge": "Dashboard(s) dem Rand zuordnen",
"assign-dashboard-to-edge-text": "Bitte wählen Sie die Dashboards aus, die Sie dem Rand zuordnen möchten"
@ -717,12 +715,9 @@
"public": "Öffentlich",
"device-public": "Gerät ist öffentlich",
"select-device": "Gerät auswählen",
"assign-device-to-edge": "Dashboard(s) dem Gerät zuordnen",
"assign-device-to-edge-text":"Bitte wählen Sie die Geräte aus, die Sie dem Rand zuordnen möchten",
"unassign-device-from-edge-title": "Sind Sie sicher, dass Sie die Zuordnung zum Gerät '{{deviceName}}' wirklich aufheben möchten?",
"unassign-device-from-edge-text": "Nach der Bestätigung ist das Gerät nicht zugeordnet und für den Kunden nicht zugänglich.",
"unassign-devices-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Gerät} other {# Geräte} } vom Rand aufheben",
"unassign-device-from-edge": "Nicht zugeordnete Geräte",
"unassign-devices-from-edge-title": "Sind Sie sicher, dass Sie { count, plural, 1 {1 Gerät} other {# Geräte} } nicht mehr zuordnen möchten?",
"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."
},
@ -731,9 +726,10 @@
},
"edge": {
"edge": "Rand",
"edges": "Rand",
"edge-instances": "Kanteninstanzen",
"management": "Rand verwalten",
"no-edges-matching": "Keine passenden Rand '{{entity}}' gefunden.",
"rulechain-templates": "Regelkettenvorlagen",
"add": "Rand hinzufügen",
"view": "Rand anzeigen",
"no-edges-text": "Kein Rand gefunden.",
@ -744,7 +740,6 @@
"delete-edge-title": "Möchten Sie des Rands wirklich löschen '{{edgeName}}'?",
"delete-edge-text": "Seien Sie vorsichtig, nach der Bestätigung werden der Rand und alle zugehörigen Daten nicht wiederhergestellt.",
"delete-edges-title": "Sind Sie sicher, dass Sie die Rand löschen möchten { count, plural, 1 {1 Rand} other {# Rand} }?",
"delete-edges-action-title": "Löschen { count, plural, 1 {1 Rand} other {# Rand} }",
"delete-edges-text": "Vorsicht, nach Bestätigung werden alle ausgewählten Rand entfernt und alle zugehörigen Daten werden nicht wiederhergestellt.",
"name": "Name",
"name-required": "Name ist erforderlich.",
@ -1356,8 +1351,6 @@
"rulechain": {
"rulechain": "Regelkette",
"rulechains": "Regelketten",
"core-rulechains": "Kernregelketten",
"edge-rulechains": "Randregelketten",
"root": "Wurzel",
"delete": "Regelkette löschen",
"name": "Name",
@ -1394,11 +1387,9 @@
"assign-rulechains": "Regelketten zuweisen",
"assign-new-rulechain": "Neues Regelkette zuweisen",
"delete-rulechains": "Regelketten löschen",
"default": "Standard",
"unassign-rulechain": "Nicht zugeordnete Regelkette",
"unassign-rulechains": "Nicht zugeordnete Regelketten",
"unassign-rulechain-title": "Möchten Sie die Zuordnung die Regelkette '{{ruleChainTitle}}' wirklich aufheben?",
"unassign-rulechains-title": "Sind Sie sicher, dass Sie die Zuordnung aufheben möchten { count, plural, 1 {1 Regelkette} other {# Regelketten} }?",
"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.",
"unassign-rulechains-from-edge-action-title": "Zuordnung { count, plural, 1 {1 Regelkette} other {# Regelketten} } vom Rand aufheben",
"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 @@
"set-default-root-edge-rulechain-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' zur Wurzel machen Standard?",
"set-default-root-edge-rulechain-text": "Nach der Bestätigung wird die Randregelkette zur Wurzel Standard und behandelt alle eingehenden Transportnachrichten.",
"invalid-rulechain-type-error": "Regelkette konnte nicht importiert werden: Ungültige Regelkettentyp. Erwarteter Typ ist {{expectedRuleChainType}}.",
"set-default-edge": "Machen Sie Regelkette Standard",
"set-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' machen Standard?",
"set-default-edge-text": "Nach der Bestätigung wird die Randregelkette für neu erstellte Rand vergeben.",
"set-auto-assign-to-edge": "Ordnen Sie die Regelkette bei der Erstellung automatisch den Kanten zu",
"set-auto-assign-to-edge-title": "Möchten Sie die Kantenregelkette '{{ruleChainName}}' bei der Erstellung automatisch den Kanten zuweisen?",
"set-auto-assign-to-edge-text": "Nach der Bestätigung wird die Kantenregelkette bei der Erstellung automatisch den Kanten zugewiesen.",
"remove-default-edge": "Randregelkette Standard entfernen",
"remove-default-edge-title": "Sind Sie sicher, dass Sie die Randregelkette '{{ruleChainName}}' aus der Standardliste entfernen?",
"remove-default-edge-text": "Nach der Bestätigung wird die Randregelkette nicht für neu erstellte Rand vergeben."

39
ui-ngx/src/assets/locale/locale.constant-en_US.json

@ -412,7 +412,6 @@
"unassign-asset-from-edge": "Unassign asset",
"unassign-asset-from-edge-title": "Are you sure you want to unassign the asset '{{assetName}}'?",
"unassign-asset-from-edge-text": "After the confirmation the asset will be unassigned and won't be accessible by the edge.",
"unassign-assets-from-edge-action-title": "Unassign { count, plural, 1 {1 asset} other {# assets} } from edge",
"unassign-assets-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 asset} other {# assets} }?",
"unassign-assets-from-edge-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the edge."
},
@ -611,7 +610,6 @@
"delete-customers-text": "Be careful, after the confirmation all selected customers will be removed and all related data will become unrecoverable.",
"manage-users": "Manage users",
"manage-assets": "Manage assets",
"manage-edges": "Manage edges",
"manage-devices": "Manage devices",
"manage-dashboards": "Manage dashboards",
"title": "Title",
@ -783,7 +781,6 @@
"select-state": "Select target state",
"state-controller": "State controller",
"unassign-dashboard-from-edge-text": "After the confirmation the dashboard will be unassigned and won't be accessible by the edge.",
"unassign-dashboards-from-edge-action-title": "Unassign { count, plural, 1 {1 dashboard} other {# dashboards} } from edge",
"unassign-dashboards-from-edge-text": "After the confirmation all selected dashboards will be unassigned and won't be accessible by the edge.",
"assign-dashboard-to-edge": "Assign Dashboard(s) To Edge",
"assign-dashboard-to-edge-text": "Please select the dashboards to assign to the edge"
@ -877,6 +874,7 @@
"unassign-devices-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from customer",
"unassign-device-from-edge-title": "Are you sure you want to unassign the device '{{deviceName}}'?",
"unassign-device-from-edge-text": "After the confirmation the device will be unassigned and won't be accessible by the edge.",
"unassign-devices-from-edge": "Unassign devices from edge",
"assign-new-device": "Assign new device",
"make-public-device-title": "Are you sure you want to make the device '{{deviceName}}' public?",
"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 @@
"customer-to-assign-device": "Customer to assign the device",
"add-credential": "Add credential"
},
"assign-device-to-edge": "Assign Device(s) To Edge",
"unassign-devices-from-edge-action-title": "Unassign { count, plural, 1 {1 device} other {# devices} } from edge",
"unassign-device-from-edge": "Unassign device",
"unassign-devices-from-edge-title": "Are you sure you want to unassign { count, plural, 1 {1 device} other {# devices} }?",
"unassign-devices-from-edge-text": "After the confirmation all selected devices will be unassigned and won't be accessible by the edge."
},
"device-profile": {
"device-profile": "Device profile",
@ -1116,10 +1110,11 @@
},
"edge": {
"edge": "Edge",
"edges": "Edges",
"edge-instances": "Edge instances",
"edge-file": "Edge file",
"management": "Edge management",
"no-edges-matching": "No edges matching '{{entity}}' were found.",
"rulechain-templates": "Rule chain templates",
"add": "Add Edge",
"view": "View Edge",
"no-edges-text": "No edges found",
@ -1130,7 +1125,6 @@
"delete-edge-title": "Are you sure you want to delete the edge '{{edgeName}}'?",
"delete-edge-text": "Be careful, after the confirmation the edge and all related data will become unrecoverable.",
"delete-edges-title": "Are you sure you want to edge { count, plural, 1 {1 edge} other {# edges} }?",
"delete-edges-action-title": "Delete { count, plural, 1 {1 edge} other {# edges} }",
"delete-edges-text": "Be careful, after the confirmation all selected edges will be removed and all related data will become unrecoverable.",
"name": "Name",
"name-starts-with": "Edge name starts with",
@ -1176,21 +1170,19 @@
"label": "Label",
"load-entity-error": "Failed to load data. Entity not found or has been deleted.",
"assign-new-edge": "Assign new edge",
"manage-edge-dashboards": "Manage edge dashboards",
"manage-edge-dashboards": "Edge dashboards",
"unassign-from-edge": "Unassign from edge",
"dashboards": "Edge Dashboards",
"manage-edge-rulechains": "Manage edge rule chains",
"rulechains": "Edge Rule Chains",
"rulechain": "Edge Rule Chain",
"manage-edge-rulechains": "Edge rule chains",
"edge-key": "Edge key",
"copy-edge-key": "Copy edge key",
"edge-key-copied-message": "Edge key has been copied to clipboard",
"edge-secret": "Edge secret",
"copy-edge-secret": "Copy edge secret",
"edge-secret-copied-message": "Edge secret has been copied to clipboard",
"manage-edge-assets": "Manage edge assets",
"manage-edge-devices": "Manage edge devices",
"manage-edge-entity-views": "Manage edge entity views",
"manage-edge-assets": "Edge assets",
"manage-edge-devices": "Edge devices",
"manage-edge-entity-views": "Edge entity views",
"assets": "Edge assets",
"devices": "Edge devices",
"entity-views": "Edge entity views",
@ -1207,7 +1199,6 @@
"edge-type-list-empty": "No edge types selected.",
"edge-types": "Edge types",
"dashboard": "Edge dashboard",
"unassign-edges-action-title": "Unassign { count, plural, 1 {1 edge} other {# edges} } from customer",
"enter-edge-type": "Enter edge type",
"deployed": "Deployed",
"pending": "Pending"
@ -2006,7 +1997,6 @@
"rulechain": {
"rulechain": "Rule chain",
"rulechains": "Rule chains",
"default-root": "Default root",
"root": "Root",
"delete": "Delete rule chain",
"name": "Name",
@ -2044,9 +2034,7 @@
"selected-rulechains": "{ count, plural, 1 {1 rule chain} other {# rule chains} } selected",
"open-rulechain": "Open rule chain",
"assign-new-rulechain": "Assign new rulechain",
"edge-rulechains": "Edge Rule chains",
"edge-rulechain": "Edge Rule chain",
"core-rulechains": "Core Rule chains",
"unassign-rulechain-from-edge-text": "After the confirmation the rulechain will be unassigned and won't be accessible by the edge.",
"unassign-rulechains-from-edge-title": "Unassign { count, plural, 1 {1 rulechain} other {# rulechains} } from edge",
"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 @@
"set-default-root-edge-rulechain-title": "Are you sure you want to make the rule chain '{{ruleChainName}}' default edge root?",
"set-default-root-edge-rulechain-text": "After the confirmation the rule chain will become default edge root and will handle all incoming transport messages.",
"invalid-rulechain-type-error": "Unable to import rule chain: Invalid rule chain type. Expected type is {{expectedRuleChainType}}.",
"set-default-edge": "Make rule chain default",
"set-default-edge-title": "Are you sure you want to make the edge rule chain '{{ruleChainName}}' default?",
"set-default-edge-text": "After the confirmation the edge rule chain will be added to default list and assigned to newly created edge(s).",
"set-auto-assign-to-edge": "Auto-assign rule chain to edge(s) on creation",
"set-auto-assign-to-edge-title": "Are you sure you want to auto-assign the edge rule chain '{{ruleChainName}}' to edge(s) on creation?",
"set-auto-assign-to-edge-text": "After the confirmation the edge rule chain will be automatically assigned to edge(s) on creation.",
"remove-default-edge": "Remove rule chain from defaults",
"remove-default-edge-title": "Are you sure you want to remove the edge rule chain '{{ruleChainName}}' from default list?",
"remove-default-edge-text": "After the confirmation the edge rule chain will not be assigned for a newly created edges.",
"unassign-rulechain-title": "Are you sure you want to unassign the rulechain '{{ruleChainName}}'?",
"unassign-rulechains-title": "Are you sure you want to unassign { count, plural, 1 {1 rulechain} other {# rulechains} }?",
"unassign-rulechains": "Unassign rulechains",
"default": "Default",
"default-root": "Default root"
"unassign-rulechains": "Unassign rulechains"
},
"rulenode": {
"details": "Details",

19
ui-ngx/src/assets/locale/locale.constant-es_ES.json

@ -432,7 +432,6 @@
"manage-assets": "Gestionar activos",
"manage-devices": "Gestionar dispositivos",
"manage-dashboards": "Gestionar paneles",
"manage-edges": "Administrar bordes",
"title": "Título",
"title-required": "Título requerido.",
"description": "Descripción",
@ -595,7 +594,6 @@
"select-state": "Seleccionar estado destino (target state)",
"state-controller": "Controlador de estados",
"unassign-dashboard-from-edge-text": "Después de la confirmación, el tablero no será asignado y el borde no podrá acceder a él",
"unassign-dashboards-from-edge-action-title": "Anular asignación { count, plural, 1 {1 panel} other {# paneles} } de borde",
"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",
"assign-dashboard-to-edge": "Asignar panel(es) al borde",
"assign-dashboard-to-edge-text": "Por favor selecciona los paneles para asignar al borde"
@ -735,12 +733,9 @@
"select-device": "Seleccionar dispositivo",
"device-file": "Archivo de dispositivo",
"import": "Importar dispositivo",
"assign-device-to-edge": "Asignar dispositivo (s) a borde",
"assign-device-to-edge-text": "Seleccione los dispositivos para asignar al borde",
"unassign-device-from-edge-title": "¿Está seguro de que desea desasignar el dispositivo '{{deviceName}}'?",
"unassign-device-from-edge-text": "Después de la confirmación, el dispositivo no será asignado y el borde no podrá acceder a él",
"unassign-devices-from-edge-action-title": "Anular asignación {count, plural, 1 {1 dispositivo} other {# dispositivos}} desde el borde",
"unassign-device-from-edge": "Desasignar dispositivo",
"unassign-devices-from-edge-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 dispositivo} other {# dispositivos}}?",
"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."
},
@ -753,9 +748,10 @@
},
"edge": {
"edge": "Borde",
"edges": "Bordes",
"edge-instances": "Instancias de Borde",
"management": "Gestión de bordes",
"no-edges-matching": "No se encontraron bordes que coincidan con '{{entity}}'",
"rulechain-templates": "Plantillas, de cadena de reglas",
"add": "Agregar borde",
"view": "Ver borde",
"no-edges-text": "No se encontraron bordes",
@ -766,7 +762,6 @@
"delete-edge-title": "¿Está seguro de que desea eliminar el borde '{{edgeName}}'?",
"delete-edge-text": "Tenga cuidado, después de la confirmación, el borde y todos los datos relacionados serán irrecuperables",
"delete-edges-title": "¿Está seguro de que desea edge {count, plural, 1 {1 borde} other {# bordes}}?",
"delete-edges-action-title": "Eliminar {cuenta, plural, 1 {1 borde} other {# bordes}}",
"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",
"name": "Nombre",
"name-required": "Se requiere nombre",
@ -1527,8 +1522,6 @@
"rulechain": {
"rulechain": "Cadena de Regla",
"rulechains": "Cadenas de Reglas",
"core-rulechains": "Cadenas de reglas centrales",
"edge-rulechains": "Cadenas de reglas de borde",
"root": "Raíz",
"delete": "Borrar cadena de reglas",
"name": "Nombre",
@ -1565,11 +1558,9 @@
"assign-rulechains": "Asignar cadenas de reglas",
"assign-new-rulechain": "Asignar nueva cadena de reglas",
"delete-rulechains": "Eliminar cadenas de reglas",
"default": "Predeterminado",
"unassign-rulechain": "Anular asignación de cadena de reglas",
"unassign-rulechains": "Anular asignación de cadenas de reglas",
"unassign-rulechain-title": "¿Está seguro de que desea desasignar la cadena de reglas '{{ruleChainTitle}}'?",
"unassign-rulechains-title": "¿Está seguro de que desea desasignar {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}}?",
"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",
"unassign-rulechains-from-edge-action-title": "Anular asignación {count, plural, 1 {1 cadena de reglas} other {# cadenas de reglas}} des bordes",
"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 @@
"set-default-root-edge-rulechain-title": "¿Está seguro de que desea hacer que la cadena de reglas '{{ruleChainName}}' sea la raíz de borde predeterminada?",
"set-default-root-edge-rulechain-text": "Después de la confirmación, la cadena de reglas se convertirá en raíz raíz predeterminada y manejará todos los mensajes de transporte entrantes",
"invalid-rulechain-type-error": "No se puede importar la cadena de reglas: Tipo de cadena de reglas no válido. El tipo esperado es {{expectedRuleChainType}}",
"set-default-edge": "Hacer que la cadena de reglas de borde sea predeterminada",
"set-default-edge-title": "¿Está seguro de que desea que la cadena de reglas de borde '{{ruleChainName}}' sea predeterminada?",
"set-default-edge-text": "Después de la confirmación, la cadena de reglas de borde se agregará a la lista predeterminada y se asignará a los bordes recién creados",
"set-auto-assign-to-edge": "Asignar automáticamente la cadena de reglas a los bordes en la creación",
"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?",
"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.",
"remove-default-edge": "Eliminar la cadena de regla de borde de los valores predeterminados",
"remove-default-edge-title": "¿Está seguro de que desea eliminar la cadena de reglas de borde '{{ruleChainName}}' de la lista predeterminada?",
"remove-default-edge-text": "Después de la confirmación, la cadena de reglas de borde no se asignará a los bordes recién creados"

19
ui-ngx/src/assets/locale/locale.constant-fr_FR.json

@ -433,7 +433,6 @@
"manage-customer-users": "Gérer les utilisateurs du client",
"manage-dashboards": "Gérer les tableaux de bord",
"manage-devices": "Gérer les dispositifs",
"manage-edges": "Gérer les bordures",
"manage-public-assets": "Gérer les actifs publics",
"manage-public-dashboards": "Gérer les tableaux de bord publics",
"manage-public-devices": "Gérer les dispositifs publics",
@ -593,7 +592,6 @@
"widget-import-missing-aliases-title": "Configurer les alias utilisés par le widget importé",
"widgets-margins": "Marge entre les widgets",
"unassign-dashboard-from-edge-text": "Après la confirmation, tableau de bord sera non attribué et ne sera pas accessible a la bordure.",
"unassign-dashboards-from-edge-action-title": "Annuler l'affectation {count, plural, 1 {1 tableau de bord} other {# tableaux de bord}} de la bordure",
"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.",
"assign-dashboard-to-edge": "Attribuer des tableaux de bord a la bordure",
"assign-dashboard-to-edge-text": "Veuillez sélectionner la bordure pour attribuer le ou les tableaux de bord"
@ -735,12 +733,9 @@
"use-device-name-filter": "Utiliser le filtre",
"view-credentials": "Afficher les informations d'identification",
"view-devices": "Afficher les dispositifs",
"assign-device-to-edge": "Attribuer a la bordure",
"assign-device-to-edge-text":"Veuillez sélectionner la bordure pour attribuer le ou les dispositifs",
"unassign-device-from-edge-title": "Êtes-vous sûr de vouloir annuler l'affection du dispositif {{deviceName}} '?",
"unassign-device-from-edge-text": "Après la confirmation, dispositif sera non attribué et ne sera pas accessible a la bordure.",
"unassign-devices-from-edge-action-title": "Annuler l'affectation de {count, plural, 1 {1 device} other {#devices}} de la bordure",
"unassign-device-from-edge": "Retirer de la bordure",
"unassign-devices-from-edge-title": "Voulez-vous vraiment annuler l'affectation de {count, plural, 1 {1 device} other {# devices}}?",
"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."
},
@ -749,9 +744,10 @@
},
"edge": {
"edge": "Bordure",
"edges": "Bordures",
"edge-instances": "Instances de Bord",
"management": "Gestion des bordures",
"no-edges-matching": "Aucun bordure correspondant à {{entity}} n'a été trouvé.",
"rulechain-templates": "Modèles de chaîne de règles",
"add": "Ajouter un bordure",
"view": "Afficher la bordure",
"no-edges-text": "Aucun bordure trouvé",
@ -762,7 +758,6 @@
"delete-edge-title": "Êtes-vous sûr de vouloir supprimer la bordure '{{edgeName}}'?",
"delete-edge-text": "Faites attention, après la confirmation, la bordure et toutes les données associées deviendront irrécupérables",
"delete-edges-title": "Êtes-vous sûr de vouloir supprimer {count, plural, 1 {1 bordure} other {# bordure}}?",
"delete-edges-action-title": "Supprimer {count, plural, 1 {1 bordure} other {# bordure}}",
"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.",
"name": "Nom",
"name-required": "Le nom de la bordure est requis",
@ -1430,8 +1425,6 @@
"rulechain-required": "Chaîne de règles requise",
"rulechains": "Chaînes de règles",
"select-rulechain": "Sélectionner la chaîne de règles",
"core-rulechains": "Chaînes de règles fondamentales",
"edge-rulechains": "Chaînes de règles de la bordure",
"set-root": "Rend la chaîne de règles racine (root) ",
"set-root-rulechain-text": "Après la confirmation, la chaîne de règles deviendra racine (root) et gérera tous les messages de transport entrants.",
"set-root-rulechain-title": "Voulez-vous vraiment que la chaîne de règles '{{ruleChainName}} soit racine (root) ?",
@ -1439,11 +1432,9 @@
"assign-rulechains": "Attribuer aux chaînes de règles",
"assign-new-rulechain": "Attribuer une nouvele chaînes de règles",
"delete-rulechains": "Supprimer une chaînes de règles",
"default": "Défaut",
"unassign-rulechain": "Retirer chaîne de règles",
"unassign-rulechains": "Retirer chaînes de règles",
"unassign-rulechain-title": "AÊtes-vous sûr de vouloir retirer l'attribution de chaînes de règles '{{ruleChainTitle}}'?",
"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}}?",
"unassign-rulechain-from-edge-text": "Après la confirmation, l'actif sera non attribué et ne sera pas accessible a la bordure.",
"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",
"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 @@
"set-default-root-edge-rulechain-title": "AVoulez-vous vraiment créer de chaînes de règles par défaut '{{ruleChainName}}'?",
"set-default-root-edge-rulechain-text": "Après la confirmation, la chaîne de règles deviendra la racine de la bordure par défaut et gérera tous les messages de transport entrants.",
"invalid-rulechain-type-error": "Impossible d'importer la chaîne de règles: type de chaîne de règles non valide. Le type attendu est {{attenduRuleChainType}}.",
"set-default-edge": "Définir la chaîne de règles de la bordure par défaut",
"set-default-edge-title": "Voulez-vous vraiment définir la chaîne de règles de la bordure '{{ruleChainName}}' par défaut?",
"set-default-edge-text": "Après la confirmation, la chaîne de règles d'arête sera ajoutée à la liste par défaut et affectée aux arêtes nouvellement créées.",
"set-auto-assign-to-edge": "Assigner automatiquement la chaîne de règles aux arêtes lors de la création",
"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?",
"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.",
"remove-default-edge": "Supprimer la chaîne de règles de la bordure des valeurs par défaut",
"remove-default-edge-title": "Voulez-vous vraiment supprimer la chaîne de règles de la bordure '{{ruleChainName}}' de la liste par défaut",
"remove-default-edge-text": "Après la confirmation, la chaîne de règles d'arête ne sera pas affectée aux arêtes nouvellement créées."

Loading…
Cancel
Save