From e6f851098f6287e255db4fb3d2ec74ef7dbd69f1 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 17 Aug 2018 16:04:22 +0000 Subject: [PATCH] Merged in feature/SHIBUI-730 (pull request #165) SHIBUI-730 Implemented delete functionality for filters Approved-by: Shibui Jenkins --- .../metadata/domain/service/filter.service.ts | 6 ++++-- .../filter/action/collection.action.ts | 6 +++--- .../filter/effect/collection.effect.ts | 21 +++++++++++++++++++ .../filter/reducer/collection.reducer.spec.ts | 10 ++++++++- .../filter/reducer/collection.reducer.ts | 15 +++++++++++++ ui/src/app/metadata/filter/reducer/index.ts | 2 +- .../provider-filter-list.component.html | 6 ++---- .../provider-filter-list.component.spec.ts | 7 +++++++ .../provider-filter-list.component.ts | 6 +++++- 9 files changed, 67 insertions(+), 12 deletions(-) diff --git a/ui/src/app/metadata/domain/service/filter.service.ts b/ui/src/app/metadata/domain/service/filter.service.ts index 7334ee301..92dabd797 100644 --- a/ui/src/app/metadata/domain/service/filter.service.ts +++ b/ui/src/app/metadata/domain/service/filter.service.ts @@ -18,7 +18,6 @@ export class MetadataFilterService { } find(providerId: string, filterId: string): Observable { - // console.log(id); return this.http.get(`${this.base}${this.endpoint}/${providerId}/Filters/${ filterId }`); } @@ -27,7 +26,10 @@ export class MetadataFilterService { } save(providerId: string, filter: MetadataFilter): Observable { - console.log(providerId, filter); return this.http.post(`${this.base}${this.endpoint}/${providerId}/Filters`, filter); } + + remove(providerId: string, filterId: string): Observable { + return this.http.delete(`${this.base}${this.endpoint}/${providerId}/Filters/${ filterId }`); + } } diff --git a/ui/src/app/metadata/filter/action/collection.action.ts b/ui/src/app/metadata/filter/action/collection.action.ts index c93c563d8..e2b38793d 100644 --- a/ui/src/app/metadata/filter/action/collection.action.ts +++ b/ui/src/app/metadata/filter/action/collection.action.ts @@ -99,19 +99,19 @@ export class AddFilterFail implements Action { export class RemoveFilterRequest implements Action { readonly type = FilterCollectionActionTypes.REMOVE_FILTER_REQUEST; - constructor(public payload: MetadataFilter) { } + constructor(public payload: string) { } } export class RemoveFilterSuccess implements Action { readonly type = FilterCollectionActionTypes.REMOVE_FILTER_SUCCESS; - constructor(public payload: MetadataFilter) { } + constructor(public payload: string) { } } export class RemoveFilterFail implements Action { readonly type = FilterCollectionActionTypes.REMOVE_FILTER_FAIL; - constructor(public payload: MetadataFilter) { } + constructor(public error: Error) { } } export type FilterCollectionActionsUnion = diff --git a/ui/src/app/metadata/filter/effect/collection.effect.ts b/ui/src/app/metadata/filter/effect/collection.effect.ts index bbef8c89b..779bb088f 100644 --- a/ui/src/app/metadata/filter/effect/collection.effect.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.ts @@ -113,6 +113,27 @@ export class FilterCollectionEffects { tap(([filter, provider]) => this.router.navigate(['/', 'metadata', 'provider', provider, 'filters'])) ); + @Effect() + removeFilterRequest$ = this.actions$.pipe( + ofType(FilterCollectionActionTypes.REMOVE_FILTER_REQUEST), + map(action => action.payload), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + switchMap(([filterId, providerId]) => + this.filterService.remove(providerId, filterId).pipe( + map(removed => new actions.RemoveFilterSuccess(removed)), + catchError(err => of(new actions.RemoveFilterFail(err))) + ) + ) + ); + + @Effect() + removeFilterSuccess$ = this.actions$.pipe( + ofType(FilterCollectionActionTypes.REMOVE_FILTER_SUCCESS), + map(action => action.payload), + withLatestFrom(this.store.select(fromProvider.getSelectedProviderId).pipe(skipWhile(id => !id))), + map(([filter, providerId]) => new actions.LoadFilterRequest(providerId)) + ); + constructor( private actions$: Actions, private router: Router, 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 dfe5fc107..8ff807401 100644 --- a/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.spec.ts @@ -10,7 +10,8 @@ import { UpdateFilterRequest, AddFilterSuccess, AddFilterFail, - UpdateFilterFail + UpdateFilterFail, + RemoveFilterFail } from '../action/collection.action'; import { EntityAttributesFilterEntity } from '../../domain/entity/filter/entity-attributes-filter'; @@ -93,6 +94,13 @@ describe('Filter Reducer', () => { }); }); + describe(`${FilterCollectionActionTypes.REMOVE_FILTER_FAIL}`, () => { + it('should set saving to false', () => { + const action = new RemoveFilterFail(new Error('foo')); + expect(reducer(snapshot, action).saving).toBe(false); + }); + }); + describe(`${FilterCollectionActionTypes.UPDATE_FILTER_SUCCESS}`, () => { it('should update the filter in the collection', () => { spyOn(fromFilter.adapter, 'updateOne').and.callThrough(); diff --git a/ui/src/app/metadata/filter/reducer/collection.reducer.ts b/ui/src/app/metadata/filter/reducer/collection.reducer.ts index 35074b696..1f3788c54 100644 --- a/ui/src/app/metadata/filter/reducer/collection.reducer.ts +++ b/ui/src/app/metadata/filter/reducer/collection.reducer.ts @@ -58,6 +58,7 @@ export function reducer(state = initialState, action: FilterCollectionActionsUni case FilterCollectionActionTypes.ADD_FILTER_SUCCESS: case FilterCollectionActionTypes.ADD_FILTER_FAIL: + case FilterCollectionActionTypes.REMOVE_FILTER_FAIL: case FilterCollectionActionTypes.UPDATE_FILTER_FAIL: { return { ...state, @@ -65,6 +66,20 @@ export function reducer(state = initialState, action: FilterCollectionActionsUni }; } + case FilterCollectionActionTypes.REMOVE_FILTER_SUCCESS: { + return adapter.removeOne(action.payload, { + ...state, + saving: false + }); + } + + case FilterCollectionActionTypes.REMOVE_FILTER_REQUEST: { + return { + ...state, + saving: true + }; + } + case FilterCollectionActionTypes.SELECT_FILTER_REQUEST: { return { ...state, diff --git a/ui/src/app/metadata/filter/reducer/index.ts b/ui/src/app/metadata/filter/reducer/index.ts index 5d9a4ecbe..60cbe4b34 100644 --- a/ui/src/app/metadata/filter/reducer/index.ts +++ b/ui/src/app/metadata/filter/reducer/index.ts @@ -52,7 +52,7 @@ export const getAllFilters = createSelector(getCollectionState, fromCollection.s 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); +export const filterTypeFn = filters => [...filters.filter(f => notAddtlFilters.indexOf(f['@type']) === -1)]; export const getAdditionalFilters = createSelector(getAllFilters, filterTypeFn); diff --git a/ui/src/app/metadata/provider/container/provider-filter-list.component.html b/ui/src/app/metadata/provider/container/provider-filter-list.component.html index 53e99847c..3f29393c0 100644 --- a/ui/src/app/metadata/provider/container/provider-filter-list.component.html +++ b/ui/src/app/metadata/provider/container/provider-filter-list.component.html @@ -40,7 +40,7 @@ Filter Type Enabled? Edit - + Delete @@ -79,14 +79,12 @@ Edit - diff --git a/ui/src/app/metadata/provider/container/provider-filter-list.component.spec.ts b/ui/src/app/metadata/provider/container/provider-filter-list.component.spec.ts index f24673419..7b850fc33 100644 --- a/ui/src/app/metadata/provider/container/provider-filter-list.component.spec.ts +++ b/ui/src/app/metadata/provider/container/provider-filter-list.component.spec.ts @@ -59,4 +59,11 @@ describe('Provider Filter List Component', () => { it('should instantiate the component', async(() => { expect(app).toBeTruthy(); })); + + describe('remove method', () => { + it('should dispatch an action to the store', () => { + app.remove('foo'); + expect(store.dispatch).toHaveBeenCalled(); + }); + }); }); 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 92c346505..3513590cd 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 @@ -7,7 +7,7 @@ import * as fromFilter from '../../filter/reducer'; import { MetadataFilter, MetadataProvider } from '../../domain/model'; import { NAV_FORMATS } from '../component/provider-editor-nav.component'; import { SetIndex } from '../../../wizard/action/wizard.action'; -import { UpdateFilterRequest, LoadFilterRequest } from '../../filter/action/collection.action'; +import { UpdateFilterRequest, LoadFilterRequest, RemoveFilterRequest } from '../../filter/action/collection.action'; @Component({ selector: 'provider-filter-list', @@ -44,6 +44,10 @@ export class ProviderFilterListComponent implements OnDestroy { this.store.dispatch(new UpdateFilterRequest({ ...filter, filterEnabled: !filter.filterEnabled })); } + remove(id: string): void { + this.store.dispatch(new RemoveFilterRequest(id)); + } + ngOnDestroy(): void { this.ngUnsubscribe.next(); this.ngUnsubscribe.complete();