diff --git a/ui-ngx/src/app/shared/components/ota-package/ota-package-autocomplete.component.ts b/ui-ngx/src/app/shared/components/ota-package/ota-package-autocomplete.component.ts index 6a19db3911..f8d89ba75f 100644 --- a/ui-ngx/src/app/shared/components/ota-package/ota-package-autocomplete.component.ts +++ b/ui-ngx/src/app/shared/components/ota-package/ota-package-autocomplete.component.ts @@ -17,7 +17,7 @@ import { Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { merge, Observable, of, Subject } from 'rxjs'; -import { catchError, debounceTime, map, share, switchMap, tap } from 'rxjs/operators'; +import { catchError, debounceTime, map, share, switchMap, takeUntil, tap } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { TranslateService } from '@ngx-translate/core'; @@ -61,7 +61,7 @@ export class OtaPackageAutocompleteComponent implements ControlValueAccessor, On @Input() set type(value ) { this.otaUpdateType = value ? value : OtaUpdateType.FIRMWARE; - this.reset(); + this.cleanFilteredPackages.next([]); } private deviceProfile: string; @@ -73,7 +73,7 @@ export class OtaPackageAutocompleteComponent implements ControlValueAccessor, On @Input() set deviceProfileId(value: string) { this.deviceProfile = value; - this.reset(); + this.cleanFilteredPackages.next([]); } @Input() @@ -116,6 +116,8 @@ export class OtaPackageAutocompleteComponent implements ControlValueAccessor, On private dirty = false; private cleanFilteredPackages: Subject> = new Subject(); + private destroy$ = new Subject(); + private propagateChange = (v: any) => { }; constructor(private store: Store, @@ -158,7 +160,8 @@ export class OtaPackageAutocompleteComponent implements ControlValueAccessor, On }), map(value => value ? (typeof value === 'string' ? value : value.title) : ''), switchMap(name => this.fetchPackages(name)), - share() + share(), + takeUntil(this.destroy$) ); this.filteredPackages = merge(this.cleanFilteredPackages, getPackages); @@ -167,6 +170,8 @@ export class OtaPackageAutocompleteComponent implements ControlValueAccessor, On ngOnDestroy() { this.cleanFilteredPackages.complete(); this.cleanFilteredPackages = null; + this.destroy$.next(); + this.destroy$.complete(); } getCurrentEntity(): OtaPackageInfo | null {