UI: Add advanced settings for action button. Update Get attribute/time-series value action to always subscribe for updates.

This commit is contained in:
Igor Kulikov 2024-02-02 13:53:41 +02:00
parent 4b29a8f3ff
commit 42edd481e7
16 changed files with 161 additions and 99 deletions

View File

@ -11,10 +11,10 @@
"resources": [], "resources": [],
"templateHtml": "<tb-action-button-widget \n [ctx]=\"ctx\"\n [widgetTitlePanel]=\"widgetTitlePanel\">\n</tb-action-button-widget>", "templateHtml": "<tb-action-button-widget \n [ctx]=\"ctx\"\n [widgetTitlePanel]=\"widgetTitlePanel\">\n</tb-action-button-widget>",
"templateCss": "#container tb-markdown-widget {\n height: 100%;\n display: block;\n}\n\n#container tb-markdown-widget .tb-markdown-view {\n height: 100%;\n overflow: auto;\n}\n", "templateCss": "#container tb-markdown-widget {\n height: 100%;\n display: block;\n}\n\n#container tb-markdown-widget .tb-markdown-view {\n height: 100%;\n overflow: auto;\n}\n",
"controllerScript": "self.onInit = function() {\n self.ctx.$scope.actionWidget.onInit();\n}\n\nself.actionSources = function() {\n return {\n 'click': {\n name: 'widget-action.click',\n multiple: false\n }\n };\n}\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n datasourcesOptional: true,\n maxDatasources: 1,\n maxDataKeys: 0,\n singleEntity: true,\n previewWidth: '200px',\n previewHeight: '80px',\n embedTitlePanel: true,\n overflowVisible: true\n };\n}\n\nself.onDestroy = function() {\n}\n\n", "controllerScript": "self.onInit = function() {\n self.ctx.$scope.actionWidget.onInit();\n}\n\nself.actionSources = function() {\n return {\n 'click': {\n name: 'widget-action.click',\n multiple: false\n }\n };\n}\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n datasourcesOptional: true,\n maxDatasources: 1,\n maxDataKeys: 0,\n singleEntity: true,\n previewWidth: '200px',\n previewHeight: '80px',\n embedTitlePanel: true,\n overflowVisible: true,\n hideDataSettings: true\n };\n}\n\nself.onDestroy = function() {\n}\n\n",
"settingsSchema": "", "settingsSchema": "",
"dataKeySettingsSchema": "", "dataKeySettingsSchema": "",
"settingsDirective": "", "settingsDirective": "tb-action-button-widget-settings",
"hasBasicMode": true, "hasBasicMode": true,
"basicModeDirective": "tb-action-button-basic-config", "basicModeDirective": "tb-action-button-basic-config",
"defaultConfig": "{\"datasources\":[],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#FFFFFF01\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{},\"title\":\"Action button\",\"showTitleIcon\":false,\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":false,\"enableFullscreen\":false,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"showLegend\":false,\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"borderRadius\":\"4px\",\"configMode\":\"basic\"}" "defaultConfig": "{\"datasources\":[],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#FFFFFF01\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{},\"title\":\"Action button\",\"showTitleIcon\":false,\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":false,\"enableFullscreen\":false,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"showLegend\":false,\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"borderRadius\":\"4px\",\"configMode\":\"basic\"}"

View File

@ -31,7 +31,6 @@ import {
DataToValueSettings, DataToValueSettings,
DataToValueType, DataToValueType,
GetAttributeValueSettings, GetAttributeValueSettings,
GetTelemetryValueSettings,
GetValueAction, GetValueAction,
GetValueSettings, GetValueSettings,
RpcSettings, RpcSettings,
@ -405,7 +404,7 @@ export class ExecuteRpcValueGetter<V> extends ValueGetter<V> {
} }
} }
export abstract class TelemetryValueGetter<V, S extends GetTelemetryValueSettings> extends ValueGetter<V> { export abstract class TelemetryValueGetter<V, S extends TelemetryValueSettings> extends ValueGetter<V> {
protected targetEntityId: EntityId; protected targetEntityId: EntityId;
private telemetrySubscriber: TelemetrySubscriber; private telemetrySubscriber: TelemetrySubscriber;
@ -428,11 +427,7 @@ export abstract class TelemetryValueGetter<V, S extends GetTelemetryValueSetting
if (err) { if (err) {
return throwError(() => err); return throwError(() => err);
} }
if (this.getTelemetryValueSettings().subscribeForUpdates) { return this.subscribeForTelemetryValue();
return this.subscribeForTelemetryValue();
} else {
return this.doGetTelemetryValue();
}
} else { } else {
return of(null); return of(null);
} }
@ -464,8 +459,6 @@ export abstract class TelemetryValueGetter<V, S extends GetTelemetryValueSetting
protected abstract getTelemetryValueSettings(): S; protected abstract getTelemetryValueSettings(): S;
protected abstract doGetTelemetryValue(): Observable<V>;
destroy() { destroy() {
if (this.telemetrySubscriber) { if (this.telemetrySubscriber) {
this.telemetrySubscriber.unsubscribe(); this.telemetrySubscriber.unsubscribe();
@ -492,17 +485,9 @@ export class AttributeValueGetter<V> extends TelemetryValueGetter<V, GetAttribut
return this.getTelemetryValueSettings().scope; return this.getTelemetryValueSettings().scope;
} }
protected doGetTelemetryValue(): Observable<V> {
const getAttributeValueSettings = this.getTelemetryValueSettings();
return this.ctx.attributeService.getEntityAttributes(this.targetEntityId,
getAttributeValueSettings.scope, [getAttributeValueSettings.key], {ignoreLoading: true, ignoreErrors: true}).pipe(
map((data) => data.find(attr => attr.key === getAttributeValueSettings.key)?.value)
);
}
} }
export class TimeSeriesValueGetter<V> extends TelemetryValueGetter<V, GetTelemetryValueSettings> { export class TimeSeriesValueGetter<V> extends TelemetryValueGetter<V, TelemetryValueSettings> {
constructor(protected ctx: WidgetContext, constructor(protected ctx: WidgetContext,
protected settings: GetValueSettings<V>, protected settings: GetValueSettings<V>,
@ -511,28 +496,9 @@ export class TimeSeriesValueGetter<V> extends TelemetryValueGetter<V, GetTelemet
super(ctx, settings, valueType, valueObserver); super(ctx, settings, valueType, valueObserver);
} }
protected getTelemetryValueSettings(): GetTelemetryValueSettings { protected getTelemetryValueSettings(): TelemetryValueSettings {
return this.settings.getTimeSeries; return this.settings.getTimeSeries;
} }
protected doGetTelemetryValue(): Observable<V> {
const getTelemetryValueSettings = this.getTelemetryValueSettings();
return this.ctx.attributeService.getEntityTimeseriesLatest(this.targetEntityId,
[getTelemetryValueSettings.key], true, {ignoreLoading: true, ignoreErrors: true})
.pipe(
map((data) => {
let value: any = null;
if (data[getTelemetryValueSettings.key]) {
const dataSet = data[getTelemetryValueSettings.key];
if (dataSet.length) {
value = dataSet[0].value;
}
}
return value;
})
);
}
} }
export class ExecuteRpcValueSetter<V> extends ValueSetter<V> { export class ExecuteRpcValueSetter<V> extends ValueSetter<V> {

View File

@ -33,12 +33,10 @@ export const actionButtonDefaultSettings: ActionButtonWidgetSettings = {
defaultValue: false, defaultValue: false,
getAttribute: { getAttribute: {
key: 'state', key: 'state',
scope: null, scope: null
subscribeForUpdates: false
}, },
getTimeSeries: { getTimeSeries: {
key: 'state', key: 'state'
subscribeForUpdates: false
}, },
dataToValue: { dataToValue: {
type: DataToValueType.NONE, type: DataToValueType.NONE,
@ -51,12 +49,10 @@ export const actionButtonDefaultSettings: ActionButtonWidgetSettings = {
defaultValue: false, defaultValue: false,
getAttribute: { getAttribute: {
key: 'state', key: 'state',
scope: null, scope: null
subscribeForUpdates: false
}, },
getTimeSeries: { getTimeSeries: {
key: 'state', key: 'state'
subscribeForUpdates: false
}, },
dataToValue: { dataToValue: {
type: DataToValueType.NONE, type: DataToValueType.NONE,

View File

@ -93,12 +93,10 @@ export const singleSwitchDefaultSettings: SingleSwitchWidgetSettings = {
}, },
getAttribute: { getAttribute: {
key: 'state', key: 'state',
scope: null, scope: null
subscribeForUpdates: false
}, },
getTimeSeries: { getTimeSeries: {
key: 'state', key: 'state'
subscribeForUpdates: false
}, },
dataToValue: { dataToValue: {
type: DataToValueType.NONE, type: DataToValueType.NONE,

View File

@ -0,0 +1,51 @@
<!--
Copyright © 2016-2024 The Thingsboard Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<ng-container [formGroup]="actionButtonWidgetSettingsForm">
<div class="tb-form-panel">
<div class="tb-form-panel-title" translate>widgets.action-button.behavior</div>
<div class="tb-form-row">
<div class="fixed-title-width" tb-hint-tooltip-icon="{{'widgets.button-state.activated-state-hint' | translate}}" translate>widgets.button-state.activated-state</div>
<tb-get-value-action-settings fxFlex
panelTitle="widgets.button-state.activated-state"
[valueType]="valueType.BOOLEAN"
stateLabel="widgets.button-state.activated"
[aliasController]="aliasController"
[targetDevice]="targetDevice"
[widgetType]="widgetType"
formControlName="activatedState"></tb-get-value-action-settings>
</div>
<div class="tb-form-row">
<div class="fixed-title-width" tb-hint-tooltip-icon="{{'widgets.button-state.disabled-state-hint' | translate}}" translate>widgets.button-state.disabled-state</div>
<tb-get-value-action-settings fxFlex
panelTitle="widgets.button-state.disabled-state"
[valueType]="valueType.BOOLEAN"
stateLabel="widgets.button-state.disabled"
[aliasController]="aliasController"
[targetDevice]="targetDevice"
[widgetType]="widgetType"
formControlName="disabledState"></tb-get-value-action-settings>
</div>
</div>
<div class="tb-form-panel">
<div class="tb-form-panel-title" translate>widget-config.appearance</div>
<tb-widget-button-appearance
[borderRadius]="borderRadius"
formControlName="appearance">
</tb-widget-button-appearance>
</div>
</ng-container>

View File

@ -0,0 +1,70 @@
///
/// Copyright © 2016-2024 The Thingsboard Authors
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
/// http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
import { Component } from '@angular/core';
import { TargetDevice, WidgetSettings, WidgetSettingsComponent, widgetType } from '@shared/models/widget.models';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { ValueType } from '@shared/models/constants';
import { getTargetDeviceFromDatasources } from '@shared/models/widget-settings.models';
import { actionButtonDefaultSettings } from '@home/components/widget/lib/button/action-button-widget.models';
@Component({
selector: 'tb-action-button-widget-settings',
templateUrl: './action-button-widget-settings.component.html',
styleUrls: ['./../widget-settings.scss']
})
export class ActionButtonWidgetSettingsComponent extends WidgetSettingsComponent {
get targetDevice(): TargetDevice {
const datasources = this.widgetConfig?.config?.datasources;
return getTargetDeviceFromDatasources(datasources);
}
get widgetType(): widgetType {
return this.widgetConfig?.widgetType;
}
get borderRadius(): string {
return this.widgetConfig?.config?.borderRadius;
}
valueType = ValueType;
actionButtonWidgetSettingsForm: UntypedFormGroup;
constructor(protected store: Store<AppState>,
private fb: UntypedFormBuilder) {
super(store);
}
protected settingsForm(): UntypedFormGroup {
return this.actionButtonWidgetSettingsForm;
}
protected defaultSettings(): WidgetSettings {
return {...actionButtonDefaultSettings};
}
protected onSettingsSet(settings: WidgetSettings) {
this.actionButtonWidgetSettingsForm = this.fb.group({
activatedState: [settings.activatedState, []],
disabledState: [settings.disabledState, []],
appearance: [settings.appearance, []]
});
}
}

View File

@ -84,11 +84,6 @@
[attributeScope]="getValueSettingsFormGroup.get('getAttribute').get('scope').value"> [attributeScope]="getValueSettingsFormGroup.get('getAttribute').get('scope').value">
</tb-device-key-autocomplete> </tb-device-key-autocomplete>
</div> </div>
<div class="tb-form-row">
<mat-slide-toggle class="mat-slide" formControlName="subscribeForUpdates">
<span tb-hint-tooltip-icon="{{'widgets.value-action.subscribe-for-updates-hint' | translate}}">{{ 'widgets.value-action.subscribe-for-updates' | translate }}</span>
</mat-slide-toggle>
</div>
</ng-container> </ng-container>
</ng-template> </ng-template>
<ng-template [ngSwitchCase]="getValueAction.GET_TIME_SERIES"> <ng-template [ngSwitchCase]="getValueAction.GET_TIME_SERIES">
@ -106,11 +101,6 @@
[keyType]="dataKeyType.timeseries"> [keyType]="dataKeyType.timeseries">
</tb-device-key-autocomplete> </tb-device-key-autocomplete>
</div> </div>
<div class="tb-form-row">
<mat-slide-toggle class="mat-slide" formControlName="subscribeForUpdates">
<span tb-hint-tooltip-icon="{{'widgets.value-action.subscribe-for-updates-hint' | translate}}">{{ 'widgets.value-action.subscribe-for-updates' | translate }}</span>
</mat-slide-toggle>
</div>
</ng-container> </ng-container>
</ng-template> </ng-template>
</ng-container> </ng-container>

View File

@ -24,7 +24,7 @@ import { merge } from 'rxjs';
import { import {
DataToValueType, DataToValueType,
GetValueAction, GetValueAction,
getValueActions, getValueActionsByWidgetType, getValueActionsByWidgetType,
getValueActionTranslations, getValueActionTranslations,
GetValueSettings GetValueSettings
} from '@shared/models/action-widget-settings.models'; } from '@shared/models/action-widget-settings.models';
@ -117,12 +117,10 @@ export class GetValueActionSettingsPanelComponent extends PageComponent implemen
}), }),
getAttribute: this.fb.group({ getAttribute: this.fb.group({
scope: [this.getValueSettings?.getAttribute?.scope, []], scope: [this.getValueSettings?.getAttribute?.scope, []],
key: [this.getValueSettings?.getAttribute?.key, [Validators.required]], key: [this.getValueSettings?.getAttribute?.key, [Validators.required]]
subscribeForUpdates: [this.getValueSettings?.getAttribute?.subscribeForUpdates, []]
}), }),
getTimeSeries: this.fb.group({ getTimeSeries: this.fb.group({
key: [this.getValueSettings?.getTimeSeries?.key, [Validators.required]], key: [this.getValueSettings?.getTimeSeries?.key, [Validators.required]]
subscribeForUpdates: [this.getValueSettings?.getTimeSeries?.subscribeForUpdates, []]
}), }),
dataToValue: this.fb.group({ dataToValue: this.fb.group({
type: [this.getValueSettings?.dataToValue?.type, [Validators.required]], type: [this.getValueSettings?.dataToValue?.type, [Validators.required]],

View File

@ -32,7 +32,7 @@ export class LedIndicatorWidgetSettingsComponent extends WidgetSettingsComponent
functionScopeVariables = this.widgetService.getWidgetScopeVariables(); functionScopeVariables = this.widgetService.getWidgetScopeVariables();
get targetDevice(): TargetDevice { get targetDevice(): TargetDevice {
return this.widget?.config?.targetDevice; return this.widgetConfig?.config?.targetDevice;
} }
dataKeyType = DataKeyType; dataKeyType = DataKeyType;

View File

@ -37,7 +37,7 @@ export class RoundSwitchWidgetSettingsComponent extends WidgetSettingsComponent
} }
get targetDevice(): TargetDevice { get targetDevice(): TargetDevice {
return this.widget?.config?.targetDevice; return this.widgetConfig?.config?.targetDevice;
} }
protected settingsForm(): UntypedFormGroup { protected settingsForm(): UntypedFormGroup {

View File

@ -20,7 +20,8 @@ import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state'; import { AppState } from '@core/core.state';
import { import {
singleSwitchDefaultSettings, singleSwitchLayoutImages, singleSwitchDefaultSettings,
singleSwitchLayoutImages,
singleSwitchLayouts, singleSwitchLayouts,
singleSwitchLayoutTranslations singleSwitchLayoutTranslations
} from '@home/components/widget/lib/rpc/single-switch-widget.models'; } from '@home/components/widget/lib/rpc/single-switch-widget.models';
@ -34,11 +35,11 @@ import { ValueType } from '@shared/models/constants';
export class SingleSwitchWidgetSettingsComponent extends WidgetSettingsComponent { export class SingleSwitchWidgetSettingsComponent extends WidgetSettingsComponent {
get targetDevice(): TargetDevice { get targetDevice(): TargetDevice {
return this.widget?.config?.targetDevice; return this.widgetConfig?.config?.targetDevice;
} }
get widgetType(): widgetType { get widgetType(): widgetType {
return this.widget?.type; return this.widgetConfig?.widgetType;
} }
singleSwitchLayouts = singleSwitchLayouts; singleSwitchLayouts = singleSwitchLayouts;
@ -156,6 +157,4 @@ export class SingleSwitchWidgetSettingsComponent extends WidgetSettingsComponent
this.singleSwitchWidgetSettingsForm.get('offLabelColor').disable(); this.singleSwitchWidgetSettingsForm.get('offLabelColor').disable();
} }
} }
protected readonly ValueType = ValueType;
} }

View File

@ -37,7 +37,7 @@ export class SlideToggleWidgetSettingsComponent extends WidgetSettingsComponent
} }
get targetDevice(): TargetDevice { get targetDevice(): TargetDevice {
return this.widget?.config?.targetDevice; return this.widgetConfig?.config?.targetDevice;
} }
protected settingsForm(): UntypedFormGroup { protected settingsForm(): UntypedFormGroup {

View File

@ -37,7 +37,7 @@ export class SwitchControlWidgetSettingsComponent extends WidgetSettingsComponen
} }
get targetDevice(): TargetDevice { get targetDevice(): TargetDevice {
return this.widget?.config?.targetDevice; return this.widgetConfig?.config?.targetDevice;
} }
protected settingsForm(): UntypedFormGroup { protected settingsForm(): UntypedFormGroup {

View File

@ -15,7 +15,9 @@
/// ///
import { NgModule, Type } from '@angular/core'; import { NgModule, Type } from '@angular/core';
import { QrCodeWidgetSettingsComponent } from '@home/components/widget/lib/settings/cards/qrcode-widget-settings.component'; import {
QrCodeWidgetSettingsComponent
} from '@home/components/widget/lib/settings/cards/qrcode-widget-settings.component';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { SharedModule } from '@shared/shared.module'; import { SharedModule } from '@shared/shared.module';
import { SharedHomeComponentsModule } from '@home/components/shared-home-components.module'; import { SharedHomeComponentsModule } from '@home/components/shared-home-components.module';
@ -33,7 +35,9 @@ import {
MarkdownWidgetSettingsComponent MarkdownWidgetSettingsComponent
} from '@home/components/widget/lib/settings/cards/markdown-widget-settings.component'; } from '@home/components/widget/lib/settings/cards/markdown-widget-settings.component';
import { LabelWidgetLabelComponent } from '@home/components/widget/lib/settings/cards/label-widget-label.component'; import { LabelWidgetLabelComponent } from '@home/components/widget/lib/settings/cards/label-widget-label.component';
import { LabelWidgetSettingsComponent } from '@home/components/widget/lib/settings/cards/label-widget-settings.component'; import {
LabelWidgetSettingsComponent
} from '@home/components/widget/lib/settings/cards/label-widget-settings.component';
import { import {
SimpleCardWidgetSettingsComponent SimpleCardWidgetSettingsComponent
} from '@home/components/widget/lib/settings/cards/simple-card-widget-settings.component'; } from '@home/components/widget/lib/settings/cards/simple-card-widget-settings.component';
@ -311,6 +315,9 @@ import {
import { import {
SingleSwitchWidgetSettingsComponent SingleSwitchWidgetSettingsComponent
} from '@home/components/widget/lib/settings/control/single-switch-widget-settings.component'; } from '@home/components/widget/lib/settings/control/single-switch-widget-settings.component';
import {
ActionButtonWidgetSettingsComponent
} from '@home/components/widget/lib/settings/button/action-button-widget-settings.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -424,7 +431,8 @@ import {
DoughnutWidgetSettingsComponent, DoughnutWidgetSettingsComponent,
RangeChartWidgetSettingsComponent, RangeChartWidgetSettingsComponent,
BarChartWithLabelsWidgetSettingsComponent, BarChartWithLabelsWidgetSettingsComponent,
SingleSwitchWidgetSettingsComponent SingleSwitchWidgetSettingsComponent,
ActionButtonWidgetSettingsComponent
], ],
imports: [ imports: [
CommonModule, CommonModule,
@ -543,7 +551,8 @@ import {
DoughnutWidgetSettingsComponent, DoughnutWidgetSettingsComponent,
RangeChartWidgetSettingsComponent, RangeChartWidgetSettingsComponent,
BarChartWithLabelsWidgetSettingsComponent, BarChartWithLabelsWidgetSettingsComponent,
SingleSwitchWidgetSettingsComponent SingleSwitchWidgetSettingsComponent,
ActionButtonWidgetSettingsComponent
] ]
}) })
export class WidgetSettingsModule { export class WidgetSettingsModule {
@ -629,5 +638,6 @@ export const widgetSettingsComponentsMap: {[key: string]: Type<IWidgetSettingsCo
'tb-doughnut-widget-settings': DoughnutWidgetSettingsComponent, 'tb-doughnut-widget-settings': DoughnutWidgetSettingsComponent,
'tb-range-chart-widget-settings': RangeChartWidgetSettingsComponent, 'tb-range-chart-widget-settings': RangeChartWidgetSettingsComponent,
'tb-bar-chart-with-labels-widget-settings': BarChartWithLabelsWidgetSettingsComponent, 'tb-bar-chart-with-labels-widget-settings': BarChartWithLabelsWidgetSettingsComponent,
'tb-single-switch-widget-settings': SingleSwitchWidgetSettingsComponent 'tb-single-switch-widget-settings': SingleSwitchWidgetSettingsComponent,
'tb-action-button-widget-settings': ActionButtonWidgetSettingsComponent
}; };

View File

@ -54,11 +54,7 @@ export interface TelemetryValueSettings {
key: string; key: string;
} }
export interface GetTelemetryValueSettings extends TelemetryValueSettings { export interface GetAttributeValueSettings extends TelemetryValueSettings {
subscribeForUpdates: boolean;
}
export interface GetAttributeValueSettings extends GetTelemetryValueSettings {
scope: AttributeScope | null; scope: AttributeScope | null;
} }
@ -86,7 +82,7 @@ export interface GetValueSettings<V> extends ValueActionSettings {
defaultValue: V; defaultValue: V;
executeRpc?: RpcSettings; executeRpc?: RpcSettings;
getAttribute: GetAttributeValueSettings; getAttribute: GetAttributeValueSettings;
getTimeSeries: GetTelemetryValueSettings; getTimeSeries: TelemetryValueSettings;
dataToValue: DataToValueSettings; dataToValue: DataToValueSettings;
} }
@ -133,13 +129,3 @@ export interface SetValueSettings extends ValueActionSettings {
putTimeSeries: TelemetryValueSettings; putTimeSeries: TelemetryValueSettings;
valueToData: ValueToDataSettings; valueToData: ValueToDataSettings;
} }
/*export interface RpcStateBehaviourSettings<V> {
initialState: RpcInitialStateSettings<V>;
updateStateByValue: (value: V) => RpcUpdateStateSettings;
}
export interface RpcStateWidgetSettings<V> {
initialState: RpcInitialStateSettings<V>;
background: BackgroundSettings;
}*/

View File

@ -6561,8 +6561,6 @@
"attribute-key-required": "Attribute key is required.", "attribute-key-required": "Attribute key is required.",
"time-series-key": "Time-series key", "time-series-key": "Time-series key",
"time-series-key-required": "Time-series key is required.", "time-series-key-required": "Time-series key is required.",
"subscribe-for-updates": "Subscribe for updates",
"subscribe-for-updates-hint": "Subscribe for updates",
"action-result-converter": "Action result converter", "action-result-converter": "Action result converter",
"converter-none": "None", "converter-none": "None",
"converter-function": "Function", "converter-function": "Function",