UI: Add advanced settings for action button. Update Get attribute/time-series value action to always subscribe for updates.
This commit is contained in:
parent
4b29a8f3ff
commit
42edd481e7
@ -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\"}"
|
||||||
|
|||||||
@ -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> {
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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>
|
||||||
@ -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, []]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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>
|
||||||
|
|||||||
@ -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]],
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
|
||||||
}*/
|
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user