UI: Add new widhet type parameters supportsUnitConversion

This commit is contained in:
Vladyslav_Prykhodko 2025-05-09 09:25:23 +03:00
parent 2e65c79184
commit 76237337b2
14 changed files with 39 additions and 4 deletions

View File

@ -47,7 +47,9 @@
/> />
</mat-form-field> </mat-form-field>
<div class="tb-units-field"> <div class="tb-units-field">
<tb-unit-input formControlName="units"> <tb-unit-input
[allowConverted]="supportsUnitConversion"
formControlName="units">
</tb-unit-input> </tb-unit-input>
</div> </div>
<div class="tb-decimals-field"> <div class="tb-decimals-field">

View File

@ -123,6 +123,10 @@ export class AggregatedDataKeyRowComponent implements ControlValueAccessor, OnIn
return [DatasourceType.device, DatasourceType.entity].includes(this.datasourceType); return [DatasourceType.device, DatasourceType.entity].includes(this.datasourceType);
} }
get supportsUnitConversion(): boolean {
return this.widgetConfigComponent.modelValue?.typeParameters?.supportsUnitConversion ?? false;
}
private propagateChange = (_val: any) => {}; private propagateChange = (_val: any) => {};
constructor(private fb: UntypedFormBuilder, constructor(private fb: UntypedFormBuilder,
@ -222,7 +226,8 @@ export class AggregatedDataKeyRowComponent implements ControlValueAccessor, OnIn
callbacks: this.callbacks, callbacks: this.callbacks,
hideDataKeyName: true, hideDataKeyName: true,
hideDataKeyLabel: true, hideDataKeyLabel: true,
hideDataKeyColor: true hideDataKeyColor: true,
supportsUnitConversion: this.supportsUnitConversion
} }
}).afterClosed().subscribe((updatedDataKey) => { }).afterClosed().subscribe((updatedDataKey) => {
if (updatedDataKey) { if (updatedDataKey) {

View File

@ -69,6 +69,7 @@
</div> </div>
<div *ngIf="!hideUnits && !hideDataKeyUnits && (!singleRow || displayUnitsOrDigits)" class="tb-units-field"> <div *ngIf="!hideUnits && !hideDataKeyUnits && (!singleRow || displayUnitsOrDigits)" class="tb-units-field">
<tb-unit-input *ngIf="displayUnitsOrDigits" <tb-unit-input *ngIf="displayUnitsOrDigits"
[allowConverted]="supportsUnitConversion"
formControlName="units"> formControlName="units">
</tb-unit-input> </tb-unit-input>
</div> </div>

View File

@ -225,6 +225,10 @@ export class DataKeyRowComponent implements ControlValueAccessor, OnInit, OnChan
return this.hasAdditionalLatestDataKeys && this.keyRowFormGroup.get('latest').value === true; return this.hasAdditionalLatestDataKeys && this.keyRowFormGroup.get('latest').value === true;
} }
get supportsUnitConversion(): boolean {
return this.widgetConfigComponent.modelValue?.typeParameters?.supportsUnitConversion ?? false;
}
private propagateChange = (_val: any) => {}; private propagateChange = (_val: any) => {};
constructor(private fb: UntypedFormBuilder, constructor(private fb: UntypedFormBuilder,
@ -337,7 +341,8 @@ export class DataKeyRowComponent implements ControlValueAccessor, OnInit, OnChan
hideDataKeyLabel: this.hideDataKeyLabel, hideDataKeyLabel: this.hideDataKeyLabel,
hideDataKeyColor: this.hideDataKeyColor, hideDataKeyColor: this.hideDataKeyColor,
hideDataKeyUnits: this.hideDataKeyUnits || !this.displayUnitsOrDigits, hideDataKeyUnits: this.hideDataKeyUnits || !this.displayUnitsOrDigits,
hideDataKeyDecimals: this.hideDataKeyDecimals || !this.displayUnitsOrDigits hideDataKeyDecimals: this.hideDataKeyDecimals || !this.displayUnitsOrDigits,
supportsUnitConversion: this.supportsUnitConversion
} }
}).afterClosed().subscribe((updatedDataKey) => { }).afterClosed().subscribe((updatedDataKey) => {
if (updatedDataKey) { if (updatedDataKey) {

View File

@ -71,6 +71,7 @@
[hideDataKeyUnits]="hideDataKeyUnits" [hideDataKeyUnits]="hideDataKeyUnits"
[hideDataKeyDecimals]="hideDataKeyDecimals" [hideDataKeyDecimals]="hideDataKeyDecimals"
[maxDataKeys]="maxDataKeys" [maxDataKeys]="maxDataKeys"
[supportsUnitConversion]="supportsUnitConversion"
[optDataKeys]="isDataKeysOptional(datasourceFormGroup.get('type').value)" [optDataKeys]="isDataKeysOptional(datasourceFormGroup.get('type').value)"
[simpleDataKeysLabel]="!hasAdditionalLatestDataKeys" [simpleDataKeysLabel]="!hasAdditionalLatestDataKeys"
[aliasController]="aliasController" [aliasController]="aliasController"

View File

@ -135,6 +135,10 @@ export class DatasourceComponent implements ControlValueAccessor, OnInit, Valida
return this.widgetConfigComponent.modelValue?.dataKeySettingsFunction; return this.widgetConfigComponent.modelValue?.dataKeySettingsFunction;
} }
public get supportsUnitConversion(): boolean {
return this.widgetConfigComponent.modelValue?.typeParameters?.supportsUnitConversion ?? false;
}
public get dashboard(): Dashboard { public get dashboard(): Dashboard {
return this.widgetConfigComponent.dashboard; return this.widgetConfigComponent.dashboard;
} }

View File

@ -50,6 +50,7 @@
[hideDataKeyColor]="data.hideDataKeyColor" [hideDataKeyColor]="data.hideDataKeyColor"
[hideDataKeyUnits]="data.hideDataKeyUnits" [hideDataKeyUnits]="data.hideDataKeyUnits"
[hideDataKeyDecimals]="data.hideDataKeyDecimals" [hideDataKeyDecimals]="data.hideDataKeyDecimals"
[supportsUnitConversion]="data.supportsUnitConversion"
formControlName="dataKey"> formControlName="dataKey">
</tb-data-key-config> </tb-data-key-config>
</div> </div>

View File

@ -56,6 +56,7 @@ export interface DataKeyConfigDialogData {
hideDataKeyColor?: boolean; hideDataKeyColor?: boolean;
hideDataKeyUnits?: boolean; hideDataKeyUnits?: boolean;
hideDataKeyDecimals?: boolean; hideDataKeyDecimals?: boolean;
supportsUnitConversion?: boolean
} }
@Component({ @Component({

View File

@ -49,6 +49,7 @@
<div class="tb-form-row space-between" *ngIf="!hideDataKeyUnits"> <div class="tb-form-row space-between" *ngIf="!hideDataKeyUnits">
<div translate>widget-config.units-short</div> <div translate>widget-config.units-short</div>
<tb-unit-input <tb-unit-input
[allowConverted]="supportsUnitConversion"
formControlName="units"> formControlName="units">
</tb-unit-input> </tb-unit-input>
</div> </div>

View File

@ -153,6 +153,10 @@ export class DataKeyConfigComponent extends PageComponent implements OnInit, Con
@coerceBoolean() @coerceBoolean()
hideDataKeyDecimals = false; hideDataKeyDecimals = false;
@Input()
@coerceBoolean()
supportsUnitConversion = false;
@ViewChild('keyInput') keyInput: ElementRef; @ViewChild('keyInput') keyInput: ElementRef;
@ViewChild('funcBodyEdit', {static: false}) funcBodyEdit: JsFuncComponent; @ViewChild('funcBodyEdit', {static: false}) funcBodyEdit: JsFuncComponent;

View File

@ -169,6 +169,10 @@ export class DataKeysComponent implements ControlValueAccessor, OnInit, OnChange
@coerceBoolean() @coerceBoolean()
simpleDataKeysLabel = false; simpleDataKeysLabel = false;
@Input()
@coerceBoolean()
supportsUnitConversion = false;
@Input() @Input()
aliasController: IAliasController; aliasController: IAliasController;
@ -610,7 +614,8 @@ export class DataKeysComponent implements ControlValueAccessor, OnInit, OnChange
hideDataKeyLabel: this.hideDataKeyLabel, hideDataKeyLabel: this.hideDataKeyLabel,
hideDataKeyColor: this.hideDataKeyColor, hideDataKeyColor: this.hideDataKeyColor,
hideDataKeyUnits: this.hideDataKeyUnits, hideDataKeyUnits: this.hideDataKeyUnits,
hideDataKeyDecimals: this.hideDataKeyDecimals hideDataKeyDecimals: this.hideDataKeyDecimals,
supportsUnitConversion: this.supportsUnitConversion
} }
}).afterClosed().subscribe((updatedDataKey) => { }).afterClosed().subscribe((updatedDataKey) => {
if (updatedDataKey) { if (updatedDataKey) {

View File

@ -662,6 +662,9 @@ export class WidgetComponentService {
if (isUndefined(result.typeParameters.targetDeviceOptional)) { if (isUndefined(result.typeParameters.targetDeviceOptional)) {
result.typeParameters.targetDeviceOptional = false; result.typeParameters.targetDeviceOptional = false;
} }
if (isUndefined(result.typeParameters.supportsUnitConversion)) {
result.typeParameters.supportsUnitConversion = false;
}
if (isDefinedAndNotNull(result.typeParameters.additionalWidgetActionTypes)) { if (isDefinedAndNotNull(result.typeParameters.additionalWidgetActionTypes)) {
if (Array.isArray(result.typeParameters.additionalWidgetActionTypes)) { if (Array.isArray(result.typeParameters.additionalWidgetActionTypes)) {
result.typeParameters.additionalWidgetActionTypes = result.typeParameters.additionalWidgetActionTypes.filter(type => WidgetActionType[type]); result.typeParameters.additionalWidgetActionTypes = result.typeParameters.additionalWidgetActionTypes.filter(type => WidgetActionType[type]);

View File

@ -291,6 +291,7 @@
<div *ngIf="displayUnitsConfig" class="tb-form-row space-between"> <div *ngIf="displayUnitsConfig" class="tb-form-row space-between">
<div tb-hint-tooltip-icon="{{'widget-config.default-data-key-parameter-hint' | translate}}" translate>widget-config.units-by-default</div> <div tb-hint-tooltip-icon="{{'widget-config.default-data-key-parameter-hint' | translate}}" translate>widget-config.units-by-default</div>
<tb-unit-input <tb-unit-input
[allowConverted]="modelValue.typeParameters.supportsUnitConversion"
formControlName="units"> formControlName="units">
</tb-unit-input> </tb-unit-input>
</div> </div>

View File

@ -196,6 +196,7 @@ export interface WidgetTypeParameters {
dataKeySettingsFunction?: DataKeySettingsFunction; dataKeySettingsFunction?: DataKeySettingsFunction;
displayRpcMessageToast?: boolean; displayRpcMessageToast?: boolean;
targetDeviceOptional?: boolean; targetDeviceOptional?: boolean;
supportsUnitConversion?: boolean;
additionalWidgetActionTypes?: WidgetActionType[]; additionalWidgetActionTypes?: WidgetActionType[];
} }