UI: Fixed json attribute widget - showed two errors at the same time.

This commit is contained in:
Vladyslav_Prykhodko 2021-11-10 13:02:15 +02:00
parent d5c7f7fc9e
commit ec84c9cf51
3 changed files with 23 additions and 39 deletions

View File

@ -22,7 +22,7 @@
class="tb-json-input__form"
[formGroup]="attributeUpdateFormGroup"
(ngSubmit)="save()">
<div fxLayout="column" fxLayoutGap="10px" fxFlex *ngIf="entityDetected && isValidParameter && dataKeyDetected">
<div fxLayout="column" fxLayoutGap="10px" fxFlex *ngIf="datasourceDetected && !errorMessage; else errorContainer">
<fieldset fxFlex>
<tb-json-object-edit
[editorStyle]="{minHeight: '100px'}"
@ -51,19 +51,10 @@
</div>
</div>
<div fxLayout="column" fxLayoutAlign="center center" fxFlex *ngIf="!entityDetected || !dataKeyDetected || !isValidParameter">
<div class="tb-json-input__error"
*ngIf="!entityDetected">
{{ 'widgets.input-widgets.no-entity-selected' | translate }}
</div>
<div class="tb-json-input__error"
*ngIf="entityDetected && !dataKeyDetected">
{{ 'widgets.input-widgets.no-datakey-selected' | translate }}
</div>
<div class="tb-json-input__error"
*ngIf="dataKeyDetected && !isValidParameter">
<ng-template #errorContainer>
<div class="tb-json-input__error" fxLayout="column" fxLayoutAlign="center center" fxFlex>
{{ errorMessage | translate }}
</div>
</div>
</ng-template>
</form>
</div>

View File

@ -25,7 +25,6 @@
}
&__error {
text-align: center;
font-size: 18px;
color: #a0a0a0;
}

View File

@ -28,7 +28,7 @@ import { AttributeService } from '@core/http/attribute.service';
import { AttributeData, AttributeScope, DataKeyType, LatestTelemetry } from '@shared/models/telemetry/telemetry.models';
import { EntityId } from '@shared/models/id/entity-id';
import { EntityType } from '@shared/models/entity-type.models';
import { createLabelFromDatasource } from '@core/utils';
import { createLabelFromDatasource, isDefinedAndNotNull } from '@core/utils';
import { Observable } from 'rxjs';
enum JsonInputWidgetMode {
@ -63,9 +63,7 @@ export class JsonInputWidgetComponent extends PageComponent implements OnInit {
labelValue: string;
entityDetected = false;
dataKeyDetected = false;
isValidParameter = false;
datasourceDetected = false;
errorMessage: string;
isFocused: boolean;
@ -111,30 +109,26 @@ export class JsonInputWidgetComponent extends PageComponent implements OnInit {
}
private validateDatasources() {
if (this.datasource?.type === DatasourceType.entity) {
this.entityDetected = true;
if (this.datasource.dataKeys.length) {
this.dataKeyDetected = true;
if (this.settings.widgetMode === JsonInputWidgetMode.ATTRIBUTE) {
if (this.datasource.dataKeys[0].type === DataKeyType.attribute) {
if (this.settings.attributeScope === AttributeScope.SERVER_SCOPE || this.datasource.entityType === EntityType.DEVICE) {
this.isValidParameter = true;
} else {
this.errorMessage = 'widgets.input-widgets.not-allowed-entity';
}
} else {
this.errorMessage = 'widgets.input-widgets.no-attribute-selected';
this.datasourceDetected = isDefinedAndNotNull(this.datasource);
if (!this.datasourceDetected) {
return;
}
if (this.datasource.type === DatasourceType.entity) {
if (this.settings.widgetMode === JsonInputWidgetMode.ATTRIBUTE) {
if (this.datasource.dataKeys[0].type === DataKeyType.attribute) {
if (this.settings.attributeScope !== AttributeScope.SERVER_SCOPE && this.datasource.entityType !== EntityType.DEVICE) {
this.errorMessage = 'widgets.input-widgets.not-allowed-entity';
}
} else {
if (this.datasource.dataKeys[0].type === DataKeyType.timeseries) {
this.isValidParameter = true;
} else {
this.errorMessage = 'widgets.input-widgets.no-timeseries-selected';
}
this.errorMessage = 'widgets.input-widgets.no-attribute-selected';
}
} else {
if (this.datasource.dataKeys[0].type !== DataKeyType.timeseries) {
this.errorMessage = 'widgets.input-widgets.no-timeseries-selected';
}
}
} else {
this.errorMessage = 'widgets.input-widgets.no-entity-selected';
}
}
@ -152,7 +146,7 @@ export class JsonInputWidgetComponent extends PageComponent implements OnInit {
}
private updateWidgetData(data: Array<DatasourceData>) {
if (this.isValidParameter) {
if (!this.errorMessage) {
let value = {};
if (data[0].data[0][1] !== '') {
try {