diff --git a/ui/package-lock.json b/ui/package-lock.json index 0fd8aeb12..1228abd2d 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1366,6 +1366,11 @@ "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-5.2.0.tgz", "integrity": "sha1-Yn7XTJzZVGKTBIXZEqVXEXsjkD4=" }, + "@ngrx/store-devtools": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-6.1.0.tgz", + "integrity": "sha512-Uc0g/NCbJIbzvIMuCy3skiZVD5hoIrOAAvaninXkVHt7bXpbsSAdvJlmnozuGQqTbC0UQhYRwAR7InRSrzIbMQ==" + }, "@ngtools/webpack": { "version": "6.0.0-rc.11", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-6.0.0-rc.11.tgz", diff --git a/ui/package.json b/ui/package.json index c0199ee2d..6dc630ba9 100644 --- a/ui/package.json +++ b/ui/package.json @@ -31,6 +31,7 @@ "@ngrx/entity": "^5.2.0", "@ngrx/router-store": "^5.2.0", "@ngrx/store": "^5.2.0", + "@ngrx/store-devtools": "^6.1.0", "bootstrap": "4.1.1", "core-js": "^2.4.1", "deep-object-diff": "^1.1.0", diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index e51a919f2..aea2a20f6 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -2,6 +2,7 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; +import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { StoreRouterConnectingModule, RouterStateSerializer } from '@ngrx/router-store'; import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; @@ -22,6 +23,7 @@ import { ContentionModule } from './contention/contention.module'; import { SharedModule } from './shared/shared.module'; import { WizardModule } from './wizard/wizard.module'; import { FormModule } from './schema-form/schema-form.module'; +import { environment } from '../environments/environment.prod'; @NgModule({ declarations: [ @@ -31,6 +33,10 @@ import { FormModule } from './schema-form/schema-form.module'; StoreModule.forRoot(reducers, { metaReducers }), + StoreDevtoolsModule.instrument({ + maxAge: 25, // Retains last 25 states + logOnly: environment.production, // Restrict extension to log-only mode + }), EffectsModule.forRoot([]), BrowserModule, CoreModule.forRoot(), diff --git a/ui/src/app/metadata/domain/service/filter.service.ts b/ui/src/app/metadata/domain/service/filter.service.ts index ac9bc8ce1..7334ee301 100644 --- a/ui/src/app/metadata/domain/service/filter.service.ts +++ b/ui/src/app/metadata/domain/service/filter.service.ts @@ -27,6 +27,7 @@ export class MetadataFilterService { } save(providerId: string, filter: MetadataFilter): Observable { + console.log(providerId, filter); return this.http.post(`${this.base}${this.endpoint}/${providerId}/Filters`, filter); } } diff --git a/ui/src/app/metadata/filter/action/collection.action.ts b/ui/src/app/metadata/filter/action/collection.action.ts index f220d84bb..c93c563d8 100644 --- a/ui/src/app/metadata/filter/action/collection.action.ts +++ b/ui/src/app/metadata/filter/action/collection.action.ts @@ -3,37 +3,29 @@ import { MetadataFilter } from '../../domain/model/metadata-filter'; import { Update } from '@ngrx/entity'; export enum FilterCollectionActionTypes { - FIND = '[Metadata Filter] Find', - SELECT_FILTER = '[Metadata Filter] Select Request', - SELECT_FILTER_SUCCESS = '[Metadata Filter] Select Success', - SELECT_FILTER_FAIL = '[Metadata Filter] Select Fail', + SELECT_FILTER_REQUEST = '[Metadata Filter Collection] Select Filter Request', + SELECT_FILTER_SUCCESS = '[Metadata Filter Collection] Select Filter Success', + SELECT_FILTER_FAIL = '[Metadata Filter Collection] Select Filter Fail', - UPDATE_FILTER_REQUEST = '[Metadata Filter] Update Request', - UPDATE_FILTER_SUCCESS = '[Metadata Filter] Update Success', - UPDATE_FILTER_FAIL = '[Metadata Filter] Update Fail', + UPDATE_FILTER_REQUEST = '[Metadata Filter Collection] Update Filter Request', + UPDATE_FILTER_SUCCESS = '[Metadata Filter Collection] Update Filter Success', + UPDATE_FILTER_FAIL = '[Metadata Filter Collection] Update Filter Fail', - LOAD_FILTER_REQUEST = '[Metadata Filter Collection] Filter REQUEST', - LOAD_FILTER_SUCCESS = '[Metadata Filter Collection] Filter SUCCESS', - LOAD_FILTER_ERROR = '[Metadata Filter Collection] Filter ERROR', + LOAD_FILTER_REQUEST = '[Metadata Filter Collection] Load Filter Request', + LOAD_FILTER_SUCCESS = '[Metadata Filter Collection] Load Filter Success', + LOAD_FILTER_ERROR = '[Metadata Filter Collection] Load Filter Error', - ADD_FILTER = '[Metadata Filter Collection] Add Filter', + ADD_FILTER_REQUEST = '[Metadata Filter Collection] Add Filter Request', ADD_FILTER_SUCCESS = '[Metadata Filter Collection] Add Filter Success', ADD_FILTER_FAIL = '[Metadata Filter Collection] Add Filter Fail', - REMOVE_FILTER = '[Metadata Filter Collection] Remove Filter', + REMOVE_FILTER_REQUEST = '[Metadata Filter Collection] Remove Filter Request', REMOVE_FILTER_SUCCESS = '[Metadata Filter Collection] Remove Filter Success', REMOVE_FILTER_FAIL = '[Metadata Filter Collection] Remove Filter Fail' } - -export class FindFilter implements Action { - readonly type = FilterCollectionActionTypes.FIND; - - constructor(public payload: string) { } -} - export class SelectFilter implements Action { - readonly type = FilterCollectionActionTypes.SELECT_FILTER; + readonly type = FilterCollectionActionTypes.SELECT_FILTER_REQUEST; constructor(public payload: string) { } } @@ -87,7 +79,7 @@ export class UpdateFilterFail implements Action { } export class AddFilterRequest implements Action { - readonly type = FilterCollectionActionTypes.ADD_FILTER; + readonly type = FilterCollectionActionTypes.ADD_FILTER_REQUEST; constructor(public payload: MetadataFilter) { } } @@ -105,7 +97,7 @@ export class AddFilterFail implements Action { } export class RemoveFilterRequest implements Action { - readonly type = FilterCollectionActionTypes.REMOVE_FILTER; + readonly type = FilterCollectionActionTypes.REMOVE_FILTER_REQUEST; constructor(public payload: MetadataFilter) { } } @@ -132,7 +124,6 @@ export type FilterCollectionActionsUnion = | RemoveFilterRequest | RemoveFilterSuccess | RemoveFilterFail - | FindFilter | SelectFilter | SelectFilterSuccess | SelectFilterFail 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 f12429000..50184abf8 100644 --- a/ui/src/app/metadata/filter/container/edit-filter.component.ts +++ b/ui/src/app/metadata/filter/container/edit-filter.component.ts @@ -39,7 +39,7 @@ export class EditFilterComponent { this.definition = MetadataFilterTypes.EntityAttributesFilter; this.schema$ = this.schemaService.get(this.definition.schema); - this.isSaving$ = this.store.select(fromFilter.getSaving); + this.isSaving$ = this.store.select(fromFilter.getCollectionSaving); this.model$ = this.store.select(fromFilter.getSelectedFilter); this.valueChangeEmitted$.subscribe(changes => this.store.dispatch(new UpdateFilterChanges(changes.value))); 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 244cb3a85..542126491 100644 --- a/ui/src/app/metadata/filter/container/new-filter.component.ts +++ b/ui/src/app/metadata/filter/container/new-filter.component.ts @@ -1,6 +1,7 @@ -import { Component } from '@angular/core'; +import { Component, OnDestroy, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; import { Subject, Observable, of } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; import * as fromFilter from '../reducer'; import { MetadataFilterTypes } from '../model'; @@ -14,7 +15,9 @@ import { CancelCreateFilter, UpdateFilterChanges } from '../action/filter.action selector: 'new-filter-page', templateUrl: './new-filter.component.html' }) -export class NewFilterComponent { +export class NewFilterComponent implements OnDestroy, OnInit { + + private ngUnsubscribe: Subject = new Subject(); valueChangeSubject = new Subject>(); private valueChangeEmitted$ = this.valueChangeSubject.asObservable(); @@ -37,19 +40,31 @@ export class NewFilterComponent { this.definition = MetadataFilterTypes.EntityAttributesFilter; this.schema$ = this.schemaService.get(this.definition.schema); - this.isSaving$ = this.store.select(fromFilter.getSaving); + this.isSaving$ = this.store.select(fromFilter.getCollectionSaving); this.model$ = of({}); + } - this.valueChangeEmitted$.subscribe(changes => this.store.dispatch(new UpdateFilterChanges(changes.value))); - this.statusChangeEmitted$.subscribe(valid => { - this.isValid = valid.value ? valid.value.length === 0 : true; - }); + ngOnInit(): void { + this.valueChangeEmitted$ + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe(changes => this.store.dispatch(new UpdateFilterChanges(changes.value))); + this.statusChangeEmitted$ + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe(valid => { + this.isValid = valid.value ? valid.value.length === 0 : true; + }); this.store .select(fromFilter.getFilter) + .pipe(takeUntil(this.ngUnsubscribe)) .subscribe(filter => this.filter = filter); } + ngOnDestroy(): void { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } + save(): void { this.store.dispatch(new AddFilterRequest(this.filter)); } diff --git a/ui/src/app/metadata/filter/effect/collection.effect.ts b/ui/src/app/metadata/filter/effect/collection.effect.ts index 44651d0c2..cc41754c2 100644 --- a/ui/src/app/metadata/filter/effect/collection.effect.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.ts @@ -4,7 +4,7 @@ import { Store } from '@ngrx/store'; import { Router } from '@angular/router'; import { of } from 'rxjs'; -import { switchMap, map, catchError, tap, combineLatest, skipWhile } from 'rxjs/operators'; +import { switchMap, map, catchError, tap, combineLatest, skipWhile, debounceTime, withLatestFrom } from 'rxjs/operators'; import * as actions from '../action/collection.action'; import { FilterCollectionActionTypes } from '../action/collection.action'; @@ -35,9 +35,9 @@ export class FilterCollectionEffects { ); @Effect() selectFilterRequest$ = this.actions$.pipe( - ofType(FilterCollectionActionTypes.SELECT_FILTER), + ofType(FilterCollectionActionTypes.SELECT_FILTER_REQUEST), map(action => action.payload), - combineLatest(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), switchMap(([filterId, providerId]) => { return this.filterService .find(providerId, filterId) @@ -51,7 +51,7 @@ export class FilterCollectionEffects { @Effect() addFilter$ = this.actions$.pipe( - ofType(FilterCollectionActionTypes.ADD_FILTER), + ofType(FilterCollectionActionTypes.ADD_FILTER_REQUEST), map(action => action.payload), map(filter => { return { @@ -59,7 +59,7 @@ export class FilterCollectionEffects { relyingPartyOverrides: removeNulls(new EntityAttributesFilterEntity(filter).relyingPartyOverrides) }; }), - combineLatest(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), switchMap(([unsaved, providerId]) => { return this.filterService .save(providerId, unsaved as MetadataFilter) @@ -73,7 +73,7 @@ export class FilterCollectionEffects { addFilterSuccessRedirect$ = this.actions$.pipe( ofType(FilterCollectionActionTypes.ADD_FILTER_SUCCESS), map(action => action.payload), - combineLatest(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), tap(([filter, provider]) => this.router.navigate(['/', 'metadata', 'provider', provider, 'filters'])) ); @@ -81,7 +81,7 @@ export class FilterCollectionEffects { updateFilter$ = this.actions$.pipe( ofType(FilterCollectionActionTypes.UPDATE_FILTER_REQUEST), map(action => action.payload), - combineLatest(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), switchMap(([filter, providerId]) => { delete filter.modifiedDate; delete filter.createdDate; @@ -100,7 +100,7 @@ export class FilterCollectionEffects { updateFilterSuccessRedirect$ = this.actions$.pipe( ofType(FilterCollectionActionTypes.UPDATE_FILTER_SUCCESS), map(action => action.payload), - combineLatest(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), tap(([filter, provider]) => this.router.navigate(['/', 'metadata', 'provider', provider, 'filters'])) ); diff --git a/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts index 32c46601c..dfe5fc107 100644 --- a/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts @@ -23,7 +23,7 @@ describe('Filter Reducer', () => { }); }); - describe(`${FilterCollectionActionTypes.SELECT_FILTER}`, () => { + describe(`${FilterCollectionActionTypes.SELECT_FILTER_REQUEST}`, () => { it('should set the selected id in the store', () => { const selectedFilterId = 'foo'; const action = new SelectFilter(selectedFilterId); @@ -55,7 +55,7 @@ describe('Filter Reducer', () => { }); }); - describe(`${FilterCollectionActionTypes.ADD_FILTER}`, () => { + describe(`${FilterCollectionActionTypes.ADD_FILTER_REQUEST}`, () => { it('should set saving to true', () => { const filter = new EntityAttributesFilterEntity({ resourceId: 'foo', createdDate: new Date().toLocaleDateString() }); const action = new AddFilterRequest(filter); diff --git a/ui/src/app/metadata/filter/reducer/collection.reducer.ts b/ui/src/app/metadata/filter/reducer/collection.reducer.ts index e71f0947c..35074b696 100644 --- a/ui/src/app/metadata/filter/reducer/collection.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.ts @@ -41,7 +41,7 @@ export function reducer(state = initialState, action: FilterCollectionActionsUni }); } - case FilterCollectionActionTypes.ADD_FILTER: + case FilterCollectionActionTypes.ADD_FILTER_REQUEST: case FilterCollectionActionTypes.UPDATE_FILTER_REQUEST: { return { ...state, @@ -65,7 +65,7 @@ export function reducer(state = initialState, action: FilterCollectionActionsUni }; } - case FilterCollectionActionTypes.SELECT_FILTER: { + case FilterCollectionActionTypes.SELECT_FILTER_REQUEST: { return { ...state, selectedFilterId: action.payload, diff --git a/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts index f9ed5b7a5..ff832e198 100644 --- a/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts +++ b/ui/src/app/metadata/filter/reducer/filter.reducer.spec.ts @@ -1,4 +1,4 @@ -import { reducer } from './filter.reducer'; +import { reducer, initialState as snapshot } from './filter.reducer'; import * as fromFilter from './filter.reducer'; import { SelectId, LoadEntityPreviewSuccess, UpdateFilterChanges, FilterActionTypes, CancelCreateFilter } from '../action/filter.action'; import { SearchActionTypes } from '../action/search.action'; @@ -18,14 +18,6 @@ import { MDUI } from '../../domain/model'; import { MetadataFilter } from '../../domain/model'; import { EntityAttributesFilterEntity } from '../../domain/entity/filter/entity-attributes-filter'; - -const snapshot: fromFilter.FilterState = { - selected: null, - changes: null, - preview: null, - saving: false -}; - const mdui: MDUI = { displayName: 'foo', informationUrl: 'bar', @@ -70,19 +62,6 @@ describe('Filter Reducer', () => { }); }); - describe(`${FilterCollectionActionTypes.ADD_FILTER} action`, () => { - it('should set saving to true', () => { - const result = reducer(snapshot, new AddFilterRequest(new EntityAttributesFilterEntity())); - expect(result.saving).toBe(true); - }); - }); - describe(`${FilterCollectionActionTypes.UPDATE_FILTER_REQUEST} action`, () => { - it('should set saving to true', () => { - const result = reducer(snapshot, new UpdateFilterRequest(new EntityAttributesFilterEntity())); - expect(result.saving).toBe(true); - }); - }); - describe(`${FilterCollectionActionTypes.ADD_FILTER_SUCCESS} action`, () => { it('should set saving to true', () => { const result = reducer(snapshot, new AddFilterSuccess(new EntityAttributesFilterEntity())); diff --git a/ui/src/app/metadata/filter/reducer/filter.reducer.ts b/ui/src/app/metadata/filter/reducer/filter.reducer.ts index 3bce96ae3..653d53740 100644 --- a/ui/src/app/metadata/filter/reducer/filter.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/filter.reducer.ts @@ -13,14 +13,12 @@ export interface FilterState { selected: string | null; changes: MetadataFilter | null; preview: MDUI | null; - saving: boolean; } export const initialState: FilterState = { selected: null, changes: null, - preview: null, - saving: false + preview: null }; export function reducer(state = initialState, action: FilterActionsUnion | SearchActionsUnion | FilterCollectionActionsUnion): FilterState { @@ -46,23 +44,6 @@ export function reducer(state = initialState, action: FilterActionsUnion | Searc } }; } - case FilterCollectionActionTypes.ADD_FILTER: - case FilterCollectionActionTypes.UPDATE_FILTER_REQUEST: { - return { - ...state, - saving: true - }; - } - case FilterCollectionActionTypes.ADD_FILTER_FAIL: - case FilterCollectionActionTypes.UPDATE_FILTER_FAIL: { - return { - ...state, - saving: false - }; - } - case FilterCollectionActionTypes.ADD_FILTER_SUCCESS: - case FilterCollectionActionTypes.UPDATE_FILTER_SUCCESS: - case SearchActionTypes.CLEAR_SEARCH: case FilterActionTypes.CANCEL_CREATE_FILTER: { return { ...initialState @@ -77,4 +58,3 @@ export function reducer(state = initialState, action: FilterActionsUnion | Searc export const getSelected = (state: FilterState) => state.selected; export const getFilterChanges = (state: FilterState) => state.changes; export const getPreview = (state: FilterState) => state.preview; -export const getSaving = (state: FilterState) => state.saving; diff --git a/ui/src/app/metadata/filter/reducer/index.ts b/ui/src/app/metadata/filter/reducer/index.ts index 951c05e51..5d9a4ecbe 100644 --- a/ui/src/app/metadata/filter/reducer/index.ts +++ b/ui/src/app/metadata/filter/reducer/index.ts @@ -32,7 +32,6 @@ export const getFilterFromState = createSelector(getFilterState, getFiltersFromS export const getSelected = createSelector(getFilterFromState, fromFilter.getSelected); export const getFilter = createSelector(getFilterFromState, fromFilter.getFilterChanges); export const getPreview = createSelector(getFilterFromState, fromFilter.getPreview); -export const getSaving = createSelector(getFilterFromState, fromFilter.getSaving); /* * Select pieces of Search Collection @@ -50,7 +49,7 @@ export const getViewingMore = createSelector(getSearchFromState, fromSearch.getV */ export const getCollectionState = createSelector(getFilterState, getCollectionFromStateFn); export const getAllFilters = createSelector(getCollectionState, fromCollection.selectAllFilters); -export const getFiltersSaving = createSelector(getCollectionState, fromCollection.getIsSaving); +export const getCollectionSaving = createSelector(getCollectionState, fromCollection.getIsSaving); export const notAddtlFilters = ['RequiredValidUntil', 'SignatureValidation', 'EntityRoleWhiteList']; export const filterTypeFn = filters => filters.filter(f => notAddtlFilters.indexOf(f['@type']) === -1); diff --git a/ui/src/app/metadata/metadata.component.ts b/ui/src/app/metadata/metadata.component.ts index 1eb87324f..df271e2fd 100644 --- a/ui/src/app/metadata/metadata.component.ts +++ b/ui/src/app/metadata/metadata.component.ts @@ -2,7 +2,6 @@ import { Component, ChangeDetectionStrategy } from '@angular/core'; import { Store } from '@ngrx/store'; import { LoadResolverRequest } from './resolver/action/collection.action'; -import { LoadFilterRequest } from './filter/action/collection.action'; import { LoadDraftRequest } from './resolver/action/draft.action'; import * as fromRoot from '../app.reducer'; import { LoadProviderRequest } from './provider/action/collection.action'; diff --git a/ui/src/app/metadata/provider/container/provider-filter-list.component.ts b/ui/src/app/metadata/provider/container/provider-filter-list.component.ts index 25dbcb0f1..92c346505 100644 --- a/ui/src/app/metadata/provider/container/provider-filter-list.component.ts +++ b/ui/src/app/metadata/provider/container/provider-filter-list.component.ts @@ -1,7 +1,7 @@ -import { Component } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { skipWhile } from 'rxjs/operators'; +import { Observable, Subject } from 'rxjs'; +import { skipWhile, distinctUntilChanged, takeUntil, map } from 'rxjs/operators'; import * as fromProvider from '../reducer'; import * as fromFilter from '../../filter/reducer'; import { MetadataFilter, MetadataProvider } from '../../domain/model'; @@ -14,7 +14,9 @@ import { UpdateFilterRequest, LoadFilterRequest } from '../../filter/action/coll templateUrl: './provider-filter-list.component.html', styleUrls: ['./provider-filter-list.component.scss'] }) -export class ProviderFilterListComponent { +export class ProviderFilterListComponent implements OnDestroy { + + private ngUnsubscribe: Subject = new Subject(); filters$: Observable; provider$: Observable; @@ -27,17 +29,23 @@ export class ProviderFilterListComponent { ) { this.filters$ = this.store.select(fromFilter.getAdditionalFilters); this.provider$ = this.store.select(fromProvider.getSelectedProvider).pipe(skipWhile(p => !p)); + this.provider$ + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe(p => { + this.store.dispatch(new LoadFilterRequest(p.resourceId)); + }); this.store.dispatch(new SetIndex('filters')); - this.provider$.subscribe(p => { - this.store.dispatch(new LoadFilterRequest(p.resourceId)); - }); - - this.isSaving$ = this.store.select(fromFilter.getFiltersSaving); + this.isSaving$ = this.store.select(fromFilter.getCollectionSaving); } toggleEnabled(filter: MetadataFilter): void { this.store.dispatch(new UpdateFilterRequest({ ...filter, filterEnabled: !filter.filterEnabled })); } + + ngOnDestroy(): void { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } } diff --git a/ui/src/app/metadata/provider/container/provider-select.component.ts b/ui/src/app/metadata/provider/container/provider-select.component.ts index 7ae2b180c..a540df912 100644 --- a/ui/src/app/metadata/provider/container/provider-select.component.ts +++ b/ui/src/app/metadata/provider/container/provider-select.component.ts @@ -26,7 +26,6 @@ export class ProviderSelectComponent implements OnDestroy { private route: ActivatedRoute ) { this.actionsSubscription = this.route.params.pipe( - distinctUntilChanged(), map(params => new SelectProviderRequest(params.providerId)) ).subscribe(store); diff --git a/ui/src/app/metadata/provider/effect/collection.effect.ts b/ui/src/app/metadata/provider/effect/collection.effect.ts index 6d135bdd1..fbf4a6c1e 100644 --- a/ui/src/app/metadata/provider/effect/collection.effect.ts +++ b/ui/src/app/metadata/provider/effect/collection.effect.ts @@ -118,21 +118,10 @@ export class CollectionEffects { map(provider => new LoadProviderRequest()) ); - @Effect({ dispatch: false }) - newFilterSuccessUpdate = this.actions$.pipe( - ofType(FilterCollectionActionTypes.ADD_FILTER_SUCCESS), - map(action => action.payload), - withLatestFrom(this.store.select(fromProvider.getSelectedProviderId)), - map(([filter, id]) => id), - tap(id => { - this.store.dispatch(new SelectProviderRequest(id)); - }) - ); - constructor( private actions$: Actions, private router: Router, private store: Store, private providerService: MetadataProviderService ) { } -} /* istanbul ignore next */ +} diff --git a/ui/src/app/metadata/provider/provider.module.ts b/ui/src/app/metadata/provider/provider.module.ts index afd8409c4..dfd95fa8f 100644 --- a/ui/src/app/metadata/provider/provider.module.ts +++ b/ui/src/app/metadata/provider/provider.module.ts @@ -28,7 +28,6 @@ import { EntityEffects } from './effect/entity.effect'; import { ProviderFilterListComponent } from './container/provider-filter-list.component'; import { ProviderEditorNavComponent } from './component/provider-editor-nav.component'; -import { ProviderResolver } from './resolver/provider.resolver'; @NgModule({ declarations: [ @@ -61,8 +60,7 @@ export class ProviderModule { return { ngModule: RootProviderModule, providers: [ - { provide: WidgetRegistry, useClass: CustomWidgetRegistry }, - ProviderResolver + { provide: WidgetRegistry, useClass: CustomWidgetRegistry } ] }; } diff --git a/ui/src/app/metadata/provider/reducer/collection.reducer.ts b/ui/src/app/metadata/provider/reducer/collection.reducer.ts index 8cc0c6f0c..7d74cb5af 100644 --- a/ui/src/app/metadata/provider/reducer/collection.reducer.ts +++ b/ui/src/app/metadata/provider/reducer/collection.reducer.ts @@ -26,7 +26,7 @@ export function reducer(state = initialState, action: ProviderCollectionActionsU case ProviderCollectionActionTypes.SELECT_PROVIDER_SUCCESS: { return adapter.upsertOne(action.payload, { ...state, - selectedProviderId: action.payload.id.toString() + selectedProviderId: action.payload.id as string }); } diff --git a/ui/src/app/metadata/provider/resolver/provider.resolver.ts b/ui/src/app/metadata/provider/resolver/provider.resolver.ts deleted file mode 100644 index 9a527b8a9..000000000 --- a/ui/src/app/metadata/provider/resolver/provider.resolver.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRoute } from '@angular/router'; -import { Store } from '@ngrx/store'; -import { Observable, of } from 'rxjs'; -import { map, distinctUntilChanged, skipWhile } from 'rxjs/operators'; - -import * as fromCollection from '../reducer'; -import { MetadataProviderService } from '../../domain/service/provider.service'; -import { MetadataProvider } from '../../domain/model'; -import { SelectProviderRequest } from '../action/collection.action'; - -/** - * Guards are hooks into the route resolution process, providing an opportunity - * to inform the router's navigation process whether the route should continue - * to activate this route. Guards must return an of true or false. - */ -@Injectable() -export class ProviderResolver implements Resolve> { - constructor( - private store: Store, - private route: ActivatedRoute - ) { } - - resolve() { - this.route.params.pipe( - distinctUntilChanged(), - map(params => { - return new SelectProviderRequest(params.providerId); - }) - ).subscribe(this.store); - - return this.store.select(fromCollection.getSelectedProvider).pipe(skipWhile(id => !id)); - } -}