UI: Implement input widgets settings forms
This commit is contained in:
parent
03ddc2c378
commit
f71b1a63fd
File diff suppressed because one or more lines are too long
@ -0,0 +1,84 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="deviceClaimingWidgetSettingsForm" fxLayout="column">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.claim-button-label</mat-label>
|
||||
<input matInput formControlName="labelClaimButon">
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle class="slide-block" formControlName="deviceSecret">
|
||||
{{ 'widgets.input-widgets.show-secret-key-field' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group fields-group-slider">
|
||||
<legend class="group-title" translate>widgets.input-widgets.labels-settings</legend>
|
||||
<mat-expansion-panel class="tb-settings" [expanded]="deviceClaimingWidgetSettingsForm.get('showLabel').value">
|
||||
<mat-expansion-panel-header fxLayout="row wrap">
|
||||
<mat-panel-title>
|
||||
<mat-slide-toggle formControlName="showLabel" (click)="$event.stopPropagation()"
|
||||
fxLayoutAlign="center">
|
||||
{{ 'widgets.input-widgets.show-labels' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</mat-panel-title>
|
||||
<mat-panel-description fxLayoutAlign="end center" fxHide.xs translate>
|
||||
widget-config.advanced-settings
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<ng-template matExpansionPanelContent>
|
||||
<section fxLayout="column">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.device-name-label</mat-label>
|
||||
<input matInput formControlName="deviceLabel">
|
||||
</mat-form-field>
|
||||
<mat-form-field [fxShow]="deviceClaimingWidgetSettingsForm.get('deviceSecret').value" fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.secret-key-label</mat-label>
|
||||
<input matInput formControlName="secretKeyLabel">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
</ng-template>
|
||||
</mat-expansion-panel>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.messages-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.claim-device-success-message</mat-label>
|
||||
<input matInput formControlName="successfulClaimDevice">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.claim-device-not-found-message</mat-label>
|
||||
<input matInput formControlName="deviceNotFound">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.claim-device-failed-message</mat-label>
|
||||
<input matInput formControlName="failedClaimDevice">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.claim-device-name-required-message</mat-label>
|
||||
<input matInput formControlName="requiredErrorDevice">
|
||||
</mat-form-field>
|
||||
<mat-form-field [fxShow]="deviceClaimingWidgetSettingsForm.get('deviceSecret').value" fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.claim-device-secret-key-required-message</mat-label>
|
||||
<input matInput formControlName="requiredErrorSecretKey">
|
||||
</mat-form-field>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,110 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-device-claiming-widget-settings',
|
||||
templateUrl: './device-claiming-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class DeviceClaimingWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
deviceClaimingWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.deviceClaimingWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
widgetTitle: '',
|
||||
labelClaimButon: '',
|
||||
deviceSecret: false,
|
||||
showLabel: true,
|
||||
deviceLabel: '',
|
||||
secretKeyLabel: '',
|
||||
successfulClaimDevice: '',
|
||||
deviceNotFound: '',
|
||||
failedClaimDevice: '',
|
||||
requiredErrorDevice: '',
|
||||
requiredErrorSecretKey: ''
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.deviceClaimingWidgetSettingsForm = this.fb.group({
|
||||
|
||||
// General settings
|
||||
|
||||
widgetTitle: [settings.widgetTitle, []],
|
||||
labelClaimButon: [settings.labelClaimButon, []],
|
||||
deviceSecret: [settings.deviceSecret, []],
|
||||
|
||||
// Labels settings
|
||||
|
||||
showLabel: [settings.showLabel, []],
|
||||
deviceLabel: [settings.deviceLabel, []],
|
||||
secretKeyLabel: [settings.secretKeyLabel, []],
|
||||
|
||||
// Message settings
|
||||
|
||||
successfulClaimDevice: [settings.successfulClaimDevice, []],
|
||||
deviceNotFound: [settings.deviceNotFound, []],
|
||||
failedClaimDevice: [settings.failedClaimDevice, []],
|
||||
requiredErrorDevice: [settings.requiredErrorDevice, []],
|
||||
requiredErrorSecretKey: [settings.requiredErrorSecretKey, []]
|
||||
});
|
||||
}
|
||||
|
||||
protected validatorTriggers(): string[] {
|
||||
return ['deviceSecret', 'showLabel'];
|
||||
}
|
||||
|
||||
protected updateValidators(emitEvent: boolean) {
|
||||
const deviceSecret: boolean = this.deviceClaimingWidgetSettingsForm.get('deviceSecret').value;
|
||||
const showLabel: boolean = this.deviceClaimingWidgetSettingsForm.get('showLabel').value;
|
||||
if (deviceSecret) {
|
||||
if (showLabel) {
|
||||
this.deviceClaimingWidgetSettingsForm.get('secretKeyLabel').enable();
|
||||
} else {
|
||||
this.deviceClaimingWidgetSettingsForm.get('secretKeyLabel').disable();
|
||||
}
|
||||
this.deviceClaimingWidgetSettingsForm.get('requiredErrorSecretKey').enable();
|
||||
} else {
|
||||
this.deviceClaimingWidgetSettingsForm.get('requiredErrorSecretKey').disable();
|
||||
this.deviceClaimingWidgetSettingsForm.get('secretKeyLabel').disable();
|
||||
}
|
||||
if (showLabel) {
|
||||
this.deviceClaimingWidgetSettingsForm.get('deviceLabel').enable();
|
||||
} else {
|
||||
this.deviceClaimingWidgetSettingsForm.get('deviceLabel').disable();
|
||||
}
|
||||
this.deviceClaimingWidgetSettingsForm.get('secretKeyLabel').updateValueAndValidity({emitEvent});
|
||||
this.deviceClaimingWidgetSettingsForm.get('deviceLabel').updateValueAndValidity({emitEvent});
|
||||
this.deviceClaimingWidgetSettingsForm.get('requiredErrorSecretKey').updateValueAndValidity({emitEvent});
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="photoCameraInputWidgetSettingsForm">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.image-settings</legend>
|
||||
<section fxLayout="column" fxLayout.gt-sm="row" fxLayoutGap="8px" fxLayoutAlign.gt-sm="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.image-format</mat-label>
|
||||
<mat-select formControlName="imageFormat">
|
||||
<mat-option [value]="'image/jpeg'">
|
||||
{{ 'widgets.input-widgets.image-format-jpeg' | translate }}
|
||||
</mat-option>
|
||||
<mat-option [value]="'image/png'">
|
||||
{{ 'widgets.input-widgets.image-format-png' | translate }}
|
||||
</mat-option>
|
||||
<mat-option [value]="'image/webp'">
|
||||
{{ 'widgets.input-widgets.image-format-webp' | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.image-quality</mat-label>
|
||||
<input matInput type="number" min="0" max="1" formControlName="imageQuality">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<section fxLayout="column" fxLayout.gt-sm="row" fxLayoutGap="8px" fxLayoutAlign.gt-sm="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.max-image-width</mat-label>
|
||||
<input matInput type="number" min="1" formControlName="maxWidth">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.max-image-height</mat-label>
|
||||
<input matInput type="number" min="1" formControlName="maxHeight">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,67 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-photo-camera-input-widget-settings',
|
||||
templateUrl: './photo-camera-input-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class PhotoCameraInputWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
photoCameraInputWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.photoCameraInputWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
widgetTitle: '',
|
||||
|
||||
imageFormat: 'image/png',
|
||||
imageQuality: 0.92,
|
||||
maxWidth: 640,
|
||||
maxHeight: 480
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.photoCameraInputWidgetSettingsForm = this.fb.group({
|
||||
|
||||
// General settings
|
||||
|
||||
widgetTitle: [settings.widgetTitle, []],
|
||||
|
||||
// Image settings
|
||||
|
||||
imageFormat: [settings.imageFormat, []],
|
||||
imageQuality: [settings.imageQuality, [Validators.min(0), Validators.max(1)]],
|
||||
maxWidth: [settings.maxWidth, [Validators.min(1)]],
|
||||
maxHeight: [settings.maxHeight, [Validators.min(1)]]
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="updateAttributeGeneralSettingsFormGroup">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
<section fxLayout="column" fxLayout.gt-sm="row" fxLayoutGap="8px" fxLayoutAlign.gt-sm="start center">
|
||||
<mat-slide-toggle fxFlex fxFlex.gt-sm="20" formControlName="showLabel">
|
||||
{{ 'widgets.input-widgets.show-label' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-form-field *ngIf="hasLabelValue" fxFlex fxFlex.gt-sm="80" class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.label</mat-label>
|
||||
<input matInput formControlName="labelValue">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<section fxLayout="column" fxLayout.gt-sm="row" fxLayoutGap="8px" fxLayoutAlign.gt-sm="start center">
|
||||
<mat-slide-toggle fxFlex fxFlex.gt-sm="20" formControlName="isRequired">
|
||||
{{ 'widgets.input-widgets.required' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-form-field fxFlex fxFlex.gt-sm="80" class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.required-error-message</mat-label>
|
||||
<input matInput formControlName="requiredErrorMessage">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<mat-slide-toggle formControlName="showResultMessage" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-result-message' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,172 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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, forwardRef, Input, OnInit } from '@angular/core';
|
||||
import {
|
||||
ControlValueAccessor,
|
||||
FormBuilder,
|
||||
FormControl,
|
||||
FormGroup,
|
||||
NG_VALIDATORS,
|
||||
NG_VALUE_ACCESSOR,
|
||||
Validator
|
||||
} from '@angular/forms';
|
||||
import { PageComponent } from '@shared/components/page.component';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
export interface UpdateAttributeGeneralSettings {
|
||||
widgetTitle: string;
|
||||
showLabel: boolean;
|
||||
labelValue?: string;
|
||||
isRequired: boolean;
|
||||
requiredErrorMessage: string;
|
||||
showResultMessage: boolean;
|
||||
}
|
||||
|
||||
export function updateAttributeGeneralDefaultSettings(hasLabelValue = true): UpdateAttributeGeneralSettings {
|
||||
const updateAttributeGeneralSettings: UpdateAttributeGeneralSettings = {
|
||||
widgetTitle: '',
|
||||
showLabel: true,
|
||||
isRequired: true,
|
||||
requiredErrorMessage: '',
|
||||
showResultMessage: true
|
||||
};
|
||||
if (hasLabelValue) {
|
||||
updateAttributeGeneralSettings.labelValue = '';
|
||||
}
|
||||
return updateAttributeGeneralSettings;
|
||||
}
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-attribute-general-settings',
|
||||
templateUrl: './update-attribute-general-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss'],
|
||||
providers: [
|
||||
{
|
||||
provide: NG_VALUE_ACCESSOR,
|
||||
useExisting: forwardRef(() => UpdateAttributeGeneralSettingsComponent),
|
||||
multi: true
|
||||
},
|
||||
{
|
||||
provide: NG_VALIDATORS,
|
||||
useExisting: forwardRef(() => UpdateAttributeGeneralSettingsComponent),
|
||||
multi: true
|
||||
}
|
||||
]
|
||||
})
|
||||
export class UpdateAttributeGeneralSettingsComponent extends PageComponent implements OnInit, ControlValueAccessor, Validator {
|
||||
|
||||
@Input()
|
||||
disabled: boolean;
|
||||
|
||||
@Input()
|
||||
hasLabelValue = true;
|
||||
|
||||
private modelValue: UpdateAttributeGeneralSettings;
|
||||
|
||||
private propagateChange = null;
|
||||
|
||||
public updateAttributeGeneralSettingsFormGroup: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private translate: TranslateService,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.updateAttributeGeneralSettingsFormGroup = this.fb.group({
|
||||
widgetTitle: ['', []],
|
||||
showLabel: [true, []],
|
||||
isRequired: [true, []],
|
||||
requiredErrorMessage: ['', []],
|
||||
showResultMessage: [true, []]
|
||||
});
|
||||
if (this.hasLabelValue) {
|
||||
this.updateAttributeGeneralSettingsFormGroup.addControl('labelValue', this.fb.control('', []));
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('showLabel').valueChanges.subscribe(() => {
|
||||
this.updateValidators(true);
|
||||
});
|
||||
}
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('isRequired').valueChanges.subscribe(() => {
|
||||
this.updateValidators(true);
|
||||
});
|
||||
this.updateAttributeGeneralSettingsFormGroup.valueChanges.subscribe(() => {
|
||||
this.updateModel();
|
||||
});
|
||||
this.updateValidators(false);
|
||||
}
|
||||
|
||||
registerOnChange(fn: any): void {
|
||||
this.propagateChange = fn;
|
||||
}
|
||||
|
||||
registerOnTouched(fn: any): void {
|
||||
}
|
||||
|
||||
setDisabledState(isDisabled: boolean): void {
|
||||
this.disabled = isDisabled;
|
||||
if (isDisabled) {
|
||||
this.updateAttributeGeneralSettingsFormGroup.disable({emitEvent: false});
|
||||
} else {
|
||||
this.updateAttributeGeneralSettingsFormGroup.enable({emitEvent: false});
|
||||
}
|
||||
}
|
||||
|
||||
writeValue(value: UpdateAttributeGeneralSettings): void {
|
||||
this.modelValue = value;
|
||||
this.updateAttributeGeneralSettingsFormGroup.patchValue(
|
||||
value, {emitEvent: false}
|
||||
);
|
||||
this.updateValidators(false);
|
||||
}
|
||||
|
||||
public validate(c: FormControl) {
|
||||
return this.updateAttributeGeneralSettingsFormGroup.valid ? null : {
|
||||
updateAttributeGeneralSettings: {
|
||||
valid: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
private updateModel() {
|
||||
const value: UpdateAttributeGeneralSettings = this.updateAttributeGeneralSettingsFormGroup.value;
|
||||
this.modelValue = value;
|
||||
this.propagateChange(this.modelValue);
|
||||
}
|
||||
|
||||
private updateValidators(emitEvent?: boolean): void {
|
||||
if (this.hasLabelValue) {
|
||||
const showLabel: boolean = this.updateAttributeGeneralSettingsFormGroup.get('showLabel').value;
|
||||
if (showLabel) {
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('labelValue').enable({emitEvent});
|
||||
} else {
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('labelValue').disable({emitEvent});
|
||||
}
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('labelValue').updateValueAndValidity({emitEvent: false});
|
||||
}
|
||||
|
||||
const isRequired: boolean = this.updateAttributeGeneralSettingsFormGroup.get('isRequired').value;
|
||||
if (isRequired) {
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('requiredErrorMessage').enable({emitEvent});
|
||||
} else {
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('requiredErrorMessage').disable({emitEvent});
|
||||
}
|
||||
this.updateAttributeGeneralSettingsFormGroup.get('requiredErrorMessage').updateValueAndValidity({emitEvent: false});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="updateBooleanAttributeWidgetSettingsForm">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle formControlName="showResultMessage" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-result-message' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.checkbox-settings</legend>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.true-label</mat-label>
|
||||
<input matInput formControlName="trueValue">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.false-label</mat-label>
|
||||
<input matInput formControlName="falseValue">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,58 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-boolean-attribute-widget-settings',
|
||||
templateUrl: './update-boolean-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateBooleanAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateBooleanAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateBooleanAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
widgetTitle: '',
|
||||
showResultMessage: true,
|
||||
trueValue: '',
|
||||
falseValue: ''
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateBooleanAttributeWidgetSettingsForm = this.fb.group({
|
||||
widgetTitle: [settings.widgetTitle, []],
|
||||
showResultMessage: [settings.showResultMessage, []],
|
||||
trueValue: [settings.trueValue, []],
|
||||
falseValue: [settings.falseValue, []]
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
|
||||
<section class="tb-widget-settings" [formGroup]="updateDateAttributeWidgetSettingsForm" fxLayout="column">
|
||||
<tb-update-attribute-general-settings
|
||||
[hasLabelValue]="false"
|
||||
formControlName="updateAttributeGeneralSettings">
|
||||
</tb-update-attribute-general-settings>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.datetime-field-settings</legend>
|
||||
<mat-slide-toggle formControlName="showTimeInput" class="slide-block">
|
||||
{{ 'widgets.input-widgets.display-time-input' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,73 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
import { deepClone } from '@core/utils';
|
||||
import {
|
||||
updateAttributeGeneralDefaultSettings
|
||||
} from '@home/components/widget/lib/settings/input/update-attribute-general-settings.component';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-date-attribute-widget-settings',
|
||||
templateUrl: './update-date-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateDateAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateDateAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateDateAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
...updateAttributeGeneralDefaultSettings(false),
|
||||
showTimeInput: true
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateDateAttributeWidgetSettingsForm = this.fb.group({
|
||||
updateAttributeGeneralSettings: [settings.updateAttributeGeneralSettings, []],
|
||||
showTimeInput: [settings.showTimeInput, []]
|
||||
});
|
||||
}
|
||||
|
||||
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {
|
||||
const updateAttributeGeneralSettings = deepClone(settings, ['showTimeInput']);
|
||||
return {
|
||||
updateAttributeGeneralSettings,
|
||||
showTimeInput: settings.showTimeInput
|
||||
};
|
||||
}
|
||||
|
||||
protected prepareOutputSettings(settings: any): WidgetSettings {
|
||||
return {
|
||||
...settings.updateAttributeGeneralSettings,
|
||||
showTimeInput: settings.showTimeInput
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
|
||||
<section class="tb-widget-settings" [formGroup]="updateDoubleAttributeWidgetSettingsForm" fxLayout="column">
|
||||
<tb-update-attribute-general-settings
|
||||
formControlName="updateAttributeGeneralSettings">
|
||||
</tb-update-attribute-general-settings>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.double-field-settings</legend>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.min-value</mat-label>
|
||||
<input matInput type="number" step="any" formControlName="minValue">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.max-value</mat-label>
|
||||
<input matInput type="number" step="any" formControlName="maxValue">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,77 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
import { deepClone } from '@core/utils';
|
||||
import {
|
||||
updateAttributeGeneralDefaultSettings
|
||||
} from '@home/components/widget/lib/settings/input/update-attribute-general-settings.component';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-double-attribute-widget-settings',
|
||||
templateUrl: './update-double-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateDoubleAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateDoubleAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateDoubleAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
...updateAttributeGeneralDefaultSettings(),
|
||||
minValue: null,
|
||||
maxValue: null
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateDoubleAttributeWidgetSettingsForm = this.fb.group({
|
||||
updateAttributeGeneralSettings: [settings.updateAttributeGeneralSettings, []],
|
||||
minValue: [settings.minValue, []],
|
||||
maxValue: [settings.maxValue, []]
|
||||
});
|
||||
}
|
||||
|
||||
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {
|
||||
const updateAttributeGeneralSettings = deepClone(settings, ['minValue', 'maxValue']);
|
||||
return {
|
||||
updateAttributeGeneralSettings,
|
||||
minValue: settings.minValue,
|
||||
maxValue: settings.maxValue
|
||||
};
|
||||
}
|
||||
|
||||
protected prepareOutputSettings(settings: any): WidgetSettings {
|
||||
return {
|
||||
...settings.updateAttributeGeneralSettings,
|
||||
minValue: settings.minValue,
|
||||
maxValue: settings.maxValue
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="updateImageAttributeWidgetSettingsForm">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle formControlName="showResultMessage" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-result-message' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.image-input-settings</legend>
|
||||
<section fxLayout="column">
|
||||
<mat-slide-toggle formControlName="displayPreview" class="slide-block">
|
||||
{{ 'widgets.input-widgets.display-preview' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-slide-toggle formControlName="displayClearButton" class="slide-block">
|
||||
{{ 'widgets.input-widgets.display-clear-button' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-slide-toggle formControlName="displayApplyButton" class="slide-block">
|
||||
{{ 'widgets.input-widgets.display-apply-button' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-slide-toggle formControlName="displayDiscardButton" class="slide-block">
|
||||
{{ 'widgets.input-widgets.display-discard-button' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,62 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-image-attribute-widget-settings',
|
||||
templateUrl: './update-image-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateImageAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateImageAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateImageAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
widgetTitle: '',
|
||||
showResultMessage: true,
|
||||
displayPreview: true,
|
||||
displayClearButton: false,
|
||||
displayApplyButton: true,
|
||||
displayDiscardButton: true
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateImageAttributeWidgetSettingsForm = this.fb.group({
|
||||
widgetTitle: [settings.widgetTitle, []],
|
||||
showResultMessage: [settings.showResultMessage, []],
|
||||
displayPreview: [settings.displayPreview, []],
|
||||
displayClearButton: [settings.displayClearButton, []],
|
||||
displayApplyButton: [settings.displayApplyButton, []],
|
||||
displayDiscardButton: [settings.displayDiscardButton, []]
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
|
||||
<section class="tb-widget-settings" [formGroup]="updateIntegerAttributeWidgetSettingsForm" fxLayout="column">
|
||||
<tb-update-attribute-general-settings
|
||||
formControlName="updateAttributeGeneralSettings">
|
||||
</tb-update-attribute-general-settings>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.integer-field-settings</legend>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.min-value</mat-label>
|
||||
<input matInput type="number" step="1" formControlName="minValue">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.max-value</mat-label>
|
||||
<input matInput type="number" step="1" formControlName="maxValue">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,77 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
import { deepClone } from '@core/utils';
|
||||
import {
|
||||
updateAttributeGeneralDefaultSettings
|
||||
} from '@home/components/widget/lib/settings/input/update-attribute-general-settings.component';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-integer-attribute-widget-settings',
|
||||
templateUrl: './update-integer-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateIntegerAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateIntegerAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateIntegerAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
...updateAttributeGeneralDefaultSettings(),
|
||||
minValue: null,
|
||||
maxValue: null,
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateIntegerAttributeWidgetSettingsForm = this.fb.group({
|
||||
updateAttributeGeneralSettings: [settings.updateAttributeGeneralSettings, []],
|
||||
minValue: [settings.minValue, []],
|
||||
maxValue: [settings.maxValue, []]
|
||||
});
|
||||
}
|
||||
|
||||
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {
|
||||
const updateAttributeGeneralSettings = deepClone(settings, ['minValue', 'maxValue']);
|
||||
return {
|
||||
updateAttributeGeneralSettings,
|
||||
minValue: settings.minValue,
|
||||
maxValue: settings.maxValue
|
||||
};
|
||||
}
|
||||
|
||||
protected prepareOutputSettings(settings: any): WidgetSettings {
|
||||
return {
|
||||
...settings.updateAttributeGeneralSettings,
|
||||
minValue: settings.minValue,
|
||||
maxValue: settings.maxValue
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="updateJsonAttributeWidgetSettingsForm">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
<section fxLayout="column" fxLayout.gt-sm="row" fxLayoutGap="8px" fxLayoutAlign.gt-sm="start center">
|
||||
<mat-slide-toggle fxFlex fxFlex.gt-sm="20" formControlName="showLabel">
|
||||
{{ 'widgets.input-widgets.show-label' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-form-field fxFlex fxFlex.gt-sm="80" class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.label</mat-label>
|
||||
<input matInput formControlName="labelValue">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<mat-slide-toggle formControlName="showResultMessage" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-result-message' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.attribute-settings</legend>
|
||||
<section fxLayout="column" fxLayout.gt-sm="row" fxLayoutGap="8px" fxLayoutAlign.gt-sm="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-mode</mat-label>
|
||||
<mat-select formControlName="widgetMode">
|
||||
<mat-option [value]="'ATTRIBUTE'">
|
||||
{{ 'widgets.input-widgets.widget-mode-update-attribute' | translate }}
|
||||
</mat-option>
|
||||
<mat-option [value]="'TIME_SERIES'">
|
||||
{{ 'widgets.input-widgets.widget-mode-update-timeseries' | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-form-field [fxShow]="updateJsonAttributeWidgetSettingsForm.get('widgetMode').value === 'ATTRIBUTE'" fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.attribute-scope</mat-label>
|
||||
<mat-select formControlName="attributeScope">
|
||||
<mat-option [value]="'SERVER_SCOPE'">
|
||||
{{ 'widgets.input-widgets.attribute-scope-server' | translate }}
|
||||
</mat-option>
|
||||
<mat-option [value]="'SHARED_SCOPE'">
|
||||
{{ 'widgets.input-widgets.attribute-scope-shared' | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<mat-slide-toggle formControlName="attributeRequired" class="slide-block">
|
||||
{{ 'widgets.input-widgets.value-required' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,93 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-json-attribute-widget-settings',
|
||||
templateUrl: './update-json-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateJsonAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateJsonAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateJsonAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
widgetTitle: '',
|
||||
showLabel: true,
|
||||
labelValue: '',
|
||||
showResultMessage: true,
|
||||
|
||||
widgetMode: 'ATTRIBUTE',
|
||||
attributeScope: 'SERVER_SCOPE',
|
||||
attributeRequired: true
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateJsonAttributeWidgetSettingsForm = this.fb.group({
|
||||
|
||||
// General settings
|
||||
|
||||
widgetTitle: [settings.widgetTitle, []],
|
||||
showLabel: [settings.showLabel, []],
|
||||
labelValue: [settings.labelValue, []],
|
||||
showResultMessage: [settings.showResultMessage, []],
|
||||
|
||||
// Attribute settings
|
||||
|
||||
widgetMode: [settings.widgetMode, []],
|
||||
attributeScope: [settings.attributeScope, []],
|
||||
attributeRequired: [settings.attributeRequired, []]
|
||||
});
|
||||
}
|
||||
|
||||
protected validatorTriggers(): string[] {
|
||||
return ['showLabel', 'widgetMode'];
|
||||
}
|
||||
|
||||
protected updateValidators(emitEvent: boolean) {
|
||||
const showLabel: boolean = this.updateJsonAttributeWidgetSettingsForm.get('showLabel').value;
|
||||
const widgetMode: string = this.updateJsonAttributeWidgetSettingsForm.get('widgetMode').value;
|
||||
|
||||
if (showLabel) {
|
||||
this.updateJsonAttributeWidgetSettingsForm.get('labelValue').enable();
|
||||
} else {
|
||||
this.updateJsonAttributeWidgetSettingsForm.get('labelValue').disable();
|
||||
}
|
||||
if (widgetMode === 'ATTRIBUTE') {
|
||||
this.updateJsonAttributeWidgetSettingsForm.get('attributeScope').enable();
|
||||
} else {
|
||||
this.updateJsonAttributeWidgetSettingsForm.get('attributeScope').disable();
|
||||
}
|
||||
this.updateJsonAttributeWidgetSettingsForm.get('labelValue').updateValueAndValidity({emitEvent});
|
||||
this.updateJsonAttributeWidgetSettingsForm.get('attributeScope').updateValueAndValidity({emitEvent});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,84 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
<section class="tb-widget-settings" [formGroup]="updateLocationAttributeWidgetSettingsForm">
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.general-settings</legend>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.widget-title</mat-label>
|
||||
<input matInput formControlName="widgetTitle">
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle formControlName="showResultMessage" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-result-message' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.latitude-key-name</mat-label>
|
||||
<input matInput formControlName="latKeyName">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.longitude-key-name</mat-label>
|
||||
<input matInput formControlName="lngKeyName">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<mat-slide-toggle formControlName="showGetLocation" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-get-location-button' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-slide-toggle formControlName="enableHighAccuracy" class="slide-block">
|
||||
{{ 'widgets.input-widgets.use-high-accuracy' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</fieldset>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.location-fields-settings</legend>
|
||||
<mat-slide-toggle formControlName="showLabel" class="slide-block">
|
||||
{{ 'widgets.input-widgets.show-label' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.latitude-label</mat-label>
|
||||
<input matInput formControlName="latLabel">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.longitude-label</mat-label>
|
||||
<input matInput formControlName="lngLabel">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.input-fields-alignment</mat-label>
|
||||
<mat-select formControlName="inputFieldsAlignment">
|
||||
<mat-option [value]="'column'">
|
||||
{{ 'widgets.input-widgets.input-fields-alignment-column' | translate }}
|
||||
</mat-option>
|
||||
<mat-option [value]="'row'">
|
||||
{{ 'widgets.input-widgets.input-fields-alignment-row' | translate }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-slide-toggle fxFlex formControlName="isLatRequired">
|
||||
{{ 'widgets.input-widgets.latitude-field-required' | translate }}
|
||||
</mat-slide-toggle>
|
||||
<mat-slide-toggle fxFlex formControlName="isLngRequired">
|
||||
{{ 'widgets.input-widgets.longitude-field-required' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.required-error-message</mat-label>
|
||||
<input matInput formControlName="requiredErrorMessage">
|
||||
</mat-form-field>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,109 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-location-attribute-widget-settings',
|
||||
templateUrl: './update-location-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateLocationAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateLocationAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateLocationAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
widgetTitle: '',
|
||||
showResultMessage: true,
|
||||
latKeyName: 'latitude',
|
||||
lngKeyName: 'longitude',
|
||||
showGetLocation: true,
|
||||
enableHighAccuracy: false,
|
||||
|
||||
showLabel: true,
|
||||
latLabel: '',
|
||||
lngLabel: '',
|
||||
inputFieldsAlignment: 'column',
|
||||
isLatRequired: true,
|
||||
isLngRequired: true,
|
||||
requiredErrorMessage: ''
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateLocationAttributeWidgetSettingsForm = this.fb.group({
|
||||
|
||||
// General settings
|
||||
|
||||
widgetTitle: [settings.widgetTitle, []],
|
||||
showResultMessage: [settings.showResultMessage, []],
|
||||
latKeyName: [settings.latKeyName, []],
|
||||
lngKeyName: [settings.lngKeyName, []],
|
||||
showGetLocation: [settings.showGetLocation, []],
|
||||
enableHighAccuracy: [settings.enableHighAccuracy, []],
|
||||
|
||||
// Location fields settings
|
||||
|
||||
showLabel: [settings.showLabel, []],
|
||||
latLabel: [settings.latLabel, []],
|
||||
lngLabel: [settings.lngLabel, []],
|
||||
inputFieldsAlignment: [settings.inputFieldsAlignment, []],
|
||||
isLatRequired: [settings.isLatRequired, []],
|
||||
isLngRequired: [settings.isLngRequired, []],
|
||||
requiredErrorMessage: [settings.requiredErrorMessage, []]
|
||||
});
|
||||
}
|
||||
|
||||
protected validatorTriggers(): string[] {
|
||||
return ['showLabel', 'isLatRequired', 'isLngRequired'];
|
||||
}
|
||||
|
||||
protected updateValidators(emitEvent: boolean) {
|
||||
const showLabel: boolean = this.updateLocationAttributeWidgetSettingsForm.get('showLabel').value;
|
||||
const isLatRequired: boolean = this.updateLocationAttributeWidgetSettingsForm.get('isLatRequired').value;
|
||||
const isLngRequired: boolean = this.updateLocationAttributeWidgetSettingsForm.get('isLngRequired').value;
|
||||
|
||||
if (showLabel) {
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('latLabel').enable();
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('lngLabel').enable();
|
||||
} else {
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('latLabel').disable();
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('lngLabel').disable();
|
||||
}
|
||||
if (isLatRequired || isLngRequired) {
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('requiredErrorMessage').enable();
|
||||
} else {
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('requiredErrorMessage').disable();
|
||||
}
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('latLabel').updateValueAndValidity({emitEvent});
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('lngLabel').updateValueAndValidity({emitEvent});
|
||||
this.updateLocationAttributeWidgetSettingsForm.get('requiredErrorMessage').updateValueAndValidity({emitEvent});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 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.
|
||||
|
||||
-->
|
||||
|
||||
<section class="tb-widget-settings" [formGroup]="updateStringAttributeWidgetSettingsForm" fxLayout="column">
|
||||
<tb-update-attribute-general-settings
|
||||
formControlName="updateAttributeGeneralSettings">
|
||||
</tb-update-attribute-general-settings>
|
||||
<fieldset class="fields-group">
|
||||
<legend class="group-title" translate>widgets.input-widgets.text-field-settings</legend>
|
||||
<section fxLayout="row" fxLayoutGap="8px" fxLayoutAlign="start center">
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.min-length</mat-label>
|
||||
<input matInput type="number" step="1" min="0" formControlName="minLength">
|
||||
</mat-form-field>
|
||||
<mat-form-field fxFlex class="mat-block">
|
||||
<mat-label translate>widgets.input-widgets.max-length</mat-label>
|
||||
<input matInput type="number" step="1" min="1" formControlName="maxLength">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
</fieldset>
|
||||
</section>
|
||||
@ -0,0 +1,77 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 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 { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
import { deepClone } from '@core/utils';
|
||||
import {
|
||||
updateAttributeGeneralDefaultSettings
|
||||
} from '@home/components/widget/lib/settings/input/update-attribute-general-settings.component';
|
||||
|
||||
@Component({
|
||||
selector: 'tb-update-string-attribute-widget-settings',
|
||||
templateUrl: './update-string-attribute-widget-settings.component.html',
|
||||
styleUrls: ['./../widget-settings.scss']
|
||||
})
|
||||
export class UpdateStringAttributeWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||
|
||||
updateStringAttributeWidgetSettingsForm: FormGroup;
|
||||
|
||||
constructor(protected store: Store<AppState>,
|
||||
private fb: FormBuilder) {
|
||||
super(store);
|
||||
}
|
||||
|
||||
protected settingsForm(): FormGroup {
|
||||
return this.updateStringAttributeWidgetSettingsForm;
|
||||
}
|
||||
|
||||
protected defaultSettings(): WidgetSettings {
|
||||
return {
|
||||
...updateAttributeGeneralDefaultSettings(),
|
||||
minLength: null,
|
||||
maxLength: null,
|
||||
};
|
||||
}
|
||||
|
||||
protected onSettingsSet(settings: WidgetSettings) {
|
||||
this.updateStringAttributeWidgetSettingsForm = this.fb.group({
|
||||
updateAttributeGeneralSettings: [settings.updateAttributeGeneralSettings, []],
|
||||
minLength: [settings.minLength, [Validators.min(0)]],
|
||||
maxLength: [settings.maxLength, [Validators.min(1)]]
|
||||
});
|
||||
}
|
||||
|
||||
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {
|
||||
const updateAttributeGeneralSettings = deepClone(settings, ['minLength', 'maxLength']);
|
||||
return {
|
||||
updateAttributeGeneralSettings,
|
||||
minLength: settings.minLength,
|
||||
maxLength: settings.maxLength
|
||||
};
|
||||
}
|
||||
|
||||
protected prepareOutputSettings(settings: any): WidgetSettings {
|
||||
return {
|
||||
...settings.updateAttributeGeneralSettings,
|
||||
minLength: settings.minLength,
|
||||
maxLength: settings.maxLength
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -169,6 +169,39 @@ import {
|
||||
import {
|
||||
NavigationCardsWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/navigation/navigation-cards-widget-settings.component';
|
||||
import {
|
||||
DeviceClaimingWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/device-claiming-widget-settings.component';
|
||||
import {
|
||||
UpdateAttributeGeneralSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-attribute-general-settings.component';
|
||||
import {
|
||||
UpdateIntegerAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-integer-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateDoubleAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-double-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateStringAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-string-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateBooleanAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-boolean-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateImageAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-image-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateDateAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-date-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateLocationAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-location-attribute-widget-settings.component';
|
||||
import {
|
||||
UpdateJsonAttributeWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/update-json-attribute-widget-settings.component';
|
||||
import {
|
||||
PhotoCameraInputWidgetSettingsComponent
|
||||
} from '@home/components/widget/lib/settings/input/photo-camera-input-widget-settings.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
@ -231,7 +264,18 @@ import {
|
||||
GpioControlWidgetSettingsComponent,
|
||||
GpioPanelWidgetSettingsComponent,
|
||||
NavigationCardWidgetSettingsComponent,
|
||||
NavigationCardsWidgetSettingsComponent
|
||||
NavigationCardsWidgetSettingsComponent,
|
||||
DeviceClaimingWidgetSettingsComponent,
|
||||
UpdateAttributeGeneralSettingsComponent,
|
||||
UpdateIntegerAttributeWidgetSettingsComponent,
|
||||
UpdateDoubleAttributeWidgetSettingsComponent,
|
||||
UpdateStringAttributeWidgetSettingsComponent,
|
||||
UpdateBooleanAttributeWidgetSettingsComponent,
|
||||
UpdateImageAttributeWidgetSettingsComponent,
|
||||
UpdateDateAttributeWidgetSettingsComponent,
|
||||
UpdateLocationAttributeWidgetSettingsComponent,
|
||||
UpdateJsonAttributeWidgetSettingsComponent,
|
||||
PhotoCameraInputWidgetSettingsComponent
|
||||
],
|
||||
imports: [
|
||||
CommonModule,
|
||||
@ -298,7 +342,18 @@ import {
|
||||
GpioControlWidgetSettingsComponent,
|
||||
GpioPanelWidgetSettingsComponent,
|
||||
NavigationCardWidgetSettingsComponent,
|
||||
NavigationCardsWidgetSettingsComponent
|
||||
NavigationCardsWidgetSettingsComponent,
|
||||
DeviceClaimingWidgetSettingsComponent,
|
||||
UpdateAttributeGeneralSettingsComponent,
|
||||
UpdateIntegerAttributeWidgetSettingsComponent,
|
||||
UpdateDoubleAttributeWidgetSettingsComponent,
|
||||
UpdateStringAttributeWidgetSettingsComponent,
|
||||
UpdateBooleanAttributeWidgetSettingsComponent,
|
||||
UpdateImageAttributeWidgetSettingsComponent,
|
||||
UpdateDateAttributeWidgetSettingsComponent,
|
||||
UpdateLocationAttributeWidgetSettingsComponent,
|
||||
UpdateJsonAttributeWidgetSettingsComponent,
|
||||
PhotoCameraInputWidgetSettingsComponent
|
||||
]
|
||||
})
|
||||
export class WidgetSettingsModule {
|
||||
@ -350,5 +405,15 @@ export const widgetSettingsComponentsMap: {[key: string]: Type<IWidgetSettingsCo
|
||||
'tb-gpio-control-widget-settings': GpioControlWidgetSettingsComponent,
|
||||
'tb-gpio-panel-widget-settings': GpioPanelWidgetSettingsComponent,
|
||||
'tb-navigation-card-widget-settings': NavigationCardWidgetSettingsComponent,
|
||||
'tb-navigation-cards-widget-settings': NavigationCardsWidgetSettingsComponent
|
||||
'tb-navigation-cards-widget-settings': NavigationCardsWidgetSettingsComponent,
|
||||
'tb-device-claiming-widget-settings': DeviceClaimingWidgetSettingsComponent,
|
||||
'tb-update-integer-attribute-widget-settings': UpdateIntegerAttributeWidgetSettingsComponent,
|
||||
'tb-update-double-attribute-widget-settings': UpdateDoubleAttributeWidgetSettingsComponent,
|
||||
'tb-update-string-attribute-widget-settings': UpdateStringAttributeWidgetSettingsComponent,
|
||||
'tb-update-boolean-attribute-widget-settings': UpdateBooleanAttributeWidgetSettingsComponent,
|
||||
'tb-update-image-attribute-widget-settings': UpdateImageAttributeWidgetSettingsComponent,
|
||||
'tb-update-date-attribute-widget-settings': UpdateDateAttributeWidgetSettingsComponent,
|
||||
'tb-update-location-attribute-widget-settings': UpdateLocationAttributeWidgetSettingsComponent,
|
||||
'tb-update-json-attribute-widget-settings': UpdateJsonAttributeWidgetSettingsComponent,
|
||||
'tb-photo-camera-input-widget-settings': PhotoCameraInputWidgetSettingsComponent
|
||||
};
|
||||
|
||||
@ -3592,7 +3592,71 @@
|
||||
"update-successful": "Update successful",
|
||||
"update-attribute": "Update attribute",
|
||||
"update-timeseries": "Update timeseries",
|
||||
"value": "Value"
|
||||
"value": "Value",
|
||||
"general-settings": "General settings",
|
||||
"widget-title": "Widget title",
|
||||
"claim-button-label": "Claiming button label",
|
||||
"show-secret-key-field": "Show 'Secret key' input field",
|
||||
"labels-settings": "Labels settings",
|
||||
"show-labels": "Show labels",
|
||||
"device-name-label": "Label for device name input field",
|
||||
"secret-key-label": "Label for secret key input field",
|
||||
"messages-settings": "Messages settings",
|
||||
"claim-device-success-message": "Text message of successful device claiming",
|
||||
"claim-device-not-found-message": "Text message when device not found",
|
||||
"claim-device-failed-message": "Text message of failed device claiming",
|
||||
"claim-device-name-required-message": "'Device name required' error message",
|
||||
"claim-device-secret-key-required-message": "'Secret key required' error message",
|
||||
"show-label": "Show label",
|
||||
"label": "Label",
|
||||
"required": "Required",
|
||||
"required-error-message": "'Required' error message",
|
||||
"show-result-message": "Show result message",
|
||||
"integer-field-settings": "Integer field settings",
|
||||
"min-value": "Min value",
|
||||
"max-value": "Max value",
|
||||
"double-field-settings": "Double field settings",
|
||||
"text-field-settings": "Text field settings",
|
||||
"min-length": "Min length",
|
||||
"max-length": "Max length",
|
||||
"checkbox-settings": "Checkbox settings",
|
||||
"true-label": "Checked label",
|
||||
"false-label": "Unchecked label",
|
||||
"image-input-settings": "Image input settings",
|
||||
"display-preview": "Display preview",
|
||||
"display-clear-button": "Display clear button",
|
||||
"display-apply-button": "Display apply button",
|
||||
"display-discard-button": "Display discard button",
|
||||
"datetime-field-settings": "Date/time field settings",
|
||||
"display-time-input": "Display time input",
|
||||
"latitude-key-name": "Latitude key name",
|
||||
"longitude-key-name": "Longitude key name",
|
||||
"show-get-location-button": "Show button 'Get current location'",
|
||||
"use-high-accuracy": "Use high accuracy",
|
||||
"location-fields-settings": "Location fields settings",
|
||||
"latitude-label": "Label for latitude",
|
||||
"longitude-label": "Label for longitude",
|
||||
"input-fields-alignment": "Input fields alignment",
|
||||
"input-fields-alignment-column": "Column (default)",
|
||||
"input-fields-alignment-row": "Row",
|
||||
"latitude-field-required": "Latitude field required",
|
||||
"longitude-field-required": "Longitude field required",
|
||||
"attribute-settings": "Attribute settings",
|
||||
"widget-mode": "Widget mode",
|
||||
"widget-mode-update-attribute": "Update attribute",
|
||||
"widget-mode-update-timeseries": "Update timeseries",
|
||||
"attribute-scope": "Attribute scope",
|
||||
"attribute-scope-server": "Server attribute",
|
||||
"attribute-scope-shared": "Shared attribute",
|
||||
"value-required": "Value required",
|
||||
"image-settings": "Image settings",
|
||||
"image-format": "Image format",
|
||||
"image-format-jpeg": "JPEG",
|
||||
"image-format-png": "PNG",
|
||||
"image-format-webp": "WEBP",
|
||||
"image-quality": "Image quality that use lossy compression such as jpeg and webp",
|
||||
"max-image-width": "Maximum image width",
|
||||
"max-image-height": "Maximum image height"
|
||||
},
|
||||
"invalid-qr-code-text": "Invalid input text for QR code. Input should have a string type",
|
||||
"qr-code": {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user