corrections-after-review
This commit is contained in:
parent
97657284a8
commit
97a70366fa
@ -17,13 +17,13 @@
|
|||||||
import {
|
import {
|
||||||
ChangeDetectionStrategy,
|
ChangeDetectionStrategy,
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
Component, ElementRef, HostBinding,
|
Component, ElementRef, EventEmitter, HostBinding,
|
||||||
Inject,
|
Inject,
|
||||||
Injector,
|
Injector,
|
||||||
Input,
|
Input,
|
||||||
NgZone,
|
NgZone,
|
||||||
OnDestroy,
|
OnDestroy,
|
||||||
OnInit, Optional,
|
OnInit, Optional, Renderer2,
|
||||||
StaticProvider,
|
StaticProvider,
|
||||||
ViewChild,
|
ViewChild,
|
||||||
ViewContainerRef,
|
ViewContainerRef,
|
||||||
@ -136,7 +136,11 @@ import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
|||||||
import cssjs from '@core/css/css';
|
import cssjs from '@core/css/css';
|
||||||
import { DOCUMENT } from '@angular/common';
|
import { DOCUMENT } from '@angular/common';
|
||||||
import { IAliasController } from '@core/api/widget-api.models';
|
import { IAliasController } from '@core/api/widget-api.models';
|
||||||
import { LayoutType, LayoutWidthType } from "@home/components/dashboard-page/layout/layout.models";
|
import { MatButton } from '@angular/material/button';
|
||||||
|
import { VersionControlComponent } from '@home/components/vc/version-control.component';
|
||||||
|
import { TbPopoverService } from '@shared/components/popover.service';
|
||||||
|
import { tap } from 'rxjs/operators';
|
||||||
|
import { LayoutWidthType } from "@home/components/dashboard-page/layout/layout.models";
|
||||||
|
|
||||||
// @dynamic
|
// @dynamic
|
||||||
@Component({
|
@Component({
|
||||||
@ -292,6 +296,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
updateBreadcrumbs = new EventEmitter();
|
||||||
|
|
||||||
private rxSubscriptions = new Array<Subscription>();
|
private rxSubscriptions = new Array<Subscription>();
|
||||||
|
|
||||||
get toolbarOpened(): boolean {
|
get toolbarOpened(): boolean {
|
||||||
@ -331,6 +337,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
|
|||||||
private fb: FormBuilder,
|
private fb: FormBuilder,
|
||||||
private dialog: MatDialog,
|
private dialog: MatDialog,
|
||||||
private translate: TranslateService,
|
private translate: TranslateService,
|
||||||
|
private popoverService: TbPopoverService,
|
||||||
|
private renderer: Renderer2,
|
||||||
private ngZone: NgZone,
|
private ngZone: NgZone,
|
||||||
@Optional() @Inject('embeddedValue') private embeddedValue,
|
@Optional() @Inject('embeddedValue') private embeddedValue,
|
||||||
private overlay: Overlay,
|
private overlay: Overlay,
|
||||||
@ -653,15 +661,15 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public mainLayoutWidth(): string {
|
public mainLayoutWidth(): string {
|
||||||
if (this.isEditingWidget && this.editingLayoutCtx.id === LayoutType.MAIN) {
|
if (this.isEditingWidget && this.editingLayoutCtx.id === 'main') {
|
||||||
return '100%';
|
return '100%';
|
||||||
} else {
|
} else {
|
||||||
return this.layouts.right.show && !this.isMobile ? this.calculateWidth(LayoutType.MAIN) : '100%';
|
return this.layouts.right.show && !this.isMobile ? this.calculateWidth('main') : '100%';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public mainLayoutHeight(): string {
|
public mainLayoutHeight(): string {
|
||||||
if (!this.isEditingWidget || this.editingLayoutCtx.id === LayoutType.MAIN) {
|
if (!this.isEditingWidget || this.editingLayoutCtx.id === 'main') {
|
||||||
return '100%';
|
return '100%';
|
||||||
} else {
|
} else {
|
||||||
return '0px';
|
return '0px';
|
||||||
@ -669,10 +677,10 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public rightLayoutWidth(): string {
|
public rightLayoutWidth(): string {
|
||||||
if (this.isEditingWidget && this.editingLayoutCtx.id === LayoutType.RIGHT) {
|
if (this.isEditingWidget && this.editingLayoutCtx.id === 'right') {
|
||||||
return '100%';
|
return '100%';
|
||||||
} else {
|
} else {
|
||||||
return this.isMobile ? '100%' : this.calculateWidth(LayoutType.RIGHT);
|
return this.isMobile ? '100%' : this.calculateWidth('right');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -689,7 +697,7 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
|
|||||||
}
|
}
|
||||||
if (layoutDimension) {
|
if (layoutDimension) {
|
||||||
if (layoutDimension.type === LayoutWidthType.PERCENTAGE) {
|
if (layoutDimension.type === LayoutWidthType.PERCENTAGE) {
|
||||||
if (layout === LayoutType.RIGHT) {
|
if (layout === 'right') {
|
||||||
return (100 - layoutDimension.leftWidthPercentage) + '%';
|
return (100 - layoutDimension.leftWidthPercentage) + '%';
|
||||||
} else {
|
} else {
|
||||||
return layoutDimension.leftWidthPercentage + '%';
|
return layoutDimension.leftWidthPercentage + '%';
|
||||||
@ -1432,4 +1440,52 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleVersionControl($event: Event, versionControlButton: MatButton) {
|
||||||
|
if ($event) {
|
||||||
|
$event.stopPropagation();
|
||||||
|
}
|
||||||
|
const trigger = versionControlButton._elementRef.nativeElement;
|
||||||
|
if (this.popoverService.hasPopover(trigger)) {
|
||||||
|
this.popoverService.hidePopover(trigger);
|
||||||
|
} else {
|
||||||
|
const versionControlPopover = this.popoverService.displayPopover(trigger, this.renderer,
|
||||||
|
this.viewContainerRef, VersionControlComponent, 'leftTop', true, null,
|
||||||
|
{
|
||||||
|
detailsMode: true,
|
||||||
|
active: true,
|
||||||
|
singleEntityMode: true,
|
||||||
|
externalEntityId: this.dashboard.externalId || this.dashboard.id,
|
||||||
|
entityId: this.dashboard.id,
|
||||||
|
entityName: this.dashboard.name,
|
||||||
|
onBeforeCreateVersion: () => {
|
||||||
|
return this.dashboardService.saveDashboard(this.dashboard).pipe(
|
||||||
|
tap((dashboard) => {
|
||||||
|
this.dashboard = this.dashboardUtils.validateAndUpdateDashboard(dashboard);
|
||||||
|
this.prevDashboard = deepClone(this.dashboard);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}, {}, {}, {}, true);
|
||||||
|
versionControlPopover.tbComponentRef.instance.popoverComponent = versionControlPopover;
|
||||||
|
versionControlPopover.tbComponentRef.instance.versionRestored.subscribe(() => {
|
||||||
|
this.dashboardService.getDashboard(this.currentDashboardId).subscribe((dashboard) => {
|
||||||
|
dashboard = this.dashboardUtils.validateAndUpdateDashboard(dashboard);
|
||||||
|
const data = {
|
||||||
|
dashboard,
|
||||||
|
widgetEditMode: false,
|
||||||
|
currentDashboardId: this.currentDashboardId
|
||||||
|
} as any;
|
||||||
|
this.init(data);
|
||||||
|
this.dashboardCtx.stateController.cleanupPreservedStates();
|
||||||
|
this.dashboardCtx.stateController.resetState();
|
||||||
|
this.setEditMode(true, false);
|
||||||
|
this.updateBreadcrumbs.emit();
|
||||||
|
this.ngZone.run(() => {
|
||||||
|
this.cd.detectChanges();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,8 +28,3 @@ export enum LayoutWidthType {
|
|||||||
FIXED = "fixed"
|
FIXED = "fixed"
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LayoutType {
|
|
||||||
MAIN = "main",
|
|
||||||
RIGHT = "right",
|
|
||||||
LEFT = "left"
|
|
||||||
}
|
|
||||||
|
|||||||
@ -38,30 +38,31 @@
|
|||||||
</mat-checkbox>
|
</mat-checkbox>
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column" fxLayoutAlign="start center" fxLayoutGap="8px">
|
<div fxLayout="column" fxLayoutAlign="start center" fxLayoutGap="8px">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="8px" style="width: 100%;">
|
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="2%" style="width: 100%;">
|
||||||
<button fxFlex="{{buttonFlexValue()}}"
|
<button fxFlex="{{buttonFlexValue()}}"
|
||||||
type="button"
|
type="button"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
class="tb-layout-button"
|
class="tb-layout-button"
|
||||||
(click)="openLayoutSettings(LayoutType.MAIN)"
|
(click)="openLayoutSettings('main')"
|
||||||
>
|
>
|
||||||
<span >{{ (layoutsFormGroup.value.right ? 'layout.left' : 'layout.main') | translate }}</span>
|
<span >{{ (layoutsFormGroup.value.right ? 'layout.left' : 'layout.main') | translate }}</span>
|
||||||
</button>
|
</button>
|
||||||
<button fxFlex
|
<button fxFlex
|
||||||
[fxShow]="layoutsFormGroup.get(LayoutType.RIGHT).value"
|
[fxShow]="layoutsFormGroup.get('right').value"
|
||||||
type="button"
|
type="button"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
class="tb-layout-button"
|
class="tb-layout-button"
|
||||||
(click)="openLayoutSettings(LayoutType.RIGHT)">
|
(click)="openLayoutSettings('right')">
|
||||||
<span >{{ 'layout.right' | translate }}</span>
|
<span >{{ 'layout.right' | translate }}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column"
|
<div fxLayout="column"
|
||||||
fxLayoutAlign="start center"
|
fxLayoutAlign="start center"
|
||||||
fxLayoutGap="8px"
|
fxLayoutGap="8px"
|
||||||
[fxShow]="layoutsFormGroup.get(LayoutType.RIGHT).value">
|
style="width: 100%;"
|
||||||
|
[fxShow]="layoutsFormGroup.get('right').value">
|
||||||
<mat-button-toggle-group aria-label="Select width value type"
|
<mat-button-toggle-group aria-label="Select width value type"
|
||||||
formControlName="type"
|
formControlName="type"
|
||||||
style="width: 100%;">
|
style="width: 100%;">
|
||||||
@ -72,9 +73,8 @@
|
|||||||
{{ 'layout.fixed-width' | translate }}
|
{{ 'layout.fixed-width' | translate }}
|
||||||
</mat-button-toggle>
|
</mat-button-toggle>
|
||||||
</mat-button-toggle-group>
|
</mat-button-toggle-group>
|
||||||
<div [fxShow]="layoutsFormGroup.get('type').value === LayoutWidthType.PERCENTAGE">
|
<div [fxShow]="layoutsFormGroup.get('type').value === LayoutWidthType.PERCENTAGE" style="width: 100%;">
|
||||||
<div
|
<div fxLayoutAlign="start center"
|
||||||
fxLayoutAlign="start center"
|
|
||||||
fxLayoutGap="8px"
|
fxLayoutGap="8px"
|
||||||
style="width: 100%;">
|
style="width: 100%;">
|
||||||
<mat-slider min="10"
|
<mat-slider min="10"
|
||||||
@ -86,11 +86,10 @@
|
|||||||
[value]="layoutsFormGroup.get('leftWidthPercentage').value"
|
[value]="layoutsFormGroup.get('leftWidthPercentage').value"
|
||||||
[displayWith]="formatSliderTooltipLabel">
|
[displayWith]="formatSliderTooltipLabel">
|
||||||
</mat-slider>
|
</mat-slider>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div fxLayout="column">
|
<div fxFlex fxLayout="column" style="width: 100%;">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="8px" style="width: 100%;">
|
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="8px" style="width: 100%;">
|
||||||
<mat-form-field class="mat-block">
|
<mat-form-field fxFlex class="mat-block">
|
||||||
<mat-label>{{ 'layout.left-width' | translate }}</mat-label>
|
<mat-label>{{ 'layout.left-width' | translate }}</mat-label>
|
||||||
<input matInput
|
<input matInput
|
||||||
formControlName="leftWidthPercentage"
|
formControlName="leftWidthPercentage"
|
||||||
@ -99,6 +98,15 @@
|
|||||||
step="1"
|
step="1"
|
||||||
min="10"
|
min="10"
|
||||||
max="90">
|
max="90">
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('leftWidthPercentage').hasError('required')">
|
||||||
|
{{ 'layout.left-width-percentage-required' | translate }}
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('leftWidthPercentage').hasError('max')">
|
||||||
|
{{ 'layout.value-max-error' | translate: { max: 90 } }}
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('leftWidthPercentage').hasError('min')">
|
||||||
|
{{ 'layout.value-min-error' | translate: { min: 10 } }}
|
||||||
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field fxFlex class="mat-block">
|
<mat-form-field fxFlex class="mat-block">
|
||||||
<mat-label>{{ 'layout.right-width' | translate }}</mat-label>
|
<mat-label>{{ 'layout.right-width' | translate }}</mat-label>
|
||||||
@ -108,6 +116,15 @@
|
|||||||
step="1"
|
step="1"
|
||||||
min="10"
|
min="10"
|
||||||
max="90">
|
max="90">
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('rightWidthPercentage').hasError('required')">
|
||||||
|
{{ 'layout.right-width-percentage-required' | translate }}
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('rightWidthPercentage').hasError('max')">
|
||||||
|
{{ 'layout.value-max-error' | translate: { max: 90 } }}
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('rightWidthPercentage').hasError('min')">
|
||||||
|
{{ 'layout.value-min-error' | translate: { min: 10 } }}
|
||||||
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
<label class="tb-hint">{{'layout.layout-min-max' | translate: { min: 10, max: 90, units: "%" } }}</label>
|
<label class="tb-hint">{{'layout.layout-min-max' | translate: { min: 10, max: 90, units: "%" } }}</label>
|
||||||
@ -115,8 +132,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div [fxShow]="layoutsFormGroup.get('type').value === LayoutWidthType.FIXED"
|
<div [fxShow]="layoutsFormGroup.get('type').value === LayoutWidthType.FIXED"
|
||||||
fxLayout="column"
|
fxLayout="column"
|
||||||
|
style="width: 100%;"
|
||||||
fxLayoutAlign="start center">
|
fxLayoutAlign="start center">
|
||||||
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="8px" class="tb-layout-fixed-container">
|
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="8px" class="tb-layout-fixed-container" style="width: 100%;">
|
||||||
<label>{{ 'layout.pick-fixed-side' | translate }}</label>
|
<label>{{ 'layout.pick-fixed-side' | translate }}</label>
|
||||||
<mat-radio-group aria-label="Select side"
|
<mat-radio-group aria-label="Select side"
|
||||||
formControlName="fixedLayout"
|
formControlName="fixedLayout"
|
||||||
@ -139,8 +157,16 @@
|
|||||||
type="number"
|
type="number"
|
||||||
step="1"
|
step="1"
|
||||||
min="150"
|
min="150"
|
||||||
max="1700"
|
max="1700">
|
||||||
required>
|
<mat-error *ngIf="layoutsFormGroup.get('fixedWidth').hasError('required')">
|
||||||
|
{{ 'layout.layout-fixed-width-required' | translate }}
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('fixedWidth').hasError('max')">
|
||||||
|
{{ 'layout.value-max-error' | translate: { max: 1700 } }}
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="layoutsFormGroup.get('fixedWidth').hasError('min')">
|
||||||
|
{{ 'layout.value-min-error' | translate: { min: 150 } }}
|
||||||
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<label class="tb-hint">{{ 'layout.layout-min-max' | translate: {min: 150, max: 1700, units: "px" } }}</label>
|
<label class="tb-hint">{{ 'layout.layout-min-max' | translate: {min: 150, max: 1700, units: "px" } }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
/// limitations under the License.
|
/// limitations under the License.
|
||||||
///
|
///
|
||||||
|
|
||||||
import { ChangeDetectorRef, Component, Inject, OnInit, SkipSelf} from '@angular/core';
|
import { Component, Inject, OnInit, SkipSelf} from '@angular/core';
|
||||||
import { ErrorStateMatcher } from '@angular/material/core';
|
import { ErrorStateMatcher } from '@angular/material/core';
|
||||||
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
@ -31,7 +31,8 @@ import {
|
|||||||
DashboardSettingsDialogComponent,
|
DashboardSettingsDialogComponent,
|
||||||
DashboardSettingsDialogData
|
DashboardSettingsDialogData
|
||||||
} from '@home/components/dashboard-page/dashboard-settings-dialog.component';
|
} from '@home/components/dashboard-page/dashboard-settings-dialog.component';
|
||||||
import { LayoutType, LayoutWidthType } from "@home/components/dashboard-page/layout/layout.models";
|
import { LayoutWidthType } from "@home/components/dashboard-page/layout/layout.models";
|
||||||
|
import { Subscription } from "rxjs";
|
||||||
|
|
||||||
export interface ManageDashboardLayoutsDialogData {
|
export interface ManageDashboardLayoutsDialogData {
|
||||||
layouts: DashboardStateLayouts;
|
layouts: DashboardStateLayouts;
|
||||||
@ -52,7 +53,7 @@ export class ManageDashboardLayoutsDialogComponent extends DialogComponent<Manag
|
|||||||
|
|
||||||
LayoutWidthType = LayoutWidthType;
|
LayoutWidthType = LayoutWidthType;
|
||||||
|
|
||||||
LayoutType = LayoutType;
|
subscriptions: Array<Subscription>;
|
||||||
|
|
||||||
submitted = false;
|
submitted = false;
|
||||||
|
|
||||||
@ -65,19 +66,18 @@ export class ManageDashboardLayoutsDialogComponent extends DialogComponent<Manag
|
|||||||
private utils: UtilsService,
|
private utils: UtilsService,
|
||||||
private dashboardUtils: DashboardUtilsService,
|
private dashboardUtils: DashboardUtilsService,
|
||||||
private translate: TranslateService,
|
private translate: TranslateService,
|
||||||
private dialog: MatDialog,
|
private dialog: MatDialog) {
|
||||||
private cd: ChangeDetectorRef) {
|
|
||||||
super(store, router, dialogRef);
|
super(store, router, dialogRef);
|
||||||
|
|
||||||
this.layouts = this.data.layouts;
|
this.layouts = this.data.layouts;
|
||||||
this.layoutsFormGroup = this.fb.group({
|
this.layoutsFormGroup = this.fb.group({
|
||||||
main: [{value: isDefined(this.layouts.main), disabled: true}, []],
|
main: [{value: isDefined(this.layouts.main), disabled: true}, []],
|
||||||
right: [isDefined(this.layouts.right), []],
|
right: [isDefined(this.layouts.right), []],
|
||||||
leftWidthPercentage: [50, [Validators.min(10), Validators.max(90)]],
|
leftWidthPercentage: [50, [Validators.min(10), Validators.max(90), Validators.required]],
|
||||||
rightWidthPercentage: [50, [Validators.min(10), Validators.max(90)]],
|
rightWidthPercentage: [50, [Validators.min(10), Validators.max(90), Validators.required]],
|
||||||
type: [LayoutWidthType.PERCENTAGE, []],
|
type: [LayoutWidthType.PERCENTAGE, []],
|
||||||
fixedWidth: [150, [Validators.min(150), Validators.max(1700)]],
|
fixedWidth: [150, [Validators.min(150), Validators.max(1700), Validators.required]],
|
||||||
fixedLayout: [LayoutType.MAIN, []]
|
fixedLayout: ['main', []]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -99,20 +99,29 @@ export class ManageDashboardLayoutsDialogComponent extends DialogComponent<Manag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.layouts[LayoutType.MAIN]) {
|
if (!this.layouts['main']) {
|
||||||
this.layouts[LayoutType.MAIN] = this.dashboardUtils.createDefaultLayoutData();
|
this.layouts['main'] = this.dashboardUtils.createDefaultLayoutData();
|
||||||
}
|
}
|
||||||
if (!this.layouts[LayoutType.RIGHT]) {
|
if (!this.layouts['right']) {
|
||||||
this.layouts[LayoutType.RIGHT] = this.dashboardUtils.createDefaultLayoutData();
|
this.layouts['right'] = this.dashboardUtils.createDefaultLayoutData();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.layoutsFormGroup.get('leftWidthPercentage').valueChanges.subscribe((value) => this.layoutControlChange('rightWidthPercentage', value));
|
const leftWidthPercentageSub = this.layoutsFormGroup.get('leftWidthPercentage').valueChanges
|
||||||
this.layoutsFormGroup.get('rightWidthPercentage').valueChanges.subscribe((value) => this.layoutControlChange('leftWidthPercentage', value));
|
.subscribe((value) => this.layoutControlChange('rightWidthPercentage', value));
|
||||||
|
const rightWidthPercentageSub = this.layoutsFormGroup.get('rightWidthPercentage').valueChanges
|
||||||
|
.subscribe((value) => this.layoutControlChange('leftWidthPercentage', value));
|
||||||
|
this.subscriptions = [leftWidthPercentageSub, rightWidthPercentageSub];
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
for (let subscription of this.subscriptions) {
|
||||||
|
subscription.unsubscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
|
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
|
||||||
const originalErrorState = this.errorStateMatcher.isErrorState(control, form);
|
const originalErrorState = this.errorStateMatcher.isErrorState(control, form);
|
||||||
const customErrorState = !!(control && control.invalid && this.submitted);
|
const customErrorState = !!(control && control.invalid && this.submitted);
|
||||||
@ -143,7 +152,8 @@ export class ManageDashboardLayoutsDialogComponent extends DialogComponent<Manag
|
|||||||
|
|
||||||
save(): void {
|
save(): void {
|
||||||
this.submitted = true;
|
this.submitted = true;
|
||||||
for (const l of Object.keys(this.layoutsFormGroup.controls)) {
|
const layouts = ['main', 'right'];
|
||||||
|
for (const l of layouts) {
|
||||||
const control = this.layoutsFormGroup.controls[l];
|
const control = this.layoutsFormGroup.controls[l];
|
||||||
if (!control.value) {
|
if (!control.value) {
|
||||||
if (this.layouts[l]) {
|
if (this.layouts[l]) {
|
||||||
@ -165,7 +175,7 @@ export class ManageDashboardLayoutsDialogComponent extends DialogComponent<Manag
|
|||||||
} else {
|
} else {
|
||||||
layoutDimension.fixedWidth = formValues.fixedWidth;
|
layoutDimension.fixedWidth = formValues.fixedWidth;
|
||||||
layoutDimension.fixedLayout = formValues.fixedLayout;
|
layoutDimension.fixedLayout = formValues.fixedLayout;
|
||||||
if (formValues.fixedLayout === LayoutType.MAIN) {
|
if (formValues.fixedLayout === 'main') {
|
||||||
this.layouts.main.gridSettings.layoutDimension = layoutDimension;
|
this.layouts.main.gridSettings.layoutDimension = layoutDimension;
|
||||||
} else {
|
} else {
|
||||||
this.layouts.right.gridSettings.layoutDimension = layoutDimension;
|
this.layouts.right.gridSettings.layoutDimension = layoutDimension;
|
||||||
@ -177,7 +187,7 @@ export class ManageDashboardLayoutsDialogComponent extends DialogComponent<Manag
|
|||||||
|
|
||||||
buttonFlexValue(): number {
|
buttonFlexValue(): number {
|
||||||
if (this.layoutsFormGroup.get('right').value && this.layoutsFormGroup.value.type !== LayoutWidthType.FIXED) {
|
if (this.layoutsFormGroup.get('right').value && this.layoutsFormGroup.value.type !== LayoutWidthType.FIXED) {
|
||||||
return this.layoutsFormGroup.get('leftWidthPercentage').value;
|
return this.layoutsFormGroup.get('leftWidthPercentage').value - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,9 @@
|
|||||||
"read-more": "Read more",
|
"read-more": "Read more",
|
||||||
"hide": "Hide",
|
"hide": "Hide",
|
||||||
"done": "Done",
|
"done": "Done",
|
||||||
"print": "Print"
|
"print": "Print",
|
||||||
|
"restore": "Restore",
|
||||||
|
"confirm": "Confirm"
|
||||||
},
|
},
|
||||||
"aggregation": {
|
"aggregation": {
|
||||||
"aggregation": "Aggregation",
|
"aggregation": "Aggregation",
|
||||||
@ -322,6 +324,30 @@
|
|||||||
"queue-submit-strategy": "Submit strategy",
|
"queue-submit-strategy": "Submit strategy",
|
||||||
"queue-processing-strategy": "Processing strategy",
|
"queue-processing-strategy": "Processing strategy",
|
||||||
"queue-configuration": "Queue configuration",
|
"queue-configuration": "Queue configuration",
|
||||||
|
"repository-settings": "Repository settings",
|
||||||
|
"repository-url": "Repository URL",
|
||||||
|
"repository-url-required": "Repository URL is required.",
|
||||||
|
"default-branch": "Default branch name",
|
||||||
|
"authentication-settings": "Authentication settings",
|
||||||
|
"auth-method": "Authentication method",
|
||||||
|
"auth-method-username-password": "Password / access token",
|
||||||
|
"auth-method-private-key": "Private key",
|
||||||
|
"password-access-token": "Password / access token",
|
||||||
|
"change-password-access-token": "Change password / access token",
|
||||||
|
"private-key": "Private key",
|
||||||
|
"drop-private-key-file-or": "Drag and drop a private key file or",
|
||||||
|
"passphrase": "Passphrase",
|
||||||
|
"enter-passphrase": "Enter passphrase",
|
||||||
|
"change-passphrase": "Change passphrase",
|
||||||
|
"check-access": "Check access",
|
||||||
|
"check-repository-access-success": "Repository access successfully verified!",
|
||||||
|
"delete-repository-settings-title": "Are you sure you want to delete repository settings?",
|
||||||
|
"delete-repository-settings-text": "Be careful, after the confirmation the repository settings will be removed and version control feature will be unavailable.",
|
||||||
|
"auto-commit-settings": "Auto-commit settings",
|
||||||
|
"auto-commit-entities": "Auto-commit entities",
|
||||||
|
"no-auto-commit-entities-prompt": "No entities configured for auto-commit",
|
||||||
|
"delete-auto-commit-settings-title": "Are you sure you want to delete auto-commit settings?",
|
||||||
|
"delete-auto-commit-settings-text": "Be careful, after the confirmation the auto-commit settings will be removed and auto-commit will be disabled for all entities.",
|
||||||
"2fa": {
|
"2fa": {
|
||||||
"2fa": "Two-factor authentication",
|
"2fa": "Two-factor authentication",
|
||||||
"available-providers": "Available providers",
|
"available-providers": "Available providers",
|
||||||
@ -1819,6 +1845,9 @@
|
|||||||
"type-current-tenant": "Current Tenant",
|
"type-current-tenant": "Current Tenant",
|
||||||
"type-current-user": "Current User",
|
"type-current-user": "Current User",
|
||||||
"type-current-user-owner": "Current User Owner",
|
"type-current-user-owner": "Current User Owner",
|
||||||
|
"type-widgets-bundle": "Widgets bundle",
|
||||||
|
"type-widgets-bundles": "Widgets bundles",
|
||||||
|
"list-of-widgets-bundles": "{ count, plural, 1 {One widgets bundle} other {List of # widget bundles} }",
|
||||||
"search": "Search entities",
|
"search": "Search entities",
|
||||||
"selected-entities": "{ count, plural, 1 {1 entity} other {# entities} } selected",
|
"selected-entities": "{ count, plural, 1 {1 entity} other {# entities} } selected",
|
||||||
"entity-name": "Entity name",
|
"entity-name": "Entity name",
|
||||||
@ -2470,7 +2499,12 @@
|
|||||||
"right-width": "Right column (%)",
|
"right-width": "Right column (%)",
|
||||||
"pick-fixed-side": "Fixed side: ",
|
"pick-fixed-side": "Fixed side: ",
|
||||||
"layout-fixed-width": "Fixed width (px)",
|
"layout-fixed-width": "Fixed width (px)",
|
||||||
"layout-min-max": "Minimum width: {{min}}{{units}}, maximum width: {{max}}{{units}}"
|
"layout-min-max": "Minimum width: {{min}}{{units}}, maximum width: {{max}}{{units}}",
|
||||||
|
"value-min-error": "Value must be more then {{min}}",
|
||||||
|
"value-max-error": "Value must be less then {{max}}",
|
||||||
|
"layout-fixed-width-required": "Fixed width is required",
|
||||||
|
"right-width-percentage-required": "Right percentage is required",
|
||||||
|
"left-width-percentage-required": "Left percentage is required"
|
||||||
},
|
},
|
||||||
"legend": {
|
"legend": {
|
||||||
"direction": "Legend direction",
|
"direction": "Legend direction",
|
||||||
@ -2480,11 +2514,13 @@
|
|||||||
"show-min": "Show min value",
|
"show-min": "Show min value",
|
||||||
"show-avg": "Show average value",
|
"show-avg": "Show average value",
|
||||||
"show-total": "Show total value",
|
"show-total": "Show total value",
|
||||||
|
"show-latest": "Show latest value",
|
||||||
"settings": "Legend settings",
|
"settings": "Legend settings",
|
||||||
"min": "min",
|
"min": "min",
|
||||||
"max": "max",
|
"max": "max",
|
||||||
"avg": "avg",
|
"avg": "avg",
|
||||||
"total": "total",
|
"total": "total",
|
||||||
|
"latest": "latest",
|
||||||
"comparison-time-ago": {
|
"comparison-time-ago": {
|
||||||
"previousInterval": "(previous interval)",
|
"previousInterval": "(previous interval)",
|
||||||
"customInterval": "(custom interval)",
|
"customInterval": "(custom interval)",
|
||||||
@ -2900,11 +2936,13 @@
|
|||||||
},
|
},
|
||||||
"queue": {
|
"queue": {
|
||||||
"queue-name": "Queue",
|
"queue-name": "Queue",
|
||||||
|
"no-queues-found": "No queues found.",
|
||||||
"no-queues-matching": "No queues matching '{{queue}}' were found.",
|
"no-queues-matching": "No queues matching '{{queue}}' were found.",
|
||||||
"select-name": "Select queue name",
|
"select-name": "Select queue name",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name-required": "Queue name is required!",
|
"name-required": "Queue name is required!",
|
||||||
"name-unique": "Queue name is not unique!",
|
"name-unique": "Queue name is not unique!",
|
||||||
|
"name-pattern": "Queue name contains a character other than ASCII alphanumerics, '.', '_' and '-'!",
|
||||||
"queue-required": "Queue is required!",
|
"queue-required": "Queue is required!",
|
||||||
"topic-required": "Queue topic is required!",
|
"topic-required": "Queue topic is required!",
|
||||||
"poll-interval-required": "Poll interval is required!",
|
"poll-interval-required": "Poll interval is required!",
|
||||||
@ -2936,18 +2974,25 @@
|
|||||||
"add" : "Add queue",
|
"add" : "Add queue",
|
||||||
"details": "Queue details",
|
"details": "Queue details",
|
||||||
"topic": "Topic",
|
"topic": "Topic",
|
||||||
"submit-strategy": "Submit Strategy",
|
"submit-settings": "Submit settings",
|
||||||
"processing-strategy": "Processing Strategy",
|
"submit-strategy": "Strategy type *",
|
||||||
|
"grouping-parameter": "Grouping parameter",
|
||||||
|
"processing-settings": "Retries processing settings",
|
||||||
|
"processing-strategy": "Processing type *",
|
||||||
|
"retries-settings": "Retries settings",
|
||||||
|
"polling-settings": "Polling settings",
|
||||||
|
"batch-processing": "Batch processing",
|
||||||
"poll-interval": "Poll interval",
|
"poll-interval": "Poll interval",
|
||||||
"partitions": "Partitions",
|
"partitions": "Partitions",
|
||||||
"consumer-per-partition": "Consumer per partition",
|
"immediate-processing": "Immediate processing",
|
||||||
|
"consumer-per-partition": "Send message poll for each consumer",
|
||||||
"consumer-per-partition-hint": "Enable separate consumer(s) per each partition",
|
"consumer-per-partition-hint": "Enable separate consumer(s) per each partition",
|
||||||
"processing-timeout": "Processing timeout, ms",
|
"processing-timeout": "Processing within, ms",
|
||||||
"batch-size": "Batch size",
|
"batch-size": "Batch size",
|
||||||
"retries": "Retries (0 - unlimited)",
|
"retries": "Number of retries (0 – unlimited)",
|
||||||
"failure-percentage": "Failure Percentage",
|
"failure-percentage": "Percentage of failure messages for skipping retries",
|
||||||
"pause-between-retries": "Pause between retries",
|
"pause-between-retries": "Retry within, sec",
|
||||||
"max-pause-between-retries": "Maximal pause between retries",
|
"max-pause-between-retries": "Additional retry within, sec",
|
||||||
"delete": "Delete queue",
|
"delete": "Delete queue",
|
||||||
"copyId": "Copy queue Id",
|
"copyId": "Copy queue Id",
|
||||||
"idCopiedMessage": "Queue Id has been copied to clipboard",
|
"idCopiedMessage": "Queue Id has been copied to clipboard",
|
||||||
@ -2979,6 +3024,19 @@
|
|||||||
"retry-failed-and-timeout-hint": "Retry all failed and timed-out messages from processing pack"
|
"retry-failed-and-timeout-hint": "Retry all failed and timed-out messages from processing pack"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"server-error": {
|
||||||
|
"general": "General server error",
|
||||||
|
"authentication": "Authentication error",
|
||||||
|
"jwt-token-expired": "JWT token expired",
|
||||||
|
"tenant-trial-expired": "Tenant trial expired",
|
||||||
|
"credentials-expired": "Credentials expired",
|
||||||
|
"permission-denied": "Permission denied",
|
||||||
|
"invalid-arguments": "Invalid arguments",
|
||||||
|
"bad-request-params": "Bad request params",
|
||||||
|
"item-not-found": "Item not found",
|
||||||
|
"too-many-requests": "Too many requests",
|
||||||
|
"too-many-updates": "Too many updates"
|
||||||
|
},
|
||||||
"tenant": {
|
"tenant": {
|
||||||
"tenant": "Tenant",
|
"tenant": "Tenant",
|
||||||
"tenants": "Tenants",
|
"tenants": "Tenants",
|
||||||
@ -3008,9 +3066,7 @@
|
|||||||
"tenant-required": "Tenant is required",
|
"tenant-required": "Tenant is required",
|
||||||
"search": "Search tenants",
|
"search": "Search tenants",
|
||||||
"selected-tenants": "{ count, plural, 1 {1 tenant} other {# tenants} } selected",
|
"selected-tenants": "{ count, plural, 1 {1 tenant} other {# tenants} } selected",
|
||||||
"isolated-tb-core": "Processing in isolated ThingsBoard Core container",
|
|
||||||
"isolated-tb-rule-engine": "Processing in isolated ThingsBoard Rule Engine container",
|
"isolated-tb-rule-engine": "Processing in isolated ThingsBoard Rule Engine container",
|
||||||
"isolated-tb-core-details": "Requires separate microservice(s) per isolated Tenant",
|
|
||||||
"isolated-tb-rule-engine-details": "Requires separate microservice(s) per isolated Tenant"
|
"isolated-tb-rule-engine-details": "Requires separate microservice(s) per isolated Tenant"
|
||||||
},
|
},
|
||||||
"tenant-profile": {
|
"tenant-profile": {
|
||||||
@ -3049,75 +3105,101 @@
|
|||||||
"export-failed-error": "Unable to export tenant profile: {{error}}",
|
"export-failed-error": "Unable to export tenant profile: {{error}}",
|
||||||
"tenant-profile-file": "Tenant profile file",
|
"tenant-profile-file": "Tenant profile file",
|
||||||
"invalid-tenant-profile-file-error": "Unable to import tenant profile: Invalid tenant profile data structure.",
|
"invalid-tenant-profile-file-error": "Unable to import tenant profile: Invalid tenant profile data structure.",
|
||||||
"maximum-devices": "Maximum number of devices (0 - unlimited)",
|
"advanced-settings": "Advanced settings",
|
||||||
"maximum-devices-required": "Maximum number of devices is required.",
|
"entities": "Entities",
|
||||||
"maximum-devices-range": "Minimum number of devices can't be negative",
|
"rule-engine": "Rule Engine",
|
||||||
"maximum-assets": "Maximum number of assets (0 - unlimited)",
|
"time-to-live": "Time-to-live",
|
||||||
"maximum-assets-required": "Maximum number of assets is required.",
|
"alarms-and-notifications": "Alarms and notifications",
|
||||||
"maximum-assets-range": "Maximum number of assets can't be negative",
|
"ota-files-in-bytes": "OTA files in bytes",
|
||||||
"maximum-customers": "Maximum number of customers (0 - unlimited)",
|
"ws-title": "WS",
|
||||||
"maximum-customers-required": "Maximum number of customers is required.",
|
"unlimited": "(0 - unlimited)",
|
||||||
"maximum-customers-range": "Maximum number of customers can't be negative",
|
"maximum-devices": "Devices maximum number",
|
||||||
"maximum-users": "Maximum number of users (0 - unlimited)",
|
"maximum-devices-required": "Devices maximum number is required.",
|
||||||
"maximum-users-required": "Maximum number of users is required.",
|
"maximum-devices-range": "Devices maximum number can't be negative",
|
||||||
"maximum-users-range": "Maximum number of users can't be negative",
|
"maximum-assets": "Assets maximum number",
|
||||||
"maximum-dashboards": "Maximum number of dashboards (0 - unlimited)",
|
"maximum-assets-required": "Assets maximum number is required.",
|
||||||
"maximum-dashboards-required": "Maximum number of dashboards is required.",
|
"maximum-assets-range": "Assets maximum number can't be negative",
|
||||||
"maximum-dashboards-range": "Maximum number of dashboards can't be negative",
|
"maximum-customers": "Customers maximum number",
|
||||||
"maximum-rule-chains": "Maximum number of rule chains (0 - unlimited)",
|
"maximum-customers-required": "Customers maximum number is required.",
|
||||||
"maximum-rule-chains-required": "Maximum number of rule chains is required.",
|
"maximum-customers-range": "Customers maximum number can't be negative",
|
||||||
"maximum-rule-chains-range": "Maximum number of rule chains can't be negative",
|
"maximum-users": "Users maximum number",
|
||||||
"maximum-resources-sum-data-size": "Maximum sum of resource files size in bytes (0 - unlimited)",
|
"maximum-users-required": "Users maximum number is required.",
|
||||||
"maximum-resources-sum-data-size-required": "Maximum sum of resource files size is required.",
|
"maximum-users-range": "Users maximum number can't be negative",
|
||||||
"maximum-resources-sum-data-size-range": "Maximum sum of resource files size can`t be negative",
|
"maximum-dashboards": "Dashboards maximum number",
|
||||||
"maximum-ota-packages-sum-data-size": "Maximum sum of ota package files size in bytes (0 - unlimited)",
|
"maximum-dashboards-required": "Dashboards maximum number is required.",
|
||||||
"maximum-ota-package-sum-data-size-required": "Maximum sum of ota package files size is required.",
|
"maximum-dashboards-range": "Dashboards maximum number can't be negative",
|
||||||
"maximum-ota-package-sum-data-size-range": "Maximum sum of ota package files size can`t be negative",
|
"maximum-rule-chains": "Rule chains maximum number",
|
||||||
"transport-tenant-msg-rate-limit": "Transport tenant messages rate limit.",
|
"maximum-rule-chains-required": "Rule chains maximum number is required.",
|
||||||
"transport-tenant-telemetry-msg-rate-limit": "Transport tenant telemetry messages rate limit.",
|
"maximum-rule-chains-range": "Rule chains maximum number can't be negative",
|
||||||
"transport-tenant-telemetry-data-points-rate-limit": "Transport tenant telemetry data points rate limit.",
|
"maximum-resources-sum-data-size": "Resource files sum size",
|
||||||
"transport-device-msg-rate-limit": "Transport device messages rate limit.",
|
"maximum-resources-sum-data-size-required": "Resource files sum size is required.",
|
||||||
"transport-device-telemetry-msg-rate-limit": "Transport device telemetry messages rate limit.",
|
"maximum-resources-sum-data-size-range": "Resource files sum size can`t be negative",
|
||||||
"transport-device-telemetry-data-points-rate-limit": "Transport device telemetry data points rate limit.",
|
"maximum-ota-packages-sum-data-size": "OTA package files sum size",
|
||||||
"max-transport-messages": "Maximum number of transport messages (0 - unlimited)",
|
"maximum-ota-package-sum-data-size-required": "OTA package files sum size is required.",
|
||||||
"max-transport-messages-required": "Maximum number of transport messages is required.",
|
"maximum-ota-package-sum-data-size-range": "OTA package files sum size can`t be negative",
|
||||||
"max-transport-messages-range": "Maximum number of transport messages can't be negative",
|
"transport-tenant-msg-rate-limit": "Transport tenant messages",
|
||||||
"max-transport-data-points": "Maximum number of transport data points (0 - unlimited)",
|
"transport-tenant-telemetry-msg-rate-limit": "Transport tenant telemetry messages",
|
||||||
"max-transport-data-points-required": "Maximum number of transport data points is required.",
|
"transport-tenant-telemetry-data-points-rate-limit": "Transport tenant telemetry data points",
|
||||||
"max-transport-data-points-range": "Maximum number of transport data points can't be negative",
|
"transport-device-msg-rate-limit": "Transport device messages",
|
||||||
"max-r-e-executions": "Maximum number of Rule Engine executions (0 - unlimited)",
|
"transport-device-telemetry-msg-rate-limit": "Transport device telemetry messages",
|
||||||
"max-r-e-executions-required": "Maximum number of Rule Engine executions is required.",
|
"transport-device-telemetry-data-points-rate-limit": "Transport device telemetry data points",
|
||||||
"max-r-e-executions-range": "Maximum number of Rule Engine executions can't be negative",
|
"tenant-entity-export-rate-limit": "Entity version creation",
|
||||||
"max-j-s-executions": "Maximum number of JavaScript executions (0 - unlimited)",
|
"tenant-entity-import-rate-limit": "Entity version load",
|
||||||
"max-j-s-executions-required": "Maximum number of JavaScript executions is required.",
|
"max-transport-messages": "Transport messages maximum number",
|
||||||
"max-j-s-executions-range": "Maximum number of JavaScript executions can't be negative",
|
"max-transport-messages-required": "Transport messages maximum number is required.",
|
||||||
"max-d-p-storage-days": "Maximum number of data points storage days (0 - unlimited)",
|
"max-transport-messages-range": "Transport messages maximum number can't be negative",
|
||||||
"max-d-p-storage-days-required": "Maximum number of data points storage days is required.",
|
"max-transport-data-points": "Transport data points maximum number ",
|
||||||
"max-d-p-storage-days-range": "Maximum number of data points storage days can't be negative",
|
"max-transport-data-points-required": "Transport data points maximum number is required.",
|
||||||
"default-storage-ttl-days": "Default storage TTL days (0 - unlimited)",
|
"max-transport-data-points-range": "Transport data points maximum number can't be negative",
|
||||||
"default-storage-ttl-days-required": "Default storage TTL days is required.",
|
"max-r-e-executions": "Rule Engine executions maximum number",
|
||||||
"default-storage-ttl-days-range": "Default storage TTL days can't be negative",
|
"max-r-e-executions-required": "Rule Engine executions maximum number is required.",
|
||||||
"alarms-ttl-days": "Alarms TTL days (0 - unlimited)",
|
"max-r-e-executions-range": "Rule Engine executions maximum number can't be negative",
|
||||||
|
"max-j-s-executions": "JavaScript executions maximum number ",
|
||||||
|
"max-j-s-executions-required": "JavaScript executions maximum number is required.",
|
||||||
|
"max-j-s-executions-range": "JavaScript executions maximum number can't be negative",
|
||||||
|
"max-d-p-storage-days": "Data points storage days maximum number",
|
||||||
|
"max-d-p-storage-days-required": "Data points storage days maximum number is required.",
|
||||||
|
"max-d-p-storage-days-range": "Data points storage days maximum number can't be negative",
|
||||||
|
"default-storage-ttl-days": "Storage TTL days by default",
|
||||||
|
"default-storage-ttl-days-required": "Storage TTL days by default is required.",
|
||||||
|
"default-storage-ttl-days-range": "Storage TTL days by default can't be negative",
|
||||||
|
"alarms-ttl-days": "Alarms TTL days",
|
||||||
"alarms-ttl-days-required": "Alarms TTL days required",
|
"alarms-ttl-days-required": "Alarms TTL days required",
|
||||||
"alarms-ttl-days-days-range": "Alarms TTL days can't be negative",
|
"alarms-ttl-days-days-range": "Alarms TTL days can't be negative",
|
||||||
"rpc-ttl-days": "RPC TTL days (0 - unlimited)",
|
"rpc-ttl-days": "RPC TTL days",
|
||||||
"rpc-ttl-days-required": "RPC TTL days required",
|
"rpc-ttl-days-required": "RPC TTL days required",
|
||||||
"rpc-ttl-days-days-range": "RPC TTL days can't be negative",
|
"rpc-ttl-days-days-range": "RPC TTL days can't be negative",
|
||||||
"max-rule-node-executions-per-message": "Maximum number of rule node executions per message (0 - unlimited)",
|
"max-rule-node-executions-per-message": "Rule node per message executions maximum number",
|
||||||
"max-rule-node-executions-per-message-required": "Maximum number of rule node executions per message is required.",
|
"max-rule-node-executions-per-message-required": "MRule node per message executions maximum number is required.",
|
||||||
"max-rule-node-executions-per-message-range": "Maximum number of rule node executions per message can't be negative",
|
"max-rule-node-executions-per-message-range": "Rule node per message executions maximum number can't be negative",
|
||||||
"max-emails": "Maximum number of emails sent (0 - unlimited)",
|
"max-emails": "Emails sent maximum number",
|
||||||
"max-emails-required": "Maximum number of emails sent is required.",
|
"max-emails-required": "Emails sent maximum number is required.",
|
||||||
"max-emails-range": "Maximum number of emails sent can't be negative",
|
"max-emails-range": "Emails sent maximum number can't be negative",
|
||||||
"max-sms": "Maximum number of SMS sent (0 - unlimited)",
|
"max-sms": "SMS sent maximum number",
|
||||||
"max-sms-required": "Maximum number of SMS sent is required.",
|
"max-sms-required": "SMS sent maximum number is required.",
|
||||||
"max-sms-range": "Maximum number of SMS sent can't be negative",
|
"max-sms-range": "SMS sent maximum number can't be negative",
|
||||||
"max-created-alarms": "Maximum number of alarms created (0 - unlimited)",
|
"max-created-alarms": "Alarms created maximum number",
|
||||||
"max-created-alarms-required": "Maximum number of alarms created is required.",
|
"max-created-alarms-required": "Alarms created maximum number is required.",
|
||||||
"max-created-alarms-range": "Maximum number of alarms created can't be negative",
|
"max-created-alarms-range": "Alarms created maximum number be negative",
|
||||||
"no-queue": "No Queue configured",
|
"no-queue": "No Queue configured",
|
||||||
"add-queue": "Add Queue",
|
"add-queue": "Add Queue",
|
||||||
"queues-with-count": "Queues ({{count}})"
|
"queues-with-count": "Queues ({{count}})",
|
||||||
|
"tenant-rest-limits": "REST requests for tenant",
|
||||||
|
"customer-rest-limits": "REST requests for customer",
|
||||||
|
"incorrect-pattern-for-rate-limits": "The format is comma separated pairs of capacity and period (in seconds) with a colon between, e.g. 100:1,2000:60",
|
||||||
|
"too-small-value-zero": "The value must be bigger than 0",
|
||||||
|
"too-small-value-one": "The value must be bigger than 1",
|
||||||
|
"cassandra-tenant-limits-configuration": "Cassandra query for tenant",
|
||||||
|
"ws-limit-max-sessions-per-tenant": "Sessions per tenant maximum number",
|
||||||
|
"ws-limit-max-sessions-per-customer": "Sessions per customer maximum number",
|
||||||
|
"ws-limit-max-sessions-per-regular-user": "Sessions per regular user maximum number",
|
||||||
|
"ws-limit-max-sessions-per-public-user": "Sessions per public user maximum number",
|
||||||
|
"ws-limit-queue-per-session": "Message queue per session maximum size",
|
||||||
|
"ws-limit-max-subscriptions-per-tenant": "Subscriptions per tenant maximum number",
|
||||||
|
"ws-limit-max-subscriptions-per-customer": "Subscriptions per customer maximum number",
|
||||||
|
"ws-limit-max-subscriptions-per-regular-user": "Subscriptions per regular user maximum number",
|
||||||
|
"ws-limit-max-subscriptions-per-public-user": "Subscriptions per public user maximum number",
|
||||||
|
"ws-limit-updates-per-session": "WS updates per session"
|
||||||
},
|
},
|
||||||
"timeinterval": {
|
"timeinterval": {
|
||||||
"seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }",
|
"seconds-interval": "{ seconds, plural, 1 {1 second} other {# seconds} }",
|
||||||
@ -3246,6 +3328,73 @@
|
|||||||
"json-value-invalid": "JSON value has an invalid format",
|
"json-value-invalid": "JSON value has an invalid format",
|
||||||
"json-value-required": "JSON value is required."
|
"json-value-required": "JSON value is required."
|
||||||
},
|
},
|
||||||
|
"version-control": {
|
||||||
|
"version-control": "Version control",
|
||||||
|
"management": "Version control management",
|
||||||
|
"search": "Search versions",
|
||||||
|
"branch": "Branch",
|
||||||
|
"default": "Default",
|
||||||
|
"select-branch": "Select branch",
|
||||||
|
"branch-required": "Branch is required",
|
||||||
|
"create-entity-version": "Create entity version",
|
||||||
|
"version-name": "Version name",
|
||||||
|
"version-name-required": "Version name is required",
|
||||||
|
"author": "Author",
|
||||||
|
"export-relations": "Export relations",
|
||||||
|
"export-attributes": "Export attributes",
|
||||||
|
"export-credentials": "Export credentials",
|
||||||
|
"entity-versions": "Entity versions",
|
||||||
|
"versions": "Versions",
|
||||||
|
"created-time": "Created time",
|
||||||
|
"version-id": "Version ID",
|
||||||
|
"no-entity-versions-text": "No entity versions found",
|
||||||
|
"no-versions-text": "No versions found",
|
||||||
|
"copy-full-version-id": "Copy full version id",
|
||||||
|
"create-version": "Create version",
|
||||||
|
"creating-version": "Creating version... Please wait",
|
||||||
|
"nothing-to-commit": "No changes to commit",
|
||||||
|
"restore-version": "Restore version",
|
||||||
|
"restore-entity-from-version": "Restore entity from version '{{versionName}}'",
|
||||||
|
"restoring-entity-version": "Restoring entity version... Please wait",
|
||||||
|
"load-relations": "Load relations",
|
||||||
|
"load-attributes": "Load attributes",
|
||||||
|
"load-credentials": "Load credentials",
|
||||||
|
"compare-with-current": "Compare with current",
|
||||||
|
"diff-entity-with-version": "Diff with entity version '{{versionName}}'",
|
||||||
|
"previous-difference": "Previous Difference",
|
||||||
|
"next-difference": "Next Difference",
|
||||||
|
"current": "Current",
|
||||||
|
"differences": "{ count, plural, 1 {1 difference} other {# differences} }",
|
||||||
|
"create-entities-version": "Create entities version",
|
||||||
|
"default-sync-strategy": "Default sync strategy",
|
||||||
|
"sync-strategy-merge": "Merge",
|
||||||
|
"sync-strategy-overwrite": "Overwrite",
|
||||||
|
"entities-to-export": "Entities to export",
|
||||||
|
"entities-to-restore": "Entities to restore",
|
||||||
|
"sync-strategy": "Sync strategy",
|
||||||
|
"all-entities": "All entities",
|
||||||
|
"no-entities-to-export-prompt": "Please specify entities to export",
|
||||||
|
"no-entities-to-restore-prompt": "Please specify entities to restore",
|
||||||
|
"add-entity-type": "Add entity type",
|
||||||
|
"remove-all": "Remove all",
|
||||||
|
"version-create-result": "{ added, plural, 0 {No entities} 1 {1 entity} other {# entities} } added.<br/>{ modified, plural, 0 {No entities} 1 {1 entity} other {# entities} } modified.<br/>{ removed, plural, 0 {No entities} 1 {1 entity} other {# entities} } removed.",
|
||||||
|
"remove-other-entities": "Remove other entities",
|
||||||
|
"find-existing-entity-by-name": "Find existing entity by name",
|
||||||
|
"restore-entities-from-version": "Restore entities from version '{{versionName}}'",
|
||||||
|
"restoring-entities-from-version": "Restoring entities... Please wait",
|
||||||
|
"no-entities-restored": "No entities restored",
|
||||||
|
"created": "{{created}} created",
|
||||||
|
"updated": "{{updated}} updated",
|
||||||
|
"deleted": "{{deleted}} deleted",
|
||||||
|
"remove-other-entities-confirm-text": "Be careful! This will permanently <b>delete</b> <b>all</b> current entities<br/>not present in the version you want to restore.<br/><br/>Please type <b>remove other entities</b> to confirm.",
|
||||||
|
"auto-commit-to-branch": "auto-commit to <b>{{ branch }}</b> branch",
|
||||||
|
"default-create-entity-version-name": "{{entityName}} update",
|
||||||
|
"sync-strategy-merge-hint": "Creates or updates selected entities in the repository. All other repository entities are <b>not modified</b>.",
|
||||||
|
"sync-strategy-overwrite-hint": "Creates or updates selected entities in the repository. All other repository entities are <b>deleted</b>.",
|
||||||
|
"device-credentials-conflict": "Failed to load the device with external id <b>{{entityId}}</b><br/>due to the same credentials are already present in the database for another device.<br/>Please consider disabling the <b>load credentials</b> setting in the restore form.",
|
||||||
|
"missing-referenced-entity": "Failed to load the <b>{{sourceEntityTypeName}}</b> with external id <b>{{sourceEntityId}}</b><br/>because it references missing <b>{{targetEntityTypeName}}</b> with id <b>{{targetEntityId}}</b>.",
|
||||||
|
"runtime-failed": "<b>Failed:</b> {{message}}"
|
||||||
|
},
|
||||||
"widget": {
|
"widget": {
|
||||||
"widget-library": "Widgets Library",
|
"widget-library": "Widgets Library",
|
||||||
"widget-bundle": "Widgets Bundle",
|
"widget-bundle": "Widgets Bundle",
|
||||||
@ -4235,6 +4384,7 @@
|
|||||||
"default-map-zoom-level": "Default map zoom level (0 - 20)",
|
"default-map-zoom-level": "Default map zoom level (0 - 20)",
|
||||||
"default-map-center-position": "Default map center position (0,0)",
|
"default-map-center-position": "Default map center position (0,0)",
|
||||||
"disable-scroll-zooming": "Disable scroll zooming",
|
"disable-scroll-zooming": "Disable scroll zooming",
|
||||||
|
"disable-double-click-zooming": "Disable double click zooming",
|
||||||
"disable-zoom-control-buttons": "Disable zoom control buttons",
|
"disable-zoom-control-buttons": "Disable zoom control buttons",
|
||||||
"fit-map-bounds": "Fit map bounds to cover all markers",
|
"fit-map-bounds": "Fit map bounds to cover all markers",
|
||||||
"use-default-map-center-position": "Use default map center position",
|
"use-default-map-center-position": "Use default map center position",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user