UI: Implement gateway widgets settings forms
This commit is contained in:
parent
ac0f367449
commit
c47e17a21f
File diff suppressed because one or more lines are too long
@ -0,0 +1,26 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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]="gatewayConfigSingleDeviceWidgetSettingsForm" fxLayout="column">
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.gateway-title</mat-label>
|
||||||
|
<input matInput formControlName="gatewayTitle">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-slide-toggle formControlName="readOnly" class="slide-block">
|
||||||
|
{{ 'widgets.gateway.read-only' | translate }}
|
||||||
|
</mat-slide-toggle>
|
||||||
|
</section>
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
///
|
||||||
|
/// 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-gateway-config-single-device-widget-settings',
|
||||||
|
templateUrl: './gateway-config-single-device-widget-settings.component.html',
|
||||||
|
styleUrls: ['./../widget-settings.scss']
|
||||||
|
})
|
||||||
|
export class GatewayConfigSingleDeviceWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||||
|
|
||||||
|
gatewayConfigSingleDeviceWidgetSettingsForm: FormGroup;
|
||||||
|
|
||||||
|
constructor(protected store: Store<AppState>,
|
||||||
|
private fb: FormBuilder) {
|
||||||
|
super(store);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected settingsForm(): FormGroup {
|
||||||
|
return this.gatewayConfigSingleDeviceWidgetSettingsForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected defaultSettings(): WidgetSettings {
|
||||||
|
return {
|
||||||
|
gatewayTitle: 'Gateway configuration (Single device)',
|
||||||
|
readOnly: false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected onSettingsSet(settings: WidgetSettings) {
|
||||||
|
this.gatewayConfigSingleDeviceWidgetSettingsForm = this.fb.group({
|
||||||
|
gatewayTitle: [settings.gatewayTitle, []],
|
||||||
|
readOnly: [settings.readOnly, []]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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]="gatewayConfigWidgetSettingsForm" fxLayout="column">
|
||||||
|
<fieldset class="fields-group">
|
||||||
|
<legend class="group-title" translate>widgets.gateway.general-settings</legend>
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.widget-title</mat-label>
|
||||||
|
<input matInput formControlName="widgetTitle">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.default-archive-file-name</mat-label>
|
||||||
|
<input matInput formControlName="archiveFileName">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.device-type-for-new-gateway</mat-label>
|
||||||
|
<input matInput formControlName="gatewayType">
|
||||||
|
</mat-form-field>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="fields-group">
|
||||||
|
<legend class="group-title" translate>widgets.gateway.messages-settings</legend>
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.save-config-success-message</mat-label>
|
||||||
|
<input matInput formControlName="successfulSave">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.device-name-exists-message</mat-label>
|
||||||
|
<input matInput formControlName="gatewayNameExists">
|
||||||
|
</mat-form-field>
|
||||||
|
</fieldset>
|
||||||
|
</section>
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
///
|
||||||
|
/// 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-gateway-config-widget-settings',
|
||||||
|
templateUrl: './gateway-config-widget-settings.component.html',
|
||||||
|
styleUrls: ['./../widget-settings.scss']
|
||||||
|
})
|
||||||
|
export class GatewayConfigWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||||
|
|
||||||
|
gatewayConfigWidgetSettingsForm: FormGroup;
|
||||||
|
|
||||||
|
constructor(protected store: Store<AppState>,
|
||||||
|
private fb: FormBuilder) {
|
||||||
|
super(store);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected settingsForm(): FormGroup {
|
||||||
|
return this.gatewayConfigWidgetSettingsForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected defaultSettings(): WidgetSettings {
|
||||||
|
return {
|
||||||
|
widgetTitle: 'Gateway Configuration',
|
||||||
|
archiveFileName: 'gatewayConfiguration',
|
||||||
|
gatewayType: 'Gateway',
|
||||||
|
successfulSave: '',
|
||||||
|
gatewayNameExists: ''
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected onSettingsSet(settings: WidgetSettings) {
|
||||||
|
this.gatewayConfigWidgetSettingsForm = this.fb.group({
|
||||||
|
widgetTitle: [settings.widgetTitle, []],
|
||||||
|
archiveFileName: [settings.archiveFileName, []],
|
||||||
|
gatewayType: [settings.gatewayType, []],
|
||||||
|
successfulSave: [settings.successfulSave, []],
|
||||||
|
gatewayNameExists: [settings.gatewayNameExists, []]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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]="gatewayEventsWidgetSettingsForm" fxLayout="column">
|
||||||
|
<mat-form-field fxFlex class="mat-block">
|
||||||
|
<mat-label translate>widgets.gateway.events-title</mat-label>
|
||||||
|
<input matInput formControlName="eventsTitle">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field fxFlex class="mat-block" floatLabel="always">
|
||||||
|
<mat-label translate>widgets.gateway.events-filter</mat-label>
|
||||||
|
<mat-chip-list #chipList formControlName="eventsReg">
|
||||||
|
<mat-chip
|
||||||
|
*ngFor="let eventFilter of gatewayEventsWidgetSettingsForm.get('eventsReg').value"
|
||||||
|
[removable]="true"
|
||||||
|
(removed)="removeEventFilter(eventFilter)">
|
||||||
|
{{eventFilter}}
|
||||||
|
<mat-icon matChipRemove>cancel</mat-icon>
|
||||||
|
</mat-chip>
|
||||||
|
<input
|
||||||
|
placeholder="{{ 'widgets.gateway.event-key-contains' | translate }}"
|
||||||
|
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
|
||||||
|
[matChipInputFor]="chipList"
|
||||||
|
matChipInputAddOnBlur
|
||||||
|
(matChipInputTokenEnd)="addEventFilterFromInput($event)">
|
||||||
|
</mat-chip-list>
|
||||||
|
</mat-form-field>
|
||||||
|
</section>
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
///
|
||||||
|
/// 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 { MatChipInputEvent } from '@angular/material/chips';
|
||||||
|
import { COMMA, ENTER, SEMICOLON } from '@angular/cdk/keycodes';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'tb-gateway-events-widget-settings',
|
||||||
|
templateUrl: './gateway-events-widget-settings.component.html',
|
||||||
|
styleUrls: ['./../widget-settings.scss']
|
||||||
|
})
|
||||||
|
export class GatewayEventsWidgetSettingsComponent extends WidgetSettingsComponent {
|
||||||
|
|
||||||
|
separatorKeysCodes = [ENTER, COMMA, SEMICOLON];
|
||||||
|
|
||||||
|
gatewayEventsWidgetSettingsForm: FormGroup;
|
||||||
|
|
||||||
|
constructor(protected store: Store<AppState>,
|
||||||
|
private fb: FormBuilder) {
|
||||||
|
super(store);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected settingsForm(): FormGroup {
|
||||||
|
return this.gatewayEventsWidgetSettingsForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected defaultSettings(): WidgetSettings {
|
||||||
|
return {
|
||||||
|
eventsTitle: 'Gateway events form title',
|
||||||
|
eventsReg: []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected onSettingsSet(settings: WidgetSettings) {
|
||||||
|
this.gatewayEventsWidgetSettingsForm = this.fb.group({
|
||||||
|
eventsTitle: [settings.eventsTitle, []],
|
||||||
|
eventsReg: [settings.eventsReg, []]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
removeEventFilter(eventFilter: string) {
|
||||||
|
const eventsFilter: string[] = this.gatewayEventsWidgetSettingsForm.get('eventsReg').value;
|
||||||
|
const index = eventsFilter.indexOf(eventFilter);
|
||||||
|
if (index > -1) {
|
||||||
|
eventsFilter.splice(index, 1);
|
||||||
|
this.gatewayEventsWidgetSettingsForm.get('eventsReg').setValue(eventsFilter);
|
||||||
|
this.gatewayEventsWidgetSettingsForm.get('eventsReg').markAsDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addEventFilterFromInput(event: MatChipInputEvent) {
|
||||||
|
const value = event.value;
|
||||||
|
if ((value || '').trim()) {
|
||||||
|
const eventsFilter: string[] = this.gatewayEventsWidgetSettingsForm.get('eventsReg').value;
|
||||||
|
const index = eventsFilter.indexOf(value);
|
||||||
|
if (index === -1) {
|
||||||
|
eventsFilter.push(value);
|
||||||
|
this.gatewayEventsWidgetSettingsForm.get('eventsReg').setValue(eventsFilter);
|
||||||
|
this.gatewayEventsWidgetSettingsForm.get('eventsReg').markAsDirty();
|
||||||
|
}
|
||||||
|
event.chipInput.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -147,6 +147,15 @@ import {
|
|||||||
import {
|
import {
|
||||||
EdgeQuickOverviewWidgetSettingsComponent
|
EdgeQuickOverviewWidgetSettingsComponent
|
||||||
} from '@home/components/widget/lib/settings/cards/edge-quick-overview-widget-settings.component';
|
} from '@home/components/widget/lib/settings/cards/edge-quick-overview-widget-settings.component';
|
||||||
|
import {
|
||||||
|
GatewayConfigWidgetSettingsComponent
|
||||||
|
} from '@home/components/widget/lib/settings/gateway/gateway-config-widget-settings.component';
|
||||||
|
import {
|
||||||
|
GatewayConfigSingleDeviceWidgetSettingsComponent
|
||||||
|
} from '@home/components/widget/lib/settings/gateway/gateway-config-single-device-widget-settings.component';
|
||||||
|
import {
|
||||||
|
GatewayEventsWidgetSettingsComponent
|
||||||
|
} from '@home/components/widget/lib/settings/gateway/gateway-events-widget-settings.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
@ -201,7 +210,10 @@ import {
|
|||||||
RpcTerminalWidgetSettingsComponent,
|
RpcTerminalWidgetSettingsComponent,
|
||||||
RpcShellWidgetSettingsComponent,
|
RpcShellWidgetSettingsComponent,
|
||||||
DateRangeNavigatorWidgetSettingsComponent,
|
DateRangeNavigatorWidgetSettingsComponent,
|
||||||
EdgeQuickOverviewWidgetSettingsComponent
|
EdgeQuickOverviewWidgetSettingsComponent,
|
||||||
|
GatewayConfigWidgetSettingsComponent,
|
||||||
|
GatewayConfigSingleDeviceWidgetSettingsComponent,
|
||||||
|
GatewayEventsWidgetSettingsComponent
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
@ -260,7 +272,10 @@ import {
|
|||||||
RpcTerminalWidgetSettingsComponent,
|
RpcTerminalWidgetSettingsComponent,
|
||||||
RpcShellWidgetSettingsComponent,
|
RpcShellWidgetSettingsComponent,
|
||||||
DateRangeNavigatorWidgetSettingsComponent,
|
DateRangeNavigatorWidgetSettingsComponent,
|
||||||
EdgeQuickOverviewWidgetSettingsComponent
|
EdgeQuickOverviewWidgetSettingsComponent,
|
||||||
|
GatewayConfigWidgetSettingsComponent,
|
||||||
|
GatewayConfigSingleDeviceWidgetSettingsComponent,
|
||||||
|
GatewayEventsWidgetSettingsComponent
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class WidgetSettingsModule {
|
export class WidgetSettingsModule {
|
||||||
@ -305,5 +320,8 @@ export const widgetSettingsComponentsMap: {[key: string]: Type<IWidgetSettingsCo
|
|||||||
'tb-rpc-terminal-widget-settings': RpcTerminalWidgetSettingsComponent,
|
'tb-rpc-terminal-widget-settings': RpcTerminalWidgetSettingsComponent,
|
||||||
'tb-rpc-shell-widget-settings': RpcShellWidgetSettingsComponent,
|
'tb-rpc-shell-widget-settings': RpcShellWidgetSettingsComponent,
|
||||||
'tb-date-range-navigator-widget-settings': DateRangeNavigatorWidgetSettingsComponent,
|
'tb-date-range-navigator-widget-settings': DateRangeNavigatorWidgetSettingsComponent,
|
||||||
'tb-edge-quick-overview-widget-settings': EdgeQuickOverviewWidgetSettingsComponent
|
'tb-edge-quick-overview-widget-settings': EdgeQuickOverviewWidgetSettingsComponent,
|
||||||
|
'tb-gateway-config-widget-settings': GatewayConfigWidgetSettingsComponent,
|
||||||
|
'tb-gateway-config-single-device-widget-settings': GatewayConfigSingleDeviceWidgetSettingsComponent,
|
||||||
|
'tb-gateway-events-widget-settings': GatewayEventsWidgetSettingsComponent
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3394,6 +3394,20 @@
|
|||||||
"edge": {
|
"edge": {
|
||||||
"display-default-title": "Display default title"
|
"display-default-title": "Display default title"
|
||||||
},
|
},
|
||||||
|
"gateway": {
|
||||||
|
"general-settings": "General settings",
|
||||||
|
"widget-title": "Widget title",
|
||||||
|
"default-archive-file-name": "Default archive file name",
|
||||||
|
"device-type-for-new-gateway": "Device type for new gateway",
|
||||||
|
"messages-settings": "Messages settings",
|
||||||
|
"save-config-success-message": "Text message about successfully saved gateway configuration",
|
||||||
|
"device-name-exists-message": "Text message when device with entered name is already exists",
|
||||||
|
"gateway-title": "Gateway form",
|
||||||
|
"read-only": "Read only",
|
||||||
|
"events-title": "Gateway events form title",
|
||||||
|
"events-filter": "Events filter",
|
||||||
|
"event-key-contains": "Event key contains..."
|
||||||
|
},
|
||||||
"gauge": {
|
"gauge": {
|
||||||
"default-color": "Default color",
|
"default-color": "Default color",
|
||||||
"radial-gauge-settings": "Radial gauge settings",
|
"radial-gauge-settings": "Radial gauge settings",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user