From fc19023130ef550b885df15f1664745604f4464d Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 8 Jan 2019 08:18:55 -0700 Subject: [PATCH] SHIBUI-1091 Implemented fix for state not clearing on update --- .../filter/container/edit-filter.component.ts | 25 ++++++++++++++----- .../filter/container/new-filter.component.ts | 6 ++++- .../filter/effect/collection.effect.ts | 6 +++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/ui/src/app/metadata/filter/container/edit-filter.component.ts b/ui/src/app/metadata/filter/container/edit-filter.component.ts index 5143f7dbe..de25389a8 100644 --- a/ui/src/app/metadata/filter/container/edit-filter.component.ts +++ b/ui/src/app/metadata/filter/container/edit-filter.component.ts @@ -1,6 +1,6 @@ -import { Component } from '@angular/core'; +import { Component, OnDestroy } from '@angular/core'; import { Store } from '@ngrx/store'; -import { Subject, Observable } from 'rxjs'; +import { Subject, Observable, Subscription } from 'rxjs'; import * as fromFilter from '../reducer'; import { MetadataFilterTypes } from '../model'; @@ -11,13 +11,15 @@ import { UpdateFilterRequest } from '../action/collection.action'; import { CancelCreateFilter, UpdateFilterChanges } from '../action/filter.action'; import { PreviewEntity } from '../../domain/action/entity.action'; import { EntityAttributesFilterEntity } from '../../domain/entity'; -import { shareReplay, map, withLatestFrom, filter, switchMap, startWith, defaultIfEmpty } from 'rxjs/operators'; +import { shareReplay, map, withLatestFrom, filter, switchMap, startWith, defaultIfEmpty, takeUntil } from 'rxjs/operators'; @Component({ selector: 'edit-filter-page', templateUrl: './edit-filter.component.html' }) -export class EditFilterComponent { +export class EditFilterComponent implements OnDestroy { + + private ngUnsubscribe: Subject = new Subject(); valueChangeSubject = new Subject>(); private valueChangeEmitted$ = this.valueChangeSubject.asObservable(); @@ -39,21 +41,25 @@ export class EditFilterComponent { actions: any; + defSub: Subscription; + constructor( private store: Store, private schemaService: SchemaService ) { this.definition$ = this.store.select(fromFilter.getFilterType).pipe( + takeUntil(this.ngUnsubscribe), filter(t => !!t), map(t => MetadataFilterTypes[t]) ); - this.definition$.subscribe(d => this.definition = d); + this.defSub = this.definition$.subscribe(d => this.definition = d); this.schema$ = this.definition$.pipe( + takeUntil(this.ngUnsubscribe), filter(d => !!d), switchMap(d => { - return this.schemaService.get(d.schema); + return this.schemaService.get(d.schema).pipe(takeUntil(this.ngUnsubscribe)); }), shareReplay() ); @@ -67,6 +73,7 @@ export class EditFilterComponent { }); this.validators$ = this.store.select(fromFilter.getFilterNames).pipe( + takeUntil(this.ngUnsubscribe), withLatestFrom( this.store.select(fromFilter.getSelectedFilter), this.definition$ @@ -87,6 +94,12 @@ export class EditFilterComponent { }; } + ngOnDestroy(): void { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + this.defSub.unsubscribe(); + } + save(): void { this.store.dispatch(new UpdateFilterRequest(this.filter)); } diff --git a/ui/src/app/metadata/filter/container/new-filter.component.ts b/ui/src/app/metadata/filter/container/new-filter.component.ts index c9b686777..4afeac3d9 100644 --- a/ui/src/app/metadata/filter/container/new-filter.component.ts +++ b/ui/src/app/metadata/filter/container/new-filter.component.ts @@ -62,6 +62,7 @@ export class NewFilterComponent implements OnDestroy, OnInit { filter(t => !!t), map(t => MetadataFilterTypes[t]) ); + this.schema$ = this.definition$.pipe( takeUntil(this.ngUnsubscribe), filter(d => !!d), @@ -80,7 +81,10 @@ export class NewFilterComponent implements OnDestroy, OnInit { this.options$ = of(Object.values(MetadataFilterTypes)); this.form.get('type').valueChanges - .pipe(distinctUntilChanged()) + .pipe( + takeUntil(this.ngUnsubscribe), + distinctUntilChanged() + ) .subscribe(type => this.store.dispatch(new SelectFilterType(type))); } diff --git a/ui/src/app/metadata/filter/effect/collection.effect.ts b/ui/src/app/metadata/filter/effect/collection.effect.ts index 392cc0115..01fdc318a 100644 --- a/ui/src/app/metadata/filter/effect/collection.effect.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.ts @@ -156,6 +156,12 @@ export class FilterCollectionEffects { tap(([filter, provider]) => this.router.navigate(['/', 'metadata', 'provider', provider, 'filters'])) ); + @Effect() + updateFilterSuccessResetState$ = this.actions$.pipe( + ofType(FilterCollectionActionTypes.UPDATE_FILTER_SUCCESS), + map(() => new ClearFilter()) + ); + @Effect() getOrderWithLoad$ = this.actions$.pipe( ofType(FilterCollectionActionTypes.LOAD_FILTER_SUCCESS),