Merge pull request #5531 from vvlladd28/bug/json-attribute/double-error-message

[3.3.2] UI: Fixed json attribute widget - showed two errors at the same time
This commit is contained in:
Igor Kulikov 2021-11-11 09:33:07 +02:00 committed by GitHub
commit 62a159ed0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 39 deletions

View File

@ -22,7 +22,7 @@
class="tb-json-input__form" class="tb-json-input__form"
[formGroup]="attributeUpdateFormGroup" [formGroup]="attributeUpdateFormGroup"
(ngSubmit)="save()"> (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> <fieldset fxFlex>
<tb-json-object-edit <tb-json-object-edit
[editorStyle]="{minHeight: '100px'}" [editorStyle]="{minHeight: '100px'}"
@ -51,19 +51,10 @@
</div> </div>
</div> </div>
<div fxLayout="column" fxLayoutAlign="center center" fxFlex *ngIf="!entityDetected || !dataKeyDetected || !isValidParameter"> <ng-template #errorContainer>
<div class="tb-json-input__error" <div class="tb-json-input__error" fxLayout="column" fxLayoutAlign="center center" fxFlex>
*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">
{{ errorMessage | translate }} {{ errorMessage | translate }}
</div> </div>
</div> </ng-template>
</form> </form>
</div> </div>

View File

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