UI: Add validation ota package URL; Improvement ota-package-autocomplete; Refactoring update ota-packages in device-component

This commit is contained in:
Vladyslav_Prykhodko 2021-06-15 16:50:30 +03:00
parent 633ab7d3f0
commit 807a543d1c
5 changed files with 23 additions and 9 deletions

View File

@ -35,6 +35,7 @@ import { TranslateService } from '@ngx-translate/core';
import { EntityTableConfig } from '@home/models/entity/entities-table-config.models'; import { EntityTableConfig } from '@home/models/entity/entities-table-config.models';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { OtaUpdateType } from '@shared/models/ota-package.models'; import { OtaUpdateType } from '@shared/models/ota-package.models';
import { distinctUntilChanged } from 'rxjs/operators';
@Component({ @Component({
selector: 'tb-device', selector: 'tb-device',
@ -78,7 +79,7 @@ export class DeviceComponent extends EntityComponent<DeviceInfo> {
} }
buildForm(entity: DeviceInfo): FormGroup { buildForm(entity: DeviceInfo): FormGroup {
return this.fb.group( const form = this.fb.group(
{ {
name: [entity ? entity.name : '', [Validators.required]], name: [entity ? entity.name : '', [Validators.required]],
deviceProfileId: [entity ? entity.deviceProfileId : null, [Validators.required]], deviceProfileId: [entity ? entity.deviceProfileId : null, [Validators.required]],
@ -95,6 +96,17 @@ export class DeviceComponent extends EntityComponent<DeviceInfo> {
) )
} }
); );
form.get('deviceProfileId').valueChanges.pipe(
distinctUntilChanged((prev, curr) => prev?.id === curr?.id)
).subscribe(profileId => {
if (profileId && this.isEdit) {
this.entityForm.patchValue({
firmwareId: null,
softwareId: null
}, {emitEvent: false});
}
});
return form;
} }
updateForm(entity: DeviceInfo) { updateForm(entity: DeviceInfo) {
@ -156,10 +168,6 @@ export class DeviceComponent extends EntityComponent<DeviceInfo> {
this.entityForm.markAsDirty(); this.entityForm.markAsDirty();
} }
} }
this.entityForm.patchValue({
firmwareId: null,
softwareId: null
});
} }
} }
} }

View File

@ -149,7 +149,7 @@
<input matInput formControlName="url" <input matInput formControlName="url"
type="text" type="text"
[required]="entityForm.get('resource').value === 'url'"> [required]="entityForm.get('resource').value === 'url'">
<mat-error *ngIf="entityForm.get('url').hasError('required')" translate> <mat-error *ngIf="entityForm.get('url').hasError('required') || entityForm.get('url').hasError('pattern')" translate>
ota-update.direct-url-required ota-update.direct-url-required
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>

View File

@ -67,7 +67,7 @@ export class OtaUpdateComponent extends EntityComponent<OtaPackage> implements O
this.entityForm.get('file').updateValueAndValidity({emitEvent: false}); this.entityForm.get('file').updateValueAndValidity({emitEvent: false});
} else { } else {
this.entityForm.get('file').clearValidators(); this.entityForm.get('file').clearValidators();
this.entityForm.get('url').setValidators(Validators.required); this.entityForm.get('url').setValidators([Validators.required, Validators.pattern('(.|\\s)*\\S(.|\\s)*')]);
this.entityForm.get('file').updateValueAndValidity({emitEvent: false}); this.entityForm.get('file').updateValueAndValidity({emitEvent: false});
this.entityForm.get('url').updateValueAndValidity({emitEvent: false}); this.entityForm.get('url').updateValueAndValidity({emitEvent: false});
} }
@ -172,6 +172,11 @@ export class OtaUpdateComponent extends EntityComponent<OtaPackage> implements O
} }
prepareFormValue(formValue: any): any { prepareFormValue(formValue: any): any {
if (formValue.resource === 'url') {
delete formValue.file;
} else {
delete formValue.url;
}
delete formValue.resource; delete formValue.resource;
delete formValue.generateChecksum; delete formValue.generateChecksum;
return super.prepareFormValue(formValue); return super.prepareFormValue(formValue);

View File

@ -21,7 +21,8 @@
formControlName="packageId" formControlName="packageId"
(focusin)="onFocus()" (focusin)="onFocus()"
[required]="required" [required]="required"
[matAutocomplete]="packageAutocomplete"> [matAutocomplete]="packageAutocomplete"
[matAutocompleteDisabled]="disabled">
<button *ngIf="otaPackageFormGroup.get('packageId').value && !disabled" <button *ngIf="otaPackageFormGroup.get('packageId').value && !disabled"
type="button" type="button"
matSuffix mat-button mat-icon-button aria-label="Clear" matSuffix mat-button mat-icon-button aria-label="Clear"

View File

@ -222,7 +222,7 @@ export class OtaPackageAutocompleteComponent implements ControlValueAccessor, On
} }
clear() { clear() {
this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: true}); this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: false});
setTimeout(() => { setTimeout(() => {
this.packageInput.nativeElement.blur(); this.packageInput.nativeElement.blur();
this.packageInput.nativeElement.focus(); this.packageInput.nativeElement.focus();