|
|
|
@ -25,31 +25,39 @@ |
|
|
|
<mat-icon class="material-icons">close</mat-icon> |
|
|
|
</button> |
|
|
|
</mat-toolbar> |
|
|
|
<form [formGroup]="timewindowForm" class="mat-content"> |
|
|
|
<form [formGroup]="timewindowForm" mat-dialog-content class="timewindow-settings-form mat-content"> |
|
|
|
<mat-tab-group (selectedTabChange)="onTimewindowTypeChange()" [(selectedIndex)]="timewindow.selectedTab"> |
|
|
|
<mat-tab label="{{ 'timewindow.realtime' | translate }}"> |
|
|
|
<div class="tb-flex column"> |
|
|
|
<section class="tb-form-panel stroked"> |
|
|
|
<div class="tb-flex space-between" |
|
|
|
[ngClass]="{'align-end': realtimeTypeSelectionAvailable, 'align-center': !realtimeTypeSelectionAvailable }"> |
|
|
|
<div class="tb-flex column no-flex flex-xs"> |
|
|
|
<div class="tb-form-panel-title">{{ 'timewindow.time-range' | translate }}</div> |
|
|
|
<ng-container formGroupName="realtime" *ngIf="realtimeTypeSelectionAvailable"> |
|
|
|
<tb-toggle-select appearance="fill" [options]="realtimeTimewindowOptions" formControlName="realtimeType"> |
|
|
|
</tb-toggle-select> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
<div class="tb-form-panel-title">{{ 'timewindow.time-range' | translate }}</div> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideInterval"> |
|
|
|
{{ 'timewindow.hide-time-range' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<ng-container formGroupName="realtime" *ngIf="realtimeTypeSelectionAvailable"> |
|
|
|
<tb-toggle-select appearance="stroked" [options]="realtimeTimewindowOptions" formControlName="realtimeType"> |
|
|
|
</tb-toggle-select> |
|
|
|
</ng-container> |
|
|
|
|
|
|
|
<ng-container *ngTemplateOutlet="timezoneSelection"> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
<mat-slide-toggle *ngIf="!quickIntervalOnly && timewindowForm.get('realtime.realtimeType').value === realtimeTypes.LAST_INTERVAL" |
|
|
|
class="mat-slide fixed-title-width" formControlName="hideLastInterval"> |
|
|
|
{{ 'timewindow.hide-last-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<mat-slide-toggle *ngIf="!quickIntervalOnly && timewindowForm.get('realtime.realtimeType').value === realtimeTypes.INTERVAL" |
|
|
|
class="mat-slide fixed-title-width" formControlName="hideQuickInterval"> |
|
|
|
{{ 'timewindow.hide-relative-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
|
|
|
|
<ng-container formGroupName="realtime"> |
|
|
|
<ng-container *ngIf="timewindowForm.get('realtime.realtimeType').value === realtimeTypes.LAST_INTERVAL"> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="disableCustomInterval"> |
|
|
|
{{ 'timewindow.disable-custom-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<tb-timeinterval |
|
|
|
formControlName="timewindowMs" |
|
|
|
subscriptSizing="dynamic" |
|
|
|
appearance="outline" |
|
|
|
[disabledAdvanced]="timewindowForm.get('realtime.disableCustomInterval').value" |
|
|
|
[required]="timewindow.selectedTab === timewindowTypes.REALTIME && |
|
|
|
timewindowForm.get('realtime.realtimeType').value === realtimeTypes.LAST_INTERVAL"> |
|
|
|
</tb-timeinterval> |
|
|
|
@ -70,30 +78,36 @@ |
|
|
|
</section> |
|
|
|
<ng-container *ngTemplateOutlet="aggregationConfig"> |
|
|
|
</ng-container> |
|
|
|
<ng-container *ngTemplateOutlet="timezoneSelectionPanel"> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
</mat-tab> |
|
|
|
<mat-tab label="{{ 'timewindow.history' | translate }}"> |
|
|
|
<div class="tb-flex column"> |
|
|
|
<section class="tb-form-panel stroked"> |
|
|
|
<div class="tb-flex space-between align-end"> |
|
|
|
<div class="tb-flex column no-flex flex-xs"> |
|
|
|
<div class="tb-form-panel-title">{{ 'timewindow.time-range' | translate }}</div> |
|
|
|
<ng-container formGroupName="history"> |
|
|
|
<tb-toggle-select appearance="fill" [options]="historyTimewindowOptions" formControlName="historyType"> |
|
|
|
</tb-toggle-select> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
|
|
|
|
<ng-container *ngTemplateOutlet="timezoneSelection"> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
|
|
|
|
<section class="tb-form-panel stroked"><div class="tb-form-panel-title">{{ 'timewindow.time-range' | translate }}</div> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideInterval"> |
|
|
|
{{ 'timewindow.hide-time-range' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<ng-container formGroupName="history"> |
|
|
|
<tb-toggle-select appearance="stroked" [options]="historyTimewindowOptions" formControlName="historyType"> |
|
|
|
</tb-toggle-select> |
|
|
|
</ng-container> |
|
|
|
<!-- <mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideLastInterval">--> |
|
|
|
<!-- {{ 'timewindow.hide-last-interval' | translate }}--> |
|
|
|
<!-- </mat-slide-toggle>--> |
|
|
|
<!-- <mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideQuickInterval">--> |
|
|
|
<!-- {{ 'timewindow.hide-relative-interval' | translate }}--> |
|
|
|
<!-- </mat-slide-toggle>--> |
|
|
|
<ng-container formGroupName="history"> |
|
|
|
<ng-container *ngIf="timewindowForm.get('history.historyType').value === historyTypes.LAST_INTERVAL"> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="disableCustomInterval"> |
|
|
|
{{ 'timewindow.disable-custom-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<tb-timeinterval |
|
|
|
formControlName="timewindowMs" |
|
|
|
subscriptSizing="dynamic" |
|
|
|
appearance="outline" |
|
|
|
[disabledAdvanced]="timewindowForm.get('history.disableCustomInterval').value" |
|
|
|
[required]="timewindow.selectedTab === timewindowTypes.HISTORY && |
|
|
|
timewindowForm.get('history.historyType').value === historyTypes.LAST_INTERVAL"> |
|
|
|
</tb-timeinterval> |
|
|
|
@ -124,14 +138,19 @@ |
|
|
|
</section> |
|
|
|
<ng-container *ngTemplateOutlet="aggregationConfig"> |
|
|
|
</ng-container> |
|
|
|
<ng-container *ngTemplateOutlet="timezoneSelectionPanel"> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
</mat-tab> |
|
|
|
</mat-tab-group> |
|
|
|
<ng-template #aggregationConfig> |
|
|
|
<div class="tb-flex column"> |
|
|
|
<ng-container formGroupName="aggregation"> |
|
|
|
<section class="tb-form-panel stroked"> |
|
|
|
<div class="tb-form-panel-title">{{ 'aggregation.aggregation' | translate }}</div> |
|
|
|
<div *ngIf="aggregation" class="tb-flex column"> |
|
|
|
<section class="tb-form-panel stroked"> |
|
|
|
<div class="tb-form-panel-title">{{ 'aggregation.aggregation' | translate }}</div> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideAggregation"> |
|
|
|
{{ 'timewindow.hide-aggregation' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<ng-container formGroupName="aggregation"> |
|
|
|
<mat-form-field subscriptSizing="dynamic" appearance="outline"> |
|
|
|
<mat-select formControlName="type"> |
|
|
|
<mat-option *ngFor="let aggregation of aggregations" [value]="aggregation"> |
|
|
|
@ -139,58 +158,80 @@ |
|
|
|
</mat-option> |
|
|
|
</mat-select> |
|
|
|
</mat-form-field> |
|
|
|
</section> |
|
|
|
</ng-container> |
|
|
|
</section> |
|
|
|
|
|
|
|
<section class="tb-form-panel stroked" |
|
|
|
*ngIf="timewindowForm.get('aggregation.type').value === aggregationTypes.NONE"> |
|
|
|
<div class="tb-form-panel-title">{{ 'aggregation.limit' | translate }}</div> |
|
|
|
<div class="limit-slider-container" fxLayout="row" fxLayoutAlign="start center" |
|
|
|
fxLayout.xs="column" fxLayoutAlign.xs="stretch"> |
|
|
|
<div fxLayout="row" fxLayoutAlign="start center" fxFlex> |
|
|
|
<mat-slider fxFlex |
|
|
|
min="{{minDatapointsLimit()}}" |
|
|
|
max="{{maxDatapointsLimit()}}"> |
|
|
|
<input matSliderThumb formControlName="limit"/> |
|
|
|
</mat-slider> |
|
|
|
<mat-form-field class="limit-slider-value" subscriptSizing="dynamic" appearance="outline"> |
|
|
|
<input matInput formControlName="limit" type="number" step="1" |
|
|
|
[value]="timewindowForm.get('aggregation.limit').value" |
|
|
|
min="{{minDatapointsLimit()}}" |
|
|
|
max="{{maxDatapointsLimit()}}"/> |
|
|
|
</mat-form-field> |
|
|
|
</div> |
|
|
|
<section class="tb-form-panel stroked" |
|
|
|
*ngIf="timewindowForm.get('aggregation.type').value === aggregationTypes.NONE"> |
|
|
|
<div class="tb-form-panel-title">{{ 'aggregation.limit' | translate }}</div> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideAggInterval"> |
|
|
|
{{ 'timewindow.hide-max-values' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<div formGroupName="aggregation" class="limit-slider-container" fxLayout="row" fxLayoutAlign="start center" |
|
|
|
fxLayout.xs="column" fxLayoutAlign.xs="stretch"> |
|
|
|
<div fxLayout="row" fxLayoutAlign="start center" fxFlex> |
|
|
|
<mat-slider fxFlex |
|
|
|
min="{{minDatapointsLimit()}}" |
|
|
|
max="{{maxDatapointsLimit()}}"> |
|
|
|
<input matSliderThumb formControlName="limit"/> |
|
|
|
</mat-slider> |
|
|
|
<mat-form-field class="limit-slider-value" subscriptSizing="dynamic" appearance="outline"> |
|
|
|
<input matInput formControlName="limit" type="number" step="1" |
|
|
|
[value]="timewindowForm.get('aggregation.limit').value" |
|
|
|
min="{{minDatapointsLimit()}}" |
|
|
|
max="{{maxDatapointsLimit()}}"/> |
|
|
|
</mat-form-field> |
|
|
|
</div> |
|
|
|
</section> |
|
|
|
</ng-container> |
|
|
|
</div> |
|
|
|
</section> |
|
|
|
|
|
|
|
<section class="tb-form-panel stroked" [fxShow]="timewindowForm.get('aggregation.type').value !== aggregationTypes.NONE"> |
|
|
|
<div class="tb-form-panel-title">{{ 'aggregation.group-interval' | translate }}</div> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideAggInterval"> |
|
|
|
{{ 'timewindow.hide-group-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<ng-container formGroupName="realtime" *ngIf="timewindow.selectedTab === timewindowTypes.REALTIME"> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="disableCustomGroupInterval"> |
|
|
|
{{ 'timewindow.disable-custom-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<tb-timeinterval |
|
|
|
formControlName="interval" |
|
|
|
[min]="minRealtimeAggInterval()" [max]="maxRealtimeAggInterval()" |
|
|
|
useCalendarIntervals |
|
|
|
subscriptSizing="dynamic" |
|
|
|
appearance="outline"> |
|
|
|
appearance="outline" |
|
|
|
[disabledAdvanced]="timewindowForm.get('realtime.disableCustomGroupInterval').value"> |
|
|
|
</tb-timeinterval> |
|
|
|
</ng-container> |
|
|
|
<ng-container formGroupName="history" *ngIf="timewindow.selectedTab === timewindowTypes.HISTORY"> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="disableCustomGroupInterval"> |
|
|
|
{{ 'timewindow.disable-custom-interval' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<tb-timeinterval |
|
|
|
formControlName="interval" |
|
|
|
[min]="minHistoryAggInterval()" [max]="maxHistoryAggInterval()" |
|
|
|
useCalendarIntervals |
|
|
|
subscriptSizing="dynamic" |
|
|
|
appearance="outline"> |
|
|
|
appearance="outline" |
|
|
|
[disabledAdvanced]="timewindowForm.get('history.disableCustomGroupInterval').value"> |
|
|
|
</tb-timeinterval> |
|
|
|
</ng-container> |
|
|
|
</section> |
|
|
|
</div> |
|
|
|
</ng-template> |
|
|
|
<ng-template #timezoneSelection> |
|
|
|
<tb-timezone asButton strokedButton noMargin |
|
|
|
localBrowserTimezonePlaceholderOnEmpty="true" |
|
|
|
formControlName="timezone"> |
|
|
|
</tb-timezone> |
|
|
|
<ng-template #timezoneSelectionPanel> |
|
|
|
<section class="tb-form-panel stroked tb-flex"> |
|
|
|
<div class="tb-form-panel-title">{{ 'timezone.timezone' | translate }}</div> |
|
|
|
<mat-slide-toggle class="mat-slide fixed-title-width" formControlName="hideTimezone"> |
|
|
|
{{ 'timewindow.hide-timezone' | translate }} |
|
|
|
</mat-slide-toggle> |
|
|
|
<tb-timezone-select [localBrowserTimezonePlaceholderOnEmpty]="true" |
|
|
|
formControlName="timezone" |
|
|
|
subscriptSizing="dynamic" |
|
|
|
appearance="outline" |
|
|
|
displayLabel="false"> |
|
|
|
</tb-timezone-select> |
|
|
|
</section> |
|
|
|
</ng-template> |
|
|
|
</form> |
|
|
|
<mat-divider></mat-divider> |
|
|
|
|