5 changed files with 115 additions and 62 deletions
@ -0,0 +1,37 @@ |
|||
<mat-expansion-panel [formGroup] = "dynamicValue" class="device-profile-alarm" style = "margin-bottom: 26px;" fxFlex> |
|||
<mat-expansion-panel-header> |
|||
<div fxFlex fxLayout="row" fxLayoutAlign="start center"> |
|||
<mat-panel-title> |
|||
<div fxLayout="row" fxFlex fxLayoutAlign="start center"> |
|||
{{'filter.dynamic-value' | translate}} |
|||
</div> |
|||
</mat-panel-title> |
|||
<span fxFlex></span> |
|||
</div> |
|||
</mat-expansion-panel-header> |
|||
<ng-template matExpansionPanelContent> |
|||
<div fxFlex fxLayout="column"> |
|||
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="8px"> |
|||
<div fxFlex="40" fxLayout="column"> |
|||
<mat-form-field floatLabel="always" hideRequiredMarker class="mat-block"> |
|||
<mat-label></mat-label> |
|||
<mat-select formControlName="sourceType" placeholder="{{'filter.dynamic-source-type' | translate}}"> |
|||
<mat-option [value]="null"> |
|||
{{'filter.no-dynamic-value' | translate}} |
|||
</mat-option> |
|||
<mat-option *ngFor="let sourceType of dynamicValueSourceTypes" [value]="sourceType"> |
|||
{{dynamicValueSourceTypeTranslations.get(sourceType) | translate}} |
|||
</mat-option> |
|||
</mat-select> |
|||
</mat-form-field> |
|||
</div> |
|||
<div fxFlex fxLayout="column"> |
|||
<mat-form-field floatLabel="always" hideRequiredMarker class="mat-block source-attribute"> |
|||
<mat-label></mat-label> |
|||
<input matInput formControlName="sourceAttribute" placeholder="{{'filter.source-attribute' | translate}}"> |
|||
</mat-form-field> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</ng-template> |
|||
</mat-expansion-panel> |
|||
@ -0,0 +1,68 @@ |
|||
import { Component, forwardRef, OnInit } from '@angular/core'; |
|||
import { |
|||
ControlValueAccessor, |
|||
FormBuilder, |
|||
FormGroup, |
|||
NG_VALUE_ACCESSOR, |
|||
} from '@angular/forms'; |
|||
import { |
|||
DynamicValueSourceType, |
|||
dynamicValueSourceTypeTranslationMap, |
|||
getDynamicSourcesForAllowUser |
|||
} from '@shared/models/query/query.models'; |
|||
|
|||
@Component({ |
|||
selector: 'tb-alarm-dynamic-value', |
|||
templateUrl: './alarm-dynamic-value.component.html', |
|||
providers: [{ |
|||
provide: NG_VALUE_ACCESSOR, |
|||
useExisting: forwardRef(() => AlarmDynamicValue), |
|||
multi: true |
|||
}] |
|||
}) |
|||
|
|||
export class AlarmDynamicValue implements ControlValueAccessor, OnInit{ |
|||
public dynamicValue: FormGroup; |
|||
public dynamicValueSourceTypes: DynamicValueSourceType[] = getDynamicSourcesForAllowUser(false); |
|||
public dynamicValueSourceTypeTranslations = dynamicValueSourceTypeTranslationMap; |
|||
private propagateChange = (v: any) => { }; |
|||
|
|||
constructor(private fb: FormBuilder) { |
|||
} |
|||
|
|||
ngOnInit(): void { |
|||
this.dynamicValue = this.fb.group({ |
|||
sourceType: [null], |
|||
sourceAttribute: [null] |
|||
}) |
|||
|
|||
this.dynamicValue.get('sourceType').valueChanges.subscribe( |
|||
(sourceType) => { |
|||
if (!sourceType) { |
|||
this.dynamicValue.get('sourceAttribute').patchValue(null, {emitEvent: false}); |
|||
} |
|||
} |
|||
); |
|||
|
|||
this.dynamicValue.valueChanges.subscribe(() => { |
|||
this.updateModel(); |
|||
}) |
|||
} |
|||
|
|||
registerOnChange(fn: any): void { |
|||
this.propagateChange = fn; |
|||
} |
|||
|
|||
registerOnTouched(fn: any): void { |
|||
} |
|||
|
|||
writeValue(dynamicValue: {sourceType: string, sourceAttribute: string}): void { |
|||
if(dynamicValue) { |
|||
this.dynamicValue.patchValue(dynamicValue, {emitEvent: false}); |
|||
} |
|||
} |
|||
|
|||
private updateModel() { |
|||
this.propagateChange(this.dynamicValue.value); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue