diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index a832e3713..475bd378b 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -5,8 +5,8 @@ import 'rxjs/add/operator/map'; import * as fromRoot from './core/reducer'; import { VersionInfo } from './core/model/version'; -import { LoadProviderRequest } from './metadata-provider/action/provider.action'; -import { LoadDraftRequest } from './metadata-provider/action/draft.action'; +import { LoadProviderRequest } from './domain/action/provider-collection.action'; +import { LoadDraftRequest } from './domain/action/draft-collection.action'; import { VersionInfoLoadRequestAction } from './core/action/version.action'; @Component({ selector: 'app-root', diff --git a/ui/src/app/dashboard/action/dashboard.action.ts b/ui/src/app/dashboard/action/dashboard.action.ts index addffb8a6..7eca8a597 100644 --- a/ui/src/app/dashboard/action/dashboard.action.ts +++ b/ui/src/app/dashboard/action/dashboard.action.ts @@ -1,21 +1,21 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataEntity } from '../../domain/domain.type'; -export const TOGGLE_PROVIDER_DISPLAY = '[Dashboard] Display Provider'; -export const PREVIEW_PROVIDER = '[Dashboard] Preview Provider'; +export const TOGGLE_ENTITY_DISPLAY = '[Dashboard] Display Entity'; +export const PREVIEW_ENTITY = '[Dashboard] Preview Entity'; -export class ToggleProviderDisplay implements Action { - readonly type = TOGGLE_PROVIDER_DISPLAY; +export class ToggleEntityDisplay implements Action { + readonly type = TOGGLE_ENTITY_DISPLAY; constructor(public payload: string) { } } -export class PreviewProvider implements Action { - readonly type = PREVIEW_PROVIDER; +export class PreviewEntity implements Action { + readonly type = PREVIEW_ENTITY; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataEntity) { } } export type Actions = - | ToggleProviderDisplay - | PreviewProvider; + | ToggleEntityDisplay + | PreviewEntity; diff --git a/ui/src/app/dashboard/action/search.action.ts b/ui/src/app/dashboard/action/search.action.ts index 54dac102b..11df79fc4 100644 --- a/ui/src/app/dashboard/action/search.action.ts +++ b/ui/src/app/dashboard/action/search.action.ts @@ -1,24 +1,33 @@ import { Action } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; -export const PROVIDER_SEARCH = '[Metadata Provider Search] Provider Search'; -export const PROVIDER_SEARCH_COMPLETE = '[Metadata Provider Search] Provider Search COMPLETE'; +export const ENTITY_SEARCH = '[Metadata Entity Search] Entity Search'; +export const ENTITY_FILTER = '[Metadata Entity Filter] Entity Filter'; +export const ENTITY_SEARCH_COMPLETE = '[Metadata Entity Search] Entity Search COMPLETE'; /** * Add Provider to Collection Actions */ export class SearchAction implements Action { - readonly type = PROVIDER_SEARCH; + readonly type = ENTITY_SEARCH; - constructor(public payload) { } + constructor(public payload: string) { } +} + +export class FilterAction implements Action { + readonly type = ENTITY_FILTER; + + constructor(public payload: string) { } } export class SearchCompleteAction implements Action { - readonly type = PROVIDER_SEARCH_COMPLETE; + readonly type = ENTITY_SEARCH_COMPLETE; - constructor(public payload: MetadataProvider[]) { } + constructor(public payload: Array) { } } export type Actions = | SearchAction + | FilterAction | SearchCompleteAction; diff --git a/ui/src/app/dashboard/component/entity-item.component.html b/ui/src/app/dashboard/component/entity-item.component.html new file mode 100644 index 000000000..11e997cff --- /dev/null +++ b/ui/src/app/dashboard/component/entity-item.component.html @@ -0,0 +1,80 @@ +
+
+
+
+
+ +   + + + + + +
+
+ {{ entity.name }} + + Incomplete Form + {{ entity.entityId }} +
+
+
+ + +
+
+
+
+
+
+
+
+
+ {entity.type, select, filter {Filter} provider {Service Provider} other {other}} Name: +
+
{{ entity.name }}
+
Created Date:
+
{{ entity.createdDate | date:'medium' }}
+
+
+
+
+ {entity.type, select, filter {Filter} provider {Service Provider} other {other}} Entity ID: +
+
{{ entity.entityId }}
+
+ {entity.type, select, filter {Filter} provider {Service Provider} other {other}} Status: +
+
+ + Enabled + Disabled +
+
+ Incomplete Form +
+
+
+
+ +
+
+ +
+
+
diff --git a/ui/src/app/dashboard/component/provider-item.component.scss b/ui/src/app/dashboard/component/entity-item.component.scss similarity index 58% rename from ui/src/app/dashboard/component/provider-item.component.scss rename to ui/src/app/dashboard/component/entity-item.component.scss index 8eb28bc45..71b76bfe5 100644 --- a/ui/src/app/dashboard/component/provider-item.component.scss +++ b/ui/src/app/dashboard/component/entity-item.component.scss @@ -1,6 +1,7 @@ @import '../../../theme/palette'; .card { + background-color: rgba($light-grey, 0.5); &:focus { outline: -webkit-focus-ring-color auto 5px; } @@ -9,4 +10,10 @@ outline: -webkit-focus-ring-color auto 5px; } } + + .label-icon { + display: inline-block; + min-width: 64px; + text-align: center; + } } diff --git a/ui/src/app/dashboard/component/provider-item.component.spec.ts b/ui/src/app/dashboard/component/entity-item.component.spec.ts similarity index 68% rename from ui/src/app/dashboard/component/provider-item.component.spec.ts rename to ui/src/app/dashboard/component/entity-item.component.spec.ts index 1761022b7..4a1f3e4d9 100644 --- a/ui/src/app/dashboard/component/provider-item.component.spec.ts +++ b/ui/src/app/dashboard/component/entity-item.component.spec.ts @@ -1,11 +1,11 @@ import { TestBed, ComponentFixture } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { ProviderItemComponent } from './provider-item.component'; +import { EntityItemComponent } from './entity-item.component'; import { MetadataProvider } from '../../domain/model/metadata-provider'; describe('Provider List item', () => { - let fixture: ComponentFixture; - let instance: ProviderItemComponent; + let fixture: ComponentFixture; + let instance: EntityItemComponent; let provider = { entityId: 'foo', serviceProviderName: 'bar' } as MetadataProvider; @@ -15,12 +15,12 @@ describe('Provider List item', () => { imports: [ NoopAnimationsModule ], - declarations: [ProviderItemComponent], + declarations: [EntityItemComponent], }); - fixture = TestBed.createComponent(ProviderItemComponent); + fixture = TestBed.createComponent(EntityItemComponent); instance = fixture.componentInstance; - instance.provider = provider; + instance.entity = provider; }); it('should compile', () => { diff --git a/ui/src/app/dashboard/component/entity-item.component.ts b/ui/src/app/dashboard/component/entity-item.component.ts new file mode 100644 index 000000000..30876d33c --- /dev/null +++ b/ui/src/app/dashboard/component/entity-item.component.ts @@ -0,0 +1,23 @@ +import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { MetadataEntity, DomainTypes } from '../../domain/domain.type'; + +@Component({ + selector: 'entity-item', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './entity-item.component.html', + styleUrls: ['./entity-item.component.scss'] +}) +export class EntityItemComponent { + + types = DomainTypes; + + @Input() entity: MetadataEntity; + @Input() isOpen: boolean; + @Output() select = new EventEmitter(); + @Output() toggle = new EventEmitter(); + @Output() preview = new EventEmitter(); + @Output() delete = new EventEmitter(); + +} /* istanbul ignore next */ diff --git a/ui/src/app/dashboard/component/provider-item.component.html b/ui/src/app/dashboard/component/provider-item.component.html deleted file mode 100644 index 52753aa4b..000000000 --- a/ui/src/app/dashboard/component/provider-item.component.html +++ /dev/null @@ -1,65 +0,0 @@ -
-
-
-
-
- -
-
- {{ provider.serviceProviderName }} - - Incomplete Form - {{ provider.entityId }} -
-
-
- - -
-
-
-
-
-
-
-
-
Service Provider Name:
-
{{ provider.serviceProviderName }}
-
Created Date:
-
{{ provider.createdDate | date:'medium' }}
-
-
-
-
Service Provider Entity ID:
-
{{ provider.entityId }}
-
Service Provider Status:
-
- - Enabled - Disabled -
-
- Incomplete Form -
-
-
-
- -
-
- -
-
-
diff --git a/ui/src/app/dashboard/component/provider-item.component.ts b/ui/src/app/dashboard/component/provider-item.component.ts deleted file mode 100644 index 37ea5a2ae..000000000 --- a/ui/src/app/dashboard/component/provider-item.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; - -import { MetadataProvider } from '../../domain/model/metadata-provider'; - -@Component({ - selector: 'provider-item', - changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './provider-item.component.html', - styleUrls: ['./provider-item.component.scss'] -}) -export class ProviderItemComponent { - - @Input() provider: MetadataProvider; - @Input() isOpen: boolean; - @Output() select = new EventEmitter(); - @Output() toggle = new EventEmitter(); - @Output() preview = new EventEmitter(); - @Output() delete = new EventEmitter(); - -} /* istanbul ignore next */ diff --git a/ui/src/app/dashboard/component/provider-search.component.html b/ui/src/app/dashboard/component/provider-search.component.html index d9149e8cd..bf4d168f0 100644 --- a/ui/src/app/dashboard/component/provider-search.component.html +++ b/ui/src/app/dashboard/component/provider-search.component.html @@ -1,6 +1,6 @@
+
- - +
- +
diff --git a/ui/src/app/dashboard/container/dashboard.component.html b/ui/src/app/dashboard/container/dashboard.component.html index 96104742a..d72a179a3 100644 --- a/ui/src/app/dashboard/container/dashboard.component.html +++ b/ui/src/app/dashboard/container/dashboard.component.html @@ -3,7 +3,35 @@
- Current Metadata Sources + Current Metadata Sources +
+
+
+ +
+ +
+
    -
  • - - +
  • + +
diff --git a/ui/src/app/dashboard/container/dashboard.component.scss b/ui/src/app/dashboard/container/dashboard.component.scss new file mode 100644 index 000000000..e740b1be2 --- /dev/null +++ b/ui/src/app/dashboard/container/dashboard.component.scss @@ -0,0 +1,5 @@ +:host { + .lead { + line-height: 36px; + } +} \ No newline at end of file diff --git a/ui/src/app/dashboard/container/dashboard.component.spec.ts b/ui/src/app/dashboard/container/dashboard.component.spec.ts index 5450e676a..1c6a064bc 100644 --- a/ui/src/app/dashboard/container/dashboard.component.spec.ts +++ b/ui/src/app/dashboard/container/dashboard.component.spec.ts @@ -8,11 +8,12 @@ import { NgbModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap/modal/modal import { DashboardComponent } from './dashboard.component'; import * as fromDashboard from '../reducer'; import { ProviderSearchComponent } from '../component/provider-search.component'; -import { ProviderItemComponent } from '../component/provider-item.component'; +import { EntityItemComponent } from '../component/entity-item.component'; import { DeleteDialogComponent } from '../component/delete-dialog.component'; import { RouterStub } from '../../../testing/router.stub'; import { NgbModalStub } from '../../../testing/modal.stub'; import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { Provider } from '../../domain/entity/provider'; describe('Dashboard Page', () => { @@ -22,14 +23,14 @@ describe('Dashboard Page', () => { let modal: NgbModal; let instance: DashboardComponent; - let draft = { + let draft = new Provider({ entityId: 'foo', serviceProviderName: 'bar' - } as MetadataProvider, - provider = { + }), + provider = new Provider({ ...draft, id: '1' - } as MetadataProvider; + }); beforeEach(() => { TestBed.configureTestingModule({ @@ -49,7 +50,7 @@ describe('Dashboard Page', () => { declarations: [ DashboardComponent, ProviderSearchComponent, - ProviderItemComponent, + EntityItemComponent, DeleteDialogComponent ], }); diff --git a/ui/src/app/dashboard/container/dashboard.component.ts b/ui/src/app/dashboard/container/dashboard.component.ts index 50db138f3..13209719d 100644 --- a/ui/src/app/dashboard/container/dashboard.component.ts +++ b/ui/src/app/dashboard/container/dashboard.component.ts @@ -4,32 +4,37 @@ import { Router } from '@angular/router'; import { Observable } from 'rxjs/Observable'; import { Store } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataEntity, MetadataProvider, DomainTypes } from '../../domain/domain.type'; +import { Provider } from '../../domain/entity/provider'; import * as searchActions from '../action/search.action'; -import * as providerActions from '../../metadata-provider/action/provider.action'; -import * as draftActions from '../../metadata-provider/action/draft.action'; -import * as fromProviders from '../../metadata-provider/reducer'; +import * as providerActions from '../../domain/action/provider-collection.action'; +import * as draftActions from '../../domain/action/draft-collection.action'; import * as fromDashboard from '../reducer'; -import { ToggleProviderDisplay, PreviewProvider } from '../action/dashboard.action'; +import { ToggleEntityDisplay, PreviewEntity } from '../action/dashboard.action'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { DeleteDialogComponent } from '../component/delete-dialog.component'; @Component({ selector: 'dashboard-page', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './dashboard.component.html' + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] }) export class DashboardComponent implements OnInit { searchQuery$: Observable; - providers$: Observable; + providers$: Observable; loading$: Observable; total$: Observable; page = 1; limit = 8; - limited$: Observable; + limited$: Observable; - providersOpen$: Observable<{[key: string]: boolean}>; + entitiesOpen$: Observable<{[key: string]: boolean}>; + + filterOptions = ['all', 'filter', 'provider']; + filtering$: Observable; + filtering = 'all'; constructor( private store: Store, @@ -39,7 +44,9 @@ export class DashboardComponent implements OnInit { this.providers$ = store.select(fromDashboard.getSearchResults); this.searchQuery$ = store.select(fromDashboard.getSearchQuery); this.loading$ = store.select(fromDashboard.getSearchLoading); - this.providersOpen$ = store.select(fromDashboard.getOpenProviders); + this.entitiesOpen$ = store.select(fromDashboard.getOpenProviders); + this.filtering$ = store.select(fromDashboard.getFilterType); + this.filtering$.subscribe(f => this.filtering = f); this.total$ = this.providers$.map(list => list.length); @@ -48,16 +55,21 @@ export class DashboardComponent implements OnInit { ngOnInit (): void { this.search(); + this.changeFilter('all'); } - getPagedProviders(page: number, list$: Observable): Observable { - return list$.map((providers: MetadataProvider[]) => { + getPagedProviders(page: number, list$: Observable): Observable { + return list$.map((providers: MetadataEntity[]) => { let maxIndex = (page * this.limit) - 1, minIndex = ((page - 1) * this.limit); - return providers.filter((provider: MetadataProvider, index: number) => (maxIndex >= index && index >= minIndex) ); + return providers.filter((provider: MetadataEntity, index: number) => (maxIndex >= index && index >= minIndex) ); }); } + changeFilter(type: string): void { + this.store.dispatch(new searchActions.FilterAction(type)); + } + changePage(index: number): void { this.page = index; this.limited$ = this.getPagedProviders(index, this.providers$); @@ -68,27 +80,31 @@ export class DashboardComponent implements OnInit { this.page = 1; } - edit(provider: MetadataProvider): void { - let path = provider.id ? 'edit' : 'wizard', - id = provider.id ? provider.id : provider.entityId; - this.router.navigate(['provider', id, path]); + edit(entity: MetadataEntity): void { + if (entity.type === DomainTypes.provider) { + let path = entity.id ? 'edit' : 'wizard', + id = entity.id ? entity.id : entity.entityId; + this.router.navigate(['provider', id, path]); + } } - toggleProvider(provider: MetadataProvider): void { - this.store.dispatch(new ToggleProviderDisplay(provider.entityId)); + toggleProvider(entity: MetadataEntity): void { + this.store.dispatch(new ToggleEntityDisplay(entity.entityId)); } - openPreviewDialog(provider: MetadataProvider): void { - this.store.dispatch(new PreviewProvider(provider)); + openPreviewDialog(entity: MetadataEntity): void { + if (entity.type === DomainTypes.provider) { + this.store.dispatch(new PreviewEntity(entity)); + } } - deleteProvider(provider: MetadataProvider): void { + deleteProvider(entity: MetadataProvider): void { this.modalService .open(DeleteDialogComponent) .result .then( success => { - this.store.dispatch(new draftActions.RemoveDraftRequest(provider)); + this.store.dispatch(new draftActions.RemoveDraftRequest(entity)); }, err => { console.log('Cancelled'); diff --git a/ui/src/app/dashboard/dashboard.module.ts b/ui/src/app/dashboard/dashboard.module.ts index fc47ab9d0..d4e457116 100644 --- a/ui/src/app/dashboard/dashboard.module.ts +++ b/ui/src/app/dashboard/dashboard.module.ts @@ -7,18 +7,19 @@ import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; import { DashboardComponent } from './container/dashboard.component'; -import { ProviderItemComponent } from './component/provider-item.component'; +import { EntityItemComponent } from './component/entity-item.component'; import { ProviderSearchComponent } from './component/provider-search.component'; import { reducers } from './reducer'; import { DashboardEffects } from './effect/dashboard.effect'; import { SearchEffects } from './effect/search.effects'; import { DeleteDialogComponent } from './component/delete-dialog.component'; import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap/modal/modal.module'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; @NgModule({ declarations: [ DashboardComponent, - ProviderItemComponent, + EntityItemComponent, ProviderSearchComponent, DeleteDialogComponent ], @@ -34,7 +35,8 @@ import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap/modal/modal.module'; CommonModule, ReactiveFormsModule, NgbPaginationModule, - NgbModalModule + NgbModalModule, + NgbDropdownModule ], providers: [] }) diff --git a/ui/src/app/dashboard/effect/dashboard.effect.ts b/ui/src/app/dashboard/effect/dashboard.effect.ts index 57df5d2de..5ea39d38b 100644 --- a/ui/src/app/dashboard/effect/dashboard.effect.ts +++ b/ui/src/app/dashboard/effect/dashboard.effect.ts @@ -3,7 +3,6 @@ import { Effect, Actions } from '@ngrx/effects'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import * as dashboardActions from '../action/dashboard.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; import { PreviewProviderDialogComponent } from '../../metadata-provider/component/preview-provider-dialog.component'; @Injectable() @@ -11,7 +10,7 @@ export class DashboardEffects { @Effect({ dispatch: false }) previewProviderXml$ = this.actions$ - .ofType(dashboardActions.PREVIEW_PROVIDER) + .ofType(dashboardActions.PREVIEW_ENTITY) .map(action => action.payload) .switchMap(provider => { let modal = this.modalService.open(PreviewProviderDialogComponent, { diff --git a/ui/src/app/dashboard/effect/search.effects.ts b/ui/src/app/dashboard/effect/search.effects.ts index d57132de1..fac087ecb 100644 --- a/ui/src/app/dashboard/effect/search.effects.ts +++ b/ui/src/app/dashboard/effect/search.effects.ts @@ -1,32 +1,59 @@ import { Injectable } from '@angular/core'; import { Effect, Actions } from '@ngrx/effects'; import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs/observable'; +import { combineLatest } from 'rxjs/observable/combineLatest'; +import 'rxjs/add/operator/combineLatest'; -import * as providerSearch from '../action/search.action'; -import * as fromProviders from '../../metadata-provider/reducer'; +import * as entitySearch from '../action/search.action'; +import * as fromCollections from '../../domain/reducer'; +import * as fromDashboard from '../reducer'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; +import { Provider } from '../../domain/entity/provider'; +import { Filter } from '../../domain/entity/filter'; +import { MetadataEntity, DomainTypes } from '../../domain/domain.type'; @Injectable() export class SearchEffects { + @Effect() + filter$ = this.actions$ + .ofType(entitySearch.ENTITY_FILTER) + .switchMap(filter => this.performSearch()); @Effect() search$ = this.actions$ - .ofType(providerSearch.PROVIDER_SEARCH) + .ofType(entitySearch.ENTITY_SEARCH) .map(action => action.payload) - .switchMap(query => - this.store.select(fromProviders.getAllProviders) - .map(descriptors => { - return descriptors.filter( - p => p.entityId.toLocaleLowerCase().match(query.toLocaleLowerCase()) || - p.serviceProviderName.toLocaleLowerCase().match(query.toLocaleLowerCase())); - }) - .map(providers => new providerSearch.SearchCompleteAction(providers)) - ); + .switchMap(query => this.performSearch()); + + matcher = (value, query) => value ? value.toLocaleLowerCase().match(query.toLocaleLowerCase()) : false; constructor( private descriptorService: EntityDescriptorService, private actions$: Actions, - private store: Store + private store: Store ) { } + + private performSearch(): Observable { + return combineLatest( + this.store.select(fromCollections.getAllProviders), + this.store.select(fromCollections.getAllFilters), + (p, f): MetadataEntity[] => [].concat( + f.map(filter => new Filter(filter)), + p.map(provider => new Provider(provider)) + ) + ) + .combineLatest( + this.store.select(fromDashboard.getFilterType), + (entities, type) => type !== 'all' ? entities.filter(e => e.type === type) : entities + ) + .combineLatest( + this.store.select(fromDashboard.getSearchQuery), + (entities, term) => entities.filter( + e => this.matcher(e.name, term) || this.matcher(e.entityId, term) + ) + ) + .map(providers => new entitySearch.SearchCompleteAction(providers)); + } } /* istanbul ignore next */ diff --git a/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts b/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts index 26ad5e24d..93662e652 100644 --- a/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts +++ b/ui/src/app/dashboard/reducer/dashboard.reducer.spec.ts @@ -1,6 +1,6 @@ import { reducer } from './dashboard.reducer'; import * as fromDashboard from './dashboard.reducer'; -import { ToggleProviderDisplay } from '../action/dashboard.action'; +import { ToggleEntityDisplay } from '../action/dashboard.action'; describe('Dashboard Reducer', () => { const initialState: fromDashboard.State = { @@ -18,7 +18,7 @@ describe('Dashboard Reducer', () => { describe('Toggle Provider Display', () => { it('should toggle the selected providers open state', () => { const id = 'foo'; - const action = new ToggleProviderDisplay(id); + const action = new ToggleEntityDisplay(id); const result = reducer(initialState, action); diff --git a/ui/src/app/dashboard/reducer/dashboard.reducer.ts b/ui/src/app/dashboard/reducer/dashboard.reducer.ts index 6eb43b77b..a71c8b812 100644 --- a/ui/src/app/dashboard/reducer/dashboard.reducer.ts +++ b/ui/src/app/dashboard/reducer/dashboard.reducer.ts @@ -1,7 +1,6 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import * as dashboard from '../action/dashboard.action'; -import * as provider from '../../metadata-provider/action/provider.action'; import * as fromRoot from '../../core/reducer'; export interface State { @@ -14,7 +13,7 @@ export const initialState: State = { export function reducer(state = initialState, action: dashboard.Actions): State { switch (action.type) { - case dashboard.TOGGLE_PROVIDER_DISPLAY: { + case dashboard.TOGGLE_ENTITY_DISPLAY: { return Object.assign({}, state, { providersOpen: { ...state.providersOpen, diff --git a/ui/src/app/dashboard/reducer/index.ts b/ui/src/app/dashboard/reducer/index.ts index 48437443f..4fb55bf4e 100644 --- a/ui/src/app/dashboard/reducer/index.ts +++ b/ui/src/app/dashboard/reducer/index.ts @@ -2,7 +2,6 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; import * as fromRoot from '../../core/reducer'; import * as fromDashboard from './dashboard.reducer'; import * as fromSearch from './search.reducer'; -import * as fromProviders from '../../metadata-provider/reducer'; export interface DashboardState { dashboard: fromDashboard.State; @@ -34,6 +33,10 @@ export const getSearchQuery = createSelector( getSearchState, fromSearch.getQuery ); +export const getFilterType = createSelector( + getSearchState, + fromSearch.getFilter +); export const getSearchLoading = createSelector( getSearchState, fromSearch.getLoading diff --git a/ui/src/app/dashboard/reducer/search.reducer.ts b/ui/src/app/dashboard/reducer/search.reducer.ts index a2c23ed9b..c2a40cae9 100644 --- a/ui/src/app/dashboard/reducer/search.reducer.ts +++ b/ui/src/app/dashboard/reducer/search.reducer.ts @@ -1,35 +1,45 @@ import * as searchActions from '../action/search.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; export interface SearchState { - entities: MetadataProvider[]; + entities: (MetadataProvider | MetadataFilter)[]; loading: boolean; query: string; + type: string; } const initialState: SearchState = { entities: [], loading: false, query: '', + type: 'all' }; export function reducer(state = initialState, action: searchActions.Actions): SearchState { switch (action.type) { - case searchActions.PROVIDER_SEARCH: { - const query = action.payload; - + case searchActions.ENTITY_SEARCH: { return { ...state, - query, + query: action.payload, loading: true, }; } - case searchActions.PROVIDER_SEARCH_COMPLETE: { + case searchActions.ENTITY_FILTER: { + return { + ...state, + type: action.payload, + loading: true + }; + } + + case searchActions.ENTITY_SEARCH_COMPLETE: { return { entities: action.payload, loading: false, query: state.query, + type: state.type }; } @@ -44,3 +54,5 @@ export const getEntities = (state: SearchState) => state.entities; export const getQuery = (state: SearchState) => state.query; export const getLoading = (state: SearchState) => state.loading; + +export const getFilter = (state: SearchState) => state.type; \ No newline at end of file diff --git a/ui/src/app/metadata-provider/action/draft.action.ts b/ui/src/app/domain/action/draft-collection.action.ts similarity index 97% rename from ui/src/app/metadata-provider/action/draft.action.ts rename to ui/src/app/domain/action/draft-collection.action.ts index 41a4d7b7c..ede97cd2c 100644 --- a/ui/src/app/metadata-provider/action/draft.action.ts +++ b/ui/src/app/domain/action/draft-collection.action.ts @@ -1,5 +1,5 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../model/metadata-provider'; export const FIND = '[Metadata Draft] Find'; export const SELECT = '[Metadata Draft] Select'; diff --git a/ui/src/app/domain/action/filter-collection.action.ts b/ui/src/app/domain/action/filter-collection.action.ts new file mode 100644 index 000000000..5ad93b9e7 --- /dev/null +++ b/ui/src/app/domain/action/filter-collection.action.ts @@ -0,0 +1,29 @@ +import { Action } from '@ngrx/store'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; + +export const SAVE_FILTER = '[Filter] Save Filter'; +export const SAVE_FILTER_SUCCESS = '[Filter] Save Filter Success'; +export const SAVE_FILTER_ERROR = '[Filter] Save Filter Error'; + +export class SaveFilter implements Action { + readonly type = SAVE_FILTER; + + constructor(public payload: Partial) { } +} + +export class SaveFilterSuccess implements Action { + readonly type = SAVE_FILTER_SUCCESS; + + constructor(public payload: MetadataFilter) { } +} + +export class SaveFilterError implements Action { + readonly type = SAVE_FILTER_ERROR; + + constructor(public payload: Error) { } +} + +export type Actions = + | SaveFilter + | SaveFilterSuccess + | SaveFilterError; diff --git a/ui/src/app/metadata-provider/action/provider.action.ts b/ui/src/app/domain/action/provider-collection.action.ts similarity index 98% rename from ui/src/app/metadata-provider/action/provider.action.ts rename to ui/src/app/domain/action/provider-collection.action.ts index 969f37b0f..5c8720080 100644 --- a/ui/src/app/metadata-provider/action/provider.action.ts +++ b/ui/src/app/domain/action/provider-collection.action.ts @@ -1,5 +1,5 @@ import { Action } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataProvider } from '../model/metadata-provider'; export const FIND = '[Metadata Provider] Find'; export const SELECT = '[Metadata Provider] Select'; diff --git a/ui/src/app/domain/domain.module.ts b/ui/src/app/domain/domain.module.ts index 91ae7e2ce..8d54d372c 100644 --- a/ui/src/app/domain/domain.module.ts +++ b/ui/src/app/domain/domain.module.ts @@ -1,10 +1,19 @@ import { NgModule, ModuleWithProviders } from '@angular/core'; +import { StoreModule } from '@ngrx/store'; +import { EffectsModule } from '@ngrx/effects'; import { EntityDescriptorService } from './service/entity-descriptor.service'; import { ListValuesService } from './service/list-values.service'; import { ProviderStatusEmitter, ProviderValueEmitter } from './service/provider-change-emitter.service'; import { EntityIdService } from './service/entity-id.service'; import { EntityDraftService } from './service/entity-draft.service'; +import { MetadataFilterService } from './service/filter.service'; + +import { reducers } from './reducer'; +import { DraftCollectionEffects } from './effect/draft-collection.effects'; +import { ProviderCollectionEffects } from './effect/provider-collection.effects'; +import { FilterCollectionEffects } from './effect/filter-collection.effect'; + @NgModule({ declarations: [], entryComponents: [], @@ -22,13 +31,18 @@ export class DomainModule { EntityDraftService, ListValuesService, ProviderStatusEmitter, - ProviderValueEmitter + ProviderValueEmitter, + MetadataFilterService ] }; } } @NgModule({ - imports: [], + imports: [ + DomainModule, + StoreModule.forFeature('collections', reducers), + EffectsModule.forFeature([FilterCollectionEffects, DraftCollectionEffects, ProviderCollectionEffects]) + ], }) export class RootDomainModule { } diff --git a/ui/src/app/domain/domain.type.ts b/ui/src/app/domain/domain.type.ts new file mode 100644 index 000000000..3b6a9c489 --- /dev/null +++ b/ui/src/app/domain/domain.type.ts @@ -0,0 +1,14 @@ +import { MetadataFilter } from './model/metadata-filter'; +import { MetadataProvider } from './model/metadata-provider'; + +export * from './model/metadata-provider'; +export * from './model/metadata-filter'; + +export enum DomainTypes { + filter = 'filter', + provider = 'provider' +} + +export type MetadataEntity = + | MetadataFilter + | MetadataProvider; diff --git a/ui/src/app/metadata-provider/effect/draft.effects.ts b/ui/src/app/domain/effect/draft-collection.effects.ts similarity index 96% rename from ui/src/app/metadata-provider/effect/draft.effects.ts rename to ui/src/app/domain/effect/draft-collection.effects.ts index e422e9144..c83c68033 100644 --- a/ui/src/app/metadata-provider/effect/draft.effects.ts +++ b/ui/src/app/domain/effect/draft-collection.effects.ts @@ -4,12 +4,12 @@ import { Action } from '@ngrx/store'; import { Observable } from 'rxjs/Observable'; import { Router } from '@angular/router'; -import * as draftActions from '../action/draft.action'; +import * as draftActions from '../action/draft-collection.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { EntityDraftService } from '../../domain/service/entity-draft.service'; @Injectable() -export class DraftEffects { +export class DraftCollectionEffects { @Effect() loadDrafts$ = this.actions$ diff --git a/ui/src/app/domain/effect/filter-collection.effect.ts b/ui/src/app/domain/effect/filter-collection.effect.ts new file mode 100644 index 000000000..592067c10 --- /dev/null +++ b/ui/src/app/domain/effect/filter-collection.effect.ts @@ -0,0 +1,43 @@ +import { Injectable } from '@angular/core'; +import { Effect, Actions } from '@ngrx/effects'; +import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs/Observable'; +import { Router } from '@angular/router'; +import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; + +import 'rxjs/add/observable/fromPromise'; +import 'rxjs/add/observable/of'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/switchMap'; +import 'rxjs/add/operator/withLatestFrom'; + +import * as actions from '../action/filter-collection.action'; +import * as fromFilter from '../reducer'; + +import { EntityIdService } from '../../domain/service/entity-id.service'; +import { MetadataFilterService } from '../service/filter.service'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; + +@Injectable() +export class FilterCollectionEffects { + + @Effect() + saveFilter$ = this.actions$ + .ofType(actions.SAVE_FILTER) + .map(action => action.payload) + .switchMap(unsaved => + this.filterService + .save(unsaved as MetadataFilter) + .map(saved => new actions.SaveFilterSuccess(saved)) + .catch(error => Observable.of(new actions.SaveFilterError(error))) + ); + + constructor( + private actions$: Actions, + private router: Router, + private modalService: NgbModal, + private idService: EntityIdService, + private filterService: MetadataFilterService, + private store: Store + ) { } +} diff --git a/ui/src/app/metadata-provider/effect/provider.effects.ts b/ui/src/app/domain/effect/provider-collection.effects.ts similarity index 96% rename from ui/src/app/metadata-provider/effect/provider.effects.ts rename to ui/src/app/domain/effect/provider-collection.effects.ts index 689448d59..90cb2cea5 100644 --- a/ui/src/app/metadata-provider/effect/provider.effects.ts +++ b/ui/src/app/domain/effect/provider-collection.effects.ts @@ -4,13 +4,13 @@ import { Action } from '@ngrx/store'; import { Observable } from 'rxjs/Observable'; import { Router } from '@angular/router'; -import * as providerActions from '../action/provider.action'; -import * as draftActions from '../action/draft.action'; +import * as providerActions from '../action/provider-collection.action'; +import * as draftActions from '../action/draft-collection.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; @Injectable() -export class ProviderEffects { +export class ProviderCollectionEffects { @Effect() loadProviders$ = this.actions$ diff --git a/ui/src/app/domain/entity/filter.ts b/ui/src/app/domain/entity/filter.ts index f645bb243..1e4c7385d 100644 --- a/ui/src/app/domain/entity/filter.ts +++ b/ui/src/app/domain/entity/filter.ts @@ -1,4 +1,5 @@ import { MetadataFilter, RelyingPartyOverrides } from '../model/metadata-filter'; +import { DomainTypes } from '../domain.type'; export class Filter implements MetadataFilter { id = ''; @@ -19,4 +20,16 @@ export class Filter implements MetadataFilter { constructor(obj?: Partial) { Object.assign(this, obj); } + + get name(): string { + return this.filterName; + } + + get enabled(): boolean { + return this.filterEnabled; + } + + get type(): string { + return DomainTypes.filter; + } } diff --git a/ui/src/app/domain/entity/provider.spec.ts b/ui/src/app/domain/entity/provider.spec.ts index ac1139014..c5607e257 100644 --- a/ui/src/app/domain/entity/provider.spec.ts +++ b/ui/src/app/domain/entity/provider.spec.ts @@ -3,7 +3,7 @@ import { MetadataProvider } from '../model/metadata-provider'; describe('Provider construct', () => { - const config: MetadataProvider = { + const config = { id: 'foo', entityId: 'string', serviceProviderName: 'string', diff --git a/ui/src/app/domain/entity/provider.ts b/ui/src/app/domain/entity/provider.ts index 25d0c12fb..9f495b69a 100644 --- a/ui/src/app/domain/entity/provider.ts +++ b/ui/src/app/domain/entity/provider.ts @@ -10,6 +10,7 @@ import { IdpSsoDescriptor, RelyingPartyOverrides } from '../model/metadata-provider'; +import { DomainTypes } from '../domain.type'; export class Provider implements MetadataProvider { id = ''; @@ -48,4 +49,16 @@ export class Provider implements MetadataProvider { constructor(descriptor?: Partial) { Object.assign(this, descriptor); } + + get name(): string { + return this.serviceProviderName; + } + + get enabled(): boolean { + return this.serviceEnabled; + } + + get type(): string { + return DomainTypes.provider; + } } diff --git a/ui/src/app/domain/model/metadata-base.ts b/ui/src/app/domain/model/metadata-base.ts index e53669ecc..2b5c8d17a 100644 --- a/ui/src/app/domain/model/metadata-base.ts +++ b/ui/src/app/domain/model/metadata-base.ts @@ -10,4 +10,8 @@ export interface MetadataBase { id?: string; createdDate?: string; modifiedDate?: string; + + name: string; + enabled: boolean; + type: string; } diff --git a/ui/src/app/metadata-provider/reducer/draft.reducer.spec.ts b/ui/src/app/domain/reducer/draft-collection.reducer.spec.ts similarity index 87% rename from ui/src/app/metadata-provider/reducer/draft.reducer.spec.ts rename to ui/src/app/domain/reducer/draft-collection.reducer.spec.ts index 21ec93b86..584ce8161 100644 --- a/ui/src/app/metadata-provider/reducer/draft.reducer.spec.ts +++ b/ui/src/app/domain/reducer/draft-collection.reducer.spec.ts @@ -1,13 +1,13 @@ -import { reducer } from './draft.reducer'; -import * as fromDrafts from './draft.reducer'; -import * as draftActions from '../action/draft.action'; +import { reducer } from './draft-collection.reducer'; +import * as fromDrafts from './draft-collection.reducer'; +import * as draftActions from '../action/draft-collection.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; let drafts: MetadataProvider[] = [ - { entityId: 'foo', serviceProviderName: 'bar' } as MetadataProvider, - { entityId: 'baz', serviceProviderName: 'fin' } as MetadataProvider - ], - snapshot: fromDrafts.DraftState = { + { entityId: 'foo', serviceProviderName: 'bar' } as MetadataProvider, + { entityId: 'baz', serviceProviderName: 'fin' } as MetadataProvider +], + snapshot: fromDrafts.DraftCollectionState = { ids: [drafts[0].entityId, drafts[1].entityId], drafts: { [drafts[0].entityId]: drafts[0], @@ -17,7 +17,7 @@ let drafts: MetadataProvider[] = [ }; describe('Draft Reducer', () => { - const initialState: fromDrafts.DraftState = { + const initialState: fromDrafts.DraftCollectionState = { ids: [], drafts: {}, selectedDraftId: null @@ -54,7 +54,7 @@ describe('Draft Reducer', () => { selectedDraftId: null }; const action = new draftActions.UpdateDraftSuccess(changes); - const result = reducer({...snapshot}, action); + const result = reducer({ ...snapshot }, action); expect(result).toEqual( Object.assign({}, initialState, expected) @@ -107,7 +107,7 @@ describe('Draft Reducer', () => { drafts: {}, selectedDraftId: null, })).toBeNull(); - expect(fromDrafts.getSelectedId(Object.assign({}, snapshot, {selectedDraftId: 'foo'}))).toEqual('foo'); + expect(fromDrafts.getSelectedId(Object.assign({}, snapshot, { selectedDraftId: 'foo' }))).toEqual('foo'); }); it('getSelected should return the selected entity by id', () => { diff --git a/ui/src/app/metadata-provider/reducer/draft.reducer.ts b/ui/src/app/domain/reducer/draft-collection.reducer.ts similarity index 82% rename from ui/src/app/metadata-provider/reducer/draft.reducer.ts rename to ui/src/app/domain/reducer/draft-collection.reducer.ts index 5db09e04a..dace979c3 100644 --- a/ui/src/app/metadata-provider/reducer/draft.reducer.ts +++ b/ui/src/app/domain/reducer/draft-collection.reducer.ts @@ -1,21 +1,21 @@ import { createSelector } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import * as providerAction from '../action/provider.action'; -import * as draftAction from '../action/draft.action'; +import * as providerAction from '../action/provider-collection.action'; +import * as draftAction from '../action/draft-collection.action'; -export interface DraftState { +export interface DraftCollectionState { ids: string[]; drafts: { [id: string]: MetadataProvider }; selectedDraftId: string | null; } -export const initialState: DraftState = { +export const initialState: DraftCollectionState = { ids: [], drafts: {}, selectedDraftId: null, }; -export function reducer(state = initialState, action: draftAction.Actions): DraftState { +export function reducer(state = initialState, action: draftAction.Actions): DraftCollectionState { switch (action.type) { case draftAction.LOAD_DRAFT_SUCCESS: { const providers = action.payload; @@ -72,9 +72,9 @@ export function reducer(state = initialState, action: draftAction.Actions): Draf } } -export const getEntities = (state: DraftState) => state.drafts; -export const getIds = (state: DraftState) => state.ids; -export const getSelectedId = (state: DraftState) => state.selectedDraftId; +export const getEntities = (state: DraftCollectionState) => state.drafts; +export const getIds = (state: DraftCollectionState) => state.ids; +export const getSelectedId = (state: DraftCollectionState) => state.selectedDraftId; export const getSelected = createSelector( getEntities, getSelectedId, diff --git a/ui/src/app/domain/reducer/filter-collection.reducer.spec.ts b/ui/src/app/domain/reducer/filter-collection.reducer.spec.ts new file mode 100644 index 000000000..799ae2b9d --- /dev/null +++ b/ui/src/app/domain/reducer/filter-collection.reducer.spec.ts @@ -0,0 +1,17 @@ +import { reducer } from './filter-collection.reducer'; +import * as fromFilter from './filter-collection.reducer'; +import * as actions from '../action/filter-collection.action'; + +const snapshot: fromFilter.FilterCollectionState = { + filters: [] +}; + +describe('Filter Reducer', () => { + describe('undefined action', () => { + it('should return the default state', () => { + const result = reducer(snapshot, {} as any); + + expect(result).toEqual(snapshot); + }); + }); +}); diff --git a/ui/src/app/metadata-filter/reducer/collection.reducer.ts b/ui/src/app/domain/reducer/filter-collection.reducer.ts similarity index 62% rename from ui/src/app/metadata-filter/reducer/collection.reducer.ts rename to ui/src/app/domain/reducer/filter-collection.reducer.ts index c3294d8f0..f2c6c738c 100644 --- a/ui/src/app/metadata-filter/reducer/collection.reducer.ts +++ b/ui/src/app/domain/reducer/filter-collection.reducer.ts @@ -1,17 +1,18 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import * as filter from '../action/filter.action'; +import * as filter from '../action/filter-collection.action'; import * as fromRoot from '../../core/reducer'; +import { MetadataFilter } from '../domain.type'; -export interface CollectionState { - filters: MetadataProvider[]; +export interface FilterCollectionState { + filters: MetadataFilter[]; } -export const initialState: CollectionState = { +export const initialState: FilterCollectionState = { filters: [] }; -export function reducer(state = initialState, action: filter.Actions): CollectionState { +export function reducer(state = initialState, action: filter.Actions): FilterCollectionState { switch (action.type) { case filter.SAVE_FILTER_SUCCESS: { return { @@ -27,4 +28,4 @@ export function reducer(state = initialState, action: filter.Actions): Collectio } } -export const getFilters = (state: CollectionState) => state.filters; +export const getFilters = (state: FilterCollectionState) => state.filters; diff --git a/ui/src/app/metadata-provider/reducer/index.ts b/ui/src/app/domain/reducer/index.ts similarity index 56% rename from ui/src/app/metadata-provider/reducer/index.ts rename to ui/src/app/domain/reducer/index.ts index a536cf8b0..05a84a405 100644 --- a/ui/src/app/metadata-provider/reducer/index.ts +++ b/ui/src/app/domain/reducer/index.ts @@ -1,40 +1,61 @@ -import { createSelector, createFeatureSelector } from '@ngrx/store'; -import * as fromProvider from './provider.reducer'; -import * as fromDraft from './draft.reducer'; +import { createSelector, createFeatureSelector, ActionReducerMap } from '@ngrx/store'; +import * as fromFilter from './filter-collection.reducer'; +import * as fromProvider from './provider-collection.reducer'; +import * as fromDraft from './draft-collection.reducer'; import * as fromRoot from '../../app.reducer'; -import { DraftState } from './draft.reducer'; -export interface ProviderState { - providers: fromProvider.ProviderState; - drafts: fromDraft.DraftState; +export interface CollectionState { + filters: fromFilter.FilterCollectionState; + providers: fromProvider.ProviderCollectionState; + drafts: fromDraft.DraftCollectionState; } -export interface State extends fromRoot.State { - providers: ProviderState; -} - -export const reducers = { +export const reducers: ActionReducerMap = { + filters: fromFilter.reducer, providers: fromProvider.reducer, drafts: fromDraft.reducer }; +export interface State extends fromRoot.State { + 'collections': CollectionState; +} + +export const getCollectionState = createFeatureSelector('collections'); + +/* + * Select pieces of Collection State - Functions +*/ +export const getFiltersFromStateFn = (state: CollectionState) => state.filters; +export const getProvidersStateFn = (state: CollectionState) => state.providers; +export const getDraftsStateFn = (state: CollectionState) => state.drafts; + +export const getFilterEntityState = createSelector(getCollectionState, getFiltersFromStateFn); +export const getProviderEntityState = createSelector(getCollectionState, getProvidersStateFn); +export const getDraftEntityState = createSelector(getCollectionState, getDraftsStateFn); + +/* + * Utility functions +*/ + export const combineAllFn = (d, p) => [...p, ...d]; export const doesExistFn = (ids, selected) => ids.indexOf(selected) > -1; export const getInCollectionFn = (entities, selectedId) => selectedId && entities[selectedId]; export const getEntityIdsFn = list => list.map(entity => entity.entityId); -export const getProvidersFromStateFn = state => state.providers; -export const getDraftsFromStateFn = state => state.drafts; -export const getProviderState = createFeatureSelector('providers'); -export const getProviderEntityState = createSelector(getProviderState, getProvidersFromStateFn); +/* + * Select pieces of Provider Collection +*/ + export const getProviderEntities = createSelector(getProviderEntityState, fromProvider.getEntities); export const getSelectedProviderId = createSelector(getProviderEntityState, fromProvider.getSelectedId); export const getSelectedProvider = createSelector(getProviderEntities, getSelectedProviderId, getInCollectionFn); export const getProviderIds = createSelector(getProviderEntityState, fromProvider.getIds); export const getProviderCollection = createSelector(getProviderEntityState, getProviderIds, fromProvider.getAll); -export const getDraftState = createFeatureSelector('providers'); -export const getDraftEntityState = createSelector(getDraftState, getDraftsFromStateFn); +/* + * Select pieces of Draft Collection +*/ + export const getDraftEntities = createSelector(getDraftEntityState, fromDraft.getEntities); export const getSelectedDraftId = createSelector(getDraftEntityState, fromDraft.getSelectedId); export const getSelectedDraft = createSelector(getDraftEntities, getSelectedDraftId, getInCollectionFn); @@ -42,6 +63,17 @@ export const getDraftIds = createSelector(getDraftEntityState, fromDraft.getIds) export const getDraftCollection = createSelector(getDraftEntityState, getDraftIds, fromDraft.getAll); export const isSelectedProviderInCollection = createSelector(getProviderIds, getSelectedProviderId, doesExistFn); export const isSelectedDraftInCollection = createSelector(getDraftIds, getSelectedDraftId, doesExistFn); + +/* + * Select pieces of Filter Collection +*/ + +export const getAllFilters = createSelector(getFilterEntityState, fromFilter.getFilters); + +/* + * Combine pieces of Collection State +*/ + export const getAllProviders = createSelector(getDraftCollection, getProviderCollection, combineAllFn); export const getAllProviderIds = createSelector(getDraftIds, getProviderIds, combineAllFn); diff --git a/ui/src/app/metadata-provider/reducer/provider.reducer.spec.ts b/ui/src/app/domain/reducer/provider-collection.reducer.spec.ts similarity index 85% rename from ui/src/app/metadata-provider/reducer/provider.reducer.spec.ts rename to ui/src/app/domain/reducer/provider-collection.reducer.spec.ts index 71239137a..09a34ed9a 100644 --- a/ui/src/app/metadata-provider/reducer/provider.reducer.spec.ts +++ b/ui/src/app/domain/reducer/provider-collection.reducer.spec.ts @@ -1,13 +1,13 @@ -import { reducer } from './provider.reducer'; -import * as fromProvider from './provider.reducer'; -import * as providerActions from '../action/provider.action'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { reducer } from './provider-collection.reducer'; +import * as fromProvider from './provider-collection.reducer'; +import * as providerActions from '../action/provider-collection.action'; +import { MetadataProvider } from '../model/metadata-provider'; let providers: MetadataProvider[] = [ - { id: '1', entityId: 'foo', serviceProviderName: 'bar' } as MetadataProvider, - { id: '2', entityId: 'baz', serviceProviderName: 'fin' } as MetadataProvider - ], - snapshot: fromProvider.ProviderState = { + { id: '1', entityId: 'foo', serviceProviderName: 'bar' } as MetadataProvider, + { id: '2', entityId: 'baz', serviceProviderName: 'fin' } as MetadataProvider +], + snapshot: fromProvider.ProviderCollectionState = { ids: [providers[0].id, providers[1].id], entities: { [providers[0].id]: providers[0], @@ -17,7 +17,7 @@ let providers: MetadataProvider[] = [ }; describe('Provider Reducer', () => { - const initialState: fromProvider.ProviderState = { + const initialState: fromProvider.ProviderCollectionState = { ids: [], entities: {}, selectedProviderId: null, @@ -98,7 +98,7 @@ describe('Provider Reducer', () => { it('should not update state if the provider id does not exist', () => { let id = providers[0].id, expected = snapshot; - const action = new providerActions.SelectProviderSuccess({...providers[0], id: 'foo'}); + const action = new providerActions.SelectProviderSuccess({ ...providers[0], id: 'foo' }); const result = reducer({ ...snapshot }, action); expect(result).toEqual( diff --git a/ui/src/app/metadata-provider/reducer/provider.reducer.ts b/ui/src/app/domain/reducer/provider-collection.reducer.ts similarity index 86% rename from ui/src/app/metadata-provider/reducer/provider.reducer.ts rename to ui/src/app/domain/reducer/provider-collection.reducer.ts index 0dd8f10f6..309807da5 100644 --- a/ui/src/app/metadata-provider/reducer/provider.reducer.ts +++ b/ui/src/app/domain/reducer/provider-collection.reducer.ts @@ -1,20 +1,20 @@ import { createSelector } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import * as provider from '../action/provider.action'; +import * as provider from '../action/provider-collection.action'; -export interface ProviderState { +export interface ProviderCollectionState { ids: string[]; entities: { [id: string]: MetadataProvider }; selectedProviderId: string | null; } -export const initialState: ProviderState = { +export const initialState: ProviderCollectionState = { ids: [], entities: {}, selectedProviderId: null }; -export function reducer(state = initialState, action: provider.Actions): ProviderState { +export function reducer(state = initialState, action: provider.Actions): ProviderCollectionState { switch (action.type) { case provider.LOAD_PROVIDER_SUCCESS: { const providers = action.payload; @@ -84,9 +84,9 @@ export function reducer(state = initialState, action: provider.Actions): Provide } } -export const getEntities = (state: ProviderState) => state.entities; -export const getIds = (state: ProviderState) => state.ids; -export const getSelectedId = (state: ProviderState) => state.selectedProviderId; +export const getEntities = (state: ProviderCollectionState) => state.entities; +export const getIds = (state: ProviderCollectionState) => state.ids; +export const getSelectedId = (state: ProviderCollectionState) => state.selectedProviderId; export const getSelected = createSelector( getEntities, getSelectedId, diff --git a/ui/src/app/metadata-filter/service/filter.service.ts b/ui/src/app/domain/service/filter.service.ts similarity index 51% rename from ui/src/app/metadata-filter/service/filter.service.ts rename to ui/src/app/domain/service/filter.service.ts index 690a127ae..f42121359 100644 --- a/ui/src/app/metadata-filter/service/filter.service.ts +++ b/ui/src/app/domain/service/filter.service.ts @@ -3,7 +3,7 @@ import 'rxjs/add/operator/concat'; import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; @Injectable() export class MetadataFilterService { @@ -11,8 +11,13 @@ export class MetadataFilterService { constructor( private http: HttpClient ) { } - save(provider: MetadataProvider): Observable { - const saved = { ...provider, id: Date.now() + '_' + Math.random().toString(36).substr(2, 9) }; + save(provider: MetadataFilter): Observable { + const saved = { + ...provider, + id: Date.now() + '_' + Math.random().toString(36).substr(2, 9), + createdDate: '2018-04-05T09:07:13.730', + updatedDate: '2018-04-05T09:07:13.730' + }; return Observable.of(saved); } } diff --git a/ui/src/app/edit-provider/component/unsaved-dialog.component.ts b/ui/src/app/edit-provider/component/unsaved-dialog.component.ts index add2f3b59..d412d069e 100644 --- a/ui/src/app/edit-provider/component/unsaved-dialog.component.ts +++ b/ui/src/app/edit-provider/component/unsaved-dialog.component.ts @@ -6,7 +6,7 @@ import { Subject } from 'rxjs/Subject'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import * as fromEditor from '../reducer'; -import { UpdateDraftRequest } from '../../metadata-provider/action/draft.action'; +import { UpdateDraftRequest } from '../../domain/action/draft-collection.action'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; import { SaveChanges, CancelChanges } from '../action/editor.action'; diff --git a/ui/src/app/edit-provider/component/wizard-nav.component.ts b/ui/src/app/edit-provider/component/wizard-nav.component.ts index 9e717c0c4..33450e24b 100644 --- a/ui/src/app/edit-provider/component/wizard-nav.component.ts +++ b/ui/src/app/edit-provider/component/wizard-nav.component.ts @@ -5,7 +5,6 @@ import { Store } from '@ngrx/store'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/switchMap'; -import * as fromProviders from '../../metadata-provider/reducer'; import * as fromEditor from '../reducer'; import { WIZARD as WizardDef, EditorFlowDefinition } from '../editor-definition.const'; diff --git a/ui/src/app/edit-provider/container/draft.component.ts b/ui/src/app/edit-provider/container/draft.component.ts index 4b86f2ac2..b0482be9a 100644 --- a/ui/src/app/edit-provider/container/draft.component.ts +++ b/ui/src/app/edit-provider/container/draft.component.ts @@ -7,8 +7,8 @@ import { Store } from '@ngrx/store'; import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import { SelectDraft } from '../../metadata-provider/action/draft.action'; -import * as fromProviders from '../../metadata-provider/reducer'; +import { SelectDraft } from '../../domain/action/draft-collection.action'; +import * as fromCollection from '../../domain/reducer'; @Component({ selector: 'provider-page', templateUrl: './provider.component.html', @@ -19,7 +19,7 @@ export class DraftComponent implements OnDestroy { actionsSubscription: Subscription; constructor( - store: Store, + store: Store, route: ActivatedRoute ) { this.actionsSubscription = route.params diff --git a/ui/src/app/edit-provider/container/editor.component.ts b/ui/src/app/edit-provider/container/editor.component.ts index ff294bdf5..756c7734f 100644 --- a/ui/src/app/edit-provider/container/editor.component.ts +++ b/ui/src/app/edit-provider/container/editor.component.ts @@ -25,8 +25,8 @@ import 'rxjs/add/operator/combineLatest'; import 'rxjs/add/operator/distinctUntilChanged'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import * as fromProviders from '../../metadata-provider/reducer'; -import { UpdateProviderRequest } from '../../metadata-provider/action/provider.action'; +import * as fromProviders from '../../domain/reducer'; +import { UpdateProviderRequest } from '../../domain/action/provider-collection.action'; import * as fromEditor from '../reducer'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; diff --git a/ui/src/app/edit-provider/container/provider.component.spec.ts b/ui/src/app/edit-provider/container/provider.component.spec.ts index 0e4e64df6..a86a52c43 100644 --- a/ui/src/app/edit-provider/container/provider.component.spec.ts +++ b/ui/src/app/edit-provider/container/provider.component.spec.ts @@ -5,13 +5,13 @@ import { RouterModule, ActivatedRoute } from '@angular/router'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderComponent } from './provider.component'; -import * as fromProviders from '../../metadata-provider/reducer'; +import * as fromCollections from '../../domain/reducer'; import { ActivatedRouteStub } from '../../../testing/activated-route.stub'; import { routes } from '../editor.module'; describe('Provider Select (Editor) Page', () => { let fixture: ComponentFixture; - let store: Store; + let store: Store; let instance: ProviderComponent; let activatedRoute: ActivatedRouteStub = new ActivatedRouteStub(); activatedRoute.testParamMap = { id: 'foo' }; @@ -25,7 +25,7 @@ describe('Provider Select (Editor) Page', () => { imports: [ NoopAnimationsModule, StoreModule.forRoot({ - providers: combineReducers(fromProviders.reducers), + collections: combineReducers(fromCollections.reducers), }), ReactiveFormsModule, RouterModule.forRoot([]) diff --git a/ui/src/app/edit-provider/container/provider.component.ts b/ui/src/app/edit-provider/container/provider.component.ts index 030efdc9c..4108cc0f3 100644 --- a/ui/src/app/edit-provider/container/provider.component.ts +++ b/ui/src/app/edit-provider/container/provider.component.ts @@ -7,8 +7,8 @@ import { Store } from '@ngrx/store'; import { NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import { SelectProvider } from '../../metadata-provider/action/provider.action'; -import * as fromProviders from '../../metadata-provider/reducer'; +import { SelectProvider } from '../../domain/action/provider-collection.action'; +import * as fromProviders from '../../domain/reducer'; @Component({ selector: 'provider-page', templateUrl: './provider.component.html', diff --git a/ui/src/app/edit-provider/container/wizard.component.ts b/ui/src/app/edit-provider/container/wizard.component.ts index 02ceafda0..b4e66bea1 100644 --- a/ui/src/app/edit-provider/container/wizard.component.ts +++ b/ui/src/app/edit-provider/container/wizard.component.ts @@ -24,9 +24,9 @@ import 'rxjs/add/operator/takeLast'; import 'rxjs/add/operator/skipWhile'; import { MetadataProvider } from '../../domain/model/metadata-provider'; -import * as fromProviders from '../../metadata-provider/reducer'; -import * as draftActions from '../../metadata-provider/action/draft.action'; -import { AddProviderRequest, RemoveProviderRequest } from '../../metadata-provider/action/provider.action'; +import * as fromCollections from '../../domain/reducer'; +import * as draftActions from '../../domain/action/draft-collection.action'; +import { AddProviderRequest, RemoveProviderRequest } from '../../domain/action/provider-collection.action'; import * as fromEditor from '../reducer'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; @@ -60,14 +60,14 @@ export class WizardComponent implements OnInit, OnDestroy, CanComponentDeactivat saving: boolean; constructor( - private store: Store, + private store: Store, private route: ActivatedRoute, private router: Router, private statusEmitter: ProviderStatusEmitter, private valueEmitter: ProviderValueEmitter, private modalService: NgbModal ) { - this.provider$ = this.store.select(fromProviders.getSelectedDraft); + this.provider$ = this.store.select(fromCollections.getSelectedDraft); this.providerName$ = this.provider$.map(p => p.serviceProviderName); this.changes$ = this.store.select(fromEditor.getEditorChanges); diff --git a/ui/src/app/edit-provider/effect/editor.effect.ts b/ui/src/app/edit-provider/effect/editor.effect.ts index 5d3404f37..019ce1634 100644 --- a/ui/src/app/edit-provider/effect/editor.effect.ts +++ b/ui/src/app/edit-provider/effect/editor.effect.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Effect, Actions } from '@ngrx/effects'; import * as editor from '../action/editor.action'; -import * as provider from '../../metadata-provider/action/provider.action'; +import * as provider from '../../domain/action/provider-collection.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { EntityDescriptorService } from '../../domain/service/entity-descriptor.service'; import { Router } from '@angular/router'; diff --git a/ui/src/app/edit-provider/effect/wizard.effect.ts b/ui/src/app/edit-provider/effect/wizard.effect.ts index b63babc78..95daca49d 100644 --- a/ui/src/app/edit-provider/effect/wizard.effect.ts +++ b/ui/src/app/edit-provider/effect/wizard.effect.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { Effect, Actions } from '@ngrx/effects'; import * as editorActions from '../action/editor.action'; -import * as draft from '../../metadata-provider/action/draft.action'; -import * as provider from '../../metadata-provider/action/provider.action'; +import * as draft from '../../domain/action/draft-collection.action'; +import * as provider from '../../domain/action/provider-collection.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { EntityDraftService } from '../../domain/service/entity-draft.service'; diff --git a/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts b/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts index cd4b72968..81934837b 100644 --- a/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts +++ b/ui/src/app/edit-provider/reducer/editor.reducer.spec.ts @@ -1,7 +1,7 @@ import { reducer } from './editor.reducer'; import * as fromEditor from './editor.reducer'; import * as actions from '../action/editor.action'; -import * as providerActions from '../../metadata-provider/action/provider.action'; +import * as collectionActions from '../../domain/action/provider-collection.action'; import { MetadataProvider } from '../../domain/model/metadata-provider'; describe('Editor Reducer', () => { @@ -25,7 +25,7 @@ describe('Editor Reducer', () => { describe('Editor Add Provider', () => { it('should update the status when a provider is saved', () => { - const action = new providerActions.AddProviderRequest(changes); + const action = new collectionActions.AddProviderRequest(changes); const result = reducer(initialState, action); expect(result).toEqual( Object.assign({}, initialState, { @@ -35,7 +35,7 @@ describe('Editor Reducer', () => { }); it('should update the status on success', () => { - const action = new providerActions.AddProviderSuccess(changes); + const action = new collectionActions.AddProviderSuccess(changes); const result = reducer({...initialState, changes: {...changes, organization: {name: 'foo'}}}, action); expect(result).toEqual( Object.assign({}, initialState, { @@ -46,7 +46,7 @@ describe('Editor Reducer', () => { }); it('should update the status on success', () => { - const action = new providerActions.AddProviderFail(changes); + const action = new collectionActions.AddProviderFail(changes); const result = reducer(initialState, action); expect(result).toEqual( Object.assign({}, initialState, { diff --git a/ui/src/app/edit-provider/reducer/editor.reducer.ts b/ui/src/app/edit-provider/reducer/editor.reducer.ts index 2da77e0e0..db1588c54 100644 --- a/ui/src/app/edit-provider/reducer/editor.reducer.ts +++ b/ui/src/app/edit-provider/reducer/editor.reducer.ts @@ -1,7 +1,7 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import * as editor from '../action/editor.action'; -import * as provider from '../../metadata-provider/action/provider.action'; +import * as provider from '../../domain/action/provider-collection.action'; import * as fromRoot from '../../core/reducer'; export interface EditorState { diff --git a/ui/src/app/edit-provider/reducer/index.ts b/ui/src/app/edit-provider/reducer/index.ts index 2912b3350..ba82831f4 100644 --- a/ui/src/app/edit-provider/reducer/index.ts +++ b/ui/src/app/edit-provider/reducer/index.ts @@ -1,5 +1,5 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; -import * as fromRoot from '../../core/reducer'; +import * as fromRoot from '../../app.reducer'; import * as fromEditor from './editor.reducer'; export interface EditProviderState { diff --git a/ui/src/app/metadata-filter/action/filter.action.ts b/ui/src/app/metadata-filter/action/filter.action.ts index dd0fc73a1..5eeada1ea 100644 --- a/ui/src/app/metadata-filter/action/filter.action.ts +++ b/ui/src/app/metadata-filter/action/filter.action.ts @@ -1,7 +1,7 @@ import { Action } from '@ngrx/store'; import { QueryParams } from '../../core/model/query'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; export const QUERY_ENTITY_IDS = '[Filter] Query Entity Ids'; export const VIEW_MORE_IDS = '[Filter] View More Ids Modal'; @@ -12,9 +12,6 @@ export const LOAD_ENTITY_IDS_ERROR = '[Entity ID Collection] Load Entity Ids Err export const CREATE_FILTER = '[Filter] Create Filter'; export const UPDATE_FILTER = '[Filter] Update Filter'; -export const SAVE_FILTER = '[Filter] Save Filter'; -export const SAVE_FILTER_SUCCESS = '[Filter] Save Filter Success'; -export const SAVE_FILTER_ERROR = '[Filter] Save Filter Error'; export const CANCEL_CREATE_FILTER = '[Filter] Cancel Create Filter'; export class QueryEntityIds implements Action { @@ -54,31 +51,13 @@ export class LoadEntityIdsError implements Action { export class CreateFilter implements Action { readonly type = CREATE_FILTER; - constructor(public payload: MetadataProvider) { } + constructor(public payload: MetadataFilter) { } } export class UpdateFilter implements Action { readonly type = UPDATE_FILTER; - constructor(public payload: Partial) { } -} - -export class SaveFilter implements Action { - readonly type = SAVE_FILTER; - - constructor(public payload: Partial) { } -} - -export class SaveFilterSuccess implements Action { - readonly type = SAVE_FILTER_SUCCESS; - - constructor(public payload: MetadataProvider) { } -} - -export class SaveFilterError implements Action { - readonly type = SAVE_FILTER_ERROR; - - constructor(public payload: Error) { } + constructor(public payload: Partial) { } } export class CancelCreateFilter implements Action { @@ -94,7 +73,4 @@ export type Actions = | QueryEntityIds | CreateFilter | UpdateFilter - | SaveFilter - | SaveFilterSuccess - | SaveFilterError | CancelCreateFilter; diff --git a/ui/src/app/metadata-filter/component/filter-form.component.html b/ui/src/app/metadata-filter/component/filter-form.component.html index cbba3a989..685c1c693 100644 --- a/ui/src/app/metadata-filter/component/filter-form.component.html +++ b/ui/src/app/metadata-filter/component/filter-form.component.html @@ -23,9 +23,9 @@ aria-label="Information icon - press spacebar to read additional information for this form field">
- - - + + + Filter Name is required diff --git a/ui/src/app/metadata-filter/component/filter-form.component.ts b/ui/src/app/metadata-filter/component/filter-form.component.ts index bd9fba675..284cf9469 100644 --- a/ui/src/app/metadata-filter/component/filter-form.component.ts +++ b/ui/src/app/metadata-filter/component/filter-form.component.ts @@ -13,6 +13,7 @@ import { SearchDialogComponent } from '../component/search-dialog.component'; import { ViewMoreIds, CancelCreateFilter, QueryEntityIds } from '../action/filter.action'; import { EntityValidators } from '../../domain/service/entity-validators.service'; import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/domain.type'; @Component({ selector: 'filter-form', @@ -20,7 +21,7 @@ import { MetadataProvider } from '../../domain/model/metadata-provider'; }) export class FilterFormComponent extends ProviderFormFragmentComponent implements OnInit, OnDestroy { - @Input() provider: MetadataProvider; + @Input() entity: MetadataFilter; @Output() onSave: EventEmitter = new EventEmitter(); @Output() onCancel: EventEmitter = new EventEmitter(); @@ -62,7 +63,7 @@ export class FilterFormComponent extends ProviderFormFragmentComponent implement createForm(): void { this.form = this.fb.group({ entityId: ['', [Validators.required]], - serviceProviderName: ['', [Validators.required]], + filterName: ['', [Validators.required]], filterEnabled: [false] }); } diff --git a/ui/src/app/metadata-filter/component/preview-filter.component.ts b/ui/src/app/metadata-filter/component/preview-filter.component.ts index 480e00fb9..70c1193c3 100644 --- a/ui/src/app/metadata-filter/component/preview-filter.component.ts +++ b/ui/src/app/metadata-filter/component/preview-filter.component.ts @@ -6,14 +6,14 @@ import { Store } from '@ngrx/store'; import * as fromFilter from '../reducer'; import { QueryEntityIds } from '../action/filter.action'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/domain.type'; @Component({ selector: 'preview-filter', templateUrl: './preview-filter.component.html' }) export class PreviewFilterComponent { - filter$: Observable; + filter$: Observable; constructor( public activeModal: NgbActiveModal, private store: Store 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 3773010c0..cdf20e302 100644 --- a/ui/src/app/metadata-filter/container/new-filter.component.ts +++ b/ui/src/app/metadata-filter/container/new-filter.component.ts @@ -11,10 +11,12 @@ import { ProviderFormFragmentComponent } from '../../metadata-provider/component import { ProviderStatusEmitter, ProviderValueEmitter } from '../../domain/service/provider-change-emitter.service'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { SearchDialogComponent } from '../component/search-dialog.component'; -import { ViewMoreIds, CancelCreateFilter, QueryEntityIds, CreateFilter, UpdateFilter, SaveFilter } from '../action/filter.action'; +import { ViewMoreIds, CancelCreateFilter, QueryEntityIds, CreateFilter, UpdateFilter } from '../action/filter.action'; +import { SaveFilter } from '../../domain/action/filter-collection.action'; import { EntityValidators } from '../../domain/service/entity-validators.service'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; +import { MetadataFilter } from '../../domain/model/metadata-filter'; import { PreviewFilterComponent } from '../component/preview-filter.component'; +import { Filter } from '../../domain/entity/filter'; @Component({ @@ -23,11 +25,11 @@ import { PreviewFilterComponent } from '../component/preview-filter.component'; }) export class NewFilterComponent implements OnInit, OnChanges, OnDestroy { - changes$: Observable; - changes: MetadataProvider; - filter: MetadataProvider = { + changes$: Observable; + changes: MetadataFilter; + filter: MetadataFilter = new Filter({ entityId: '', - serviceProviderName: '', + filterName: '', relyingPartyOverrides: { signAssertion: false, dontSignResponse: false, @@ -40,7 +42,7 @@ export class NewFilterComponent implements OnInit, OnChanges, OnDestroy { authenticationMethods: [] }, attributeRelease: [] - }; + }); constructor( private store: Store, diff --git a/ui/src/app/metadata-filter/effect/filter.effect.ts b/ui/src/app/metadata-filter/effect/filter.effect.ts index 40c7235af..69e741f0b 100644 --- a/ui/src/app/metadata-filter/effect/filter.effect.ts +++ b/ui/src/app/metadata-filter/effect/filter.effect.ts @@ -13,10 +13,11 @@ import 'rxjs/add/operator/withLatestFrom'; import * as filter from '../action/filter.action'; import * as fromFilter from '../reducer'; +import * as collection from '../../domain/action/filter-collection.action'; import { SearchDialogComponent } from '../component/search-dialog.component'; import { EntityIdService } from '../../domain/service/entity-id.service'; -import { MetadataFilterService } from '../service/filter.service'; +import { MetadataFilterService } from '../../domain/service/filter.service'; import { MetadataProvider } from '../../domain/model/metadata-provider'; @Injectable() @@ -55,20 +56,9 @@ export class FilterEffects { .catch(() => Observable.of(new filter.CancelViewMore())); }); - @Effect() - saveFilter$ = this.actions$ - .ofType(filter.SAVE_FILTER) - .map(action => action.payload) - .switchMap(unsaved => - this.filterService - .save(unsaved as MetadataProvider) - .map(saved => new filter.SaveFilterSuccess(saved)) - .catch(error => Observable.of(new filter.SaveFilterError(error))) - ); - @Effect({ dispatch: false }) saveFilterSuccess$ = this.actions$ - .ofType(filter.SAVE_FILTER_SUCCESS) + .ofType(collection.SAVE_FILTER_SUCCESS) .switchMap(() => this.router.navigate(['/dashboard'])); constructor( diff --git a/ui/src/app/metadata-filter/filter.module.ts b/ui/src/app/metadata-filter/filter.module.ts index 7249d6434..bd8e574b4 100644 --- a/ui/src/app/metadata-filter/filter.module.ts +++ b/ui/src/app/metadata-filter/filter.module.ts @@ -15,7 +15,6 @@ import { SearchDialogComponent } from './component/search-dialog.component'; import { FilterFormComponent } from './component/filter-form.component'; import { SharedModule } from '../shared/shared.module'; import { PreviewFilterComponent } from './component/preview-filter.component'; -import { MetadataFilterService } from './service/filter.service'; export const routes: Routes = [ { @@ -48,8 +47,6 @@ export const routes: Routes = [ NgbModalModule, SharedModule ], - providers: [ - MetadataFilterService - ] + providers: [] }) export class FilterModule { } diff --git a/ui/src/app/metadata-filter/reducer/filter.reducer.ts b/ui/src/app/metadata-filter/reducer/filter.reducer.ts index 87817644a..314b1def0 100644 --- a/ui/src/app/metadata-filter/reducer/filter.reducer.ts +++ b/ui/src/app/metadata-filter/reducer/filter.reducer.ts @@ -1,7 +1,7 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; -import { MetadataProvider } from '../../domain/model/metadata-provider'; import * as filter from '../action/filter.action'; import * as fromRoot from '../../core/reducer'; +import { MetadataFilter } from '../../domain/domain.type'; export interface FilterState { entityIds: string[]; @@ -10,7 +10,7 @@ export interface FilterState { error: Error | null; selected: string | null; term: string; - filter: MetadataProvider | null; + filter: MetadataFilter | null; } export const initialState: FilterState = { diff --git a/ui/src/app/metadata-filter/reducer/index.ts b/ui/src/app/metadata-filter/reducer/index.ts index 65dfd5966..26a69c7d7 100644 --- a/ui/src/app/metadata-filter/reducer/index.ts +++ b/ui/src/app/metadata-filter/reducer/index.ts @@ -1,16 +1,13 @@ import { createSelector, createFeatureSelector } from '@ngrx/store'; import * as fromRoot from '../../core/reducer'; import * as fromFilter from './filter.reducer'; -import * as fromCollection from './collection.reducer'; export interface FilterState { filter: fromFilter.FilterState; - collection: fromCollection.CollectionState; } export const reducers = { filter: fromFilter.reducer, - collection: fromCollection.reducer }; export interface State extends fromRoot.State { @@ -18,7 +15,6 @@ export interface State extends fromRoot.State { } export const getFiltersFromStateFn = (state: FilterState) => state.filter; -export const getCollectionStateFn = (state: FilterState) => state.collection; export const getFilterState = createFeatureSelector('metadata-filter'); export const getFilterFromState = createSelector(getFilterState, getFiltersFromStateFn); @@ -29,6 +25,3 @@ export const getIsLoading = createSelector(getFilterFromState, fromFilter.getLoa export const getError = createSelector(getFilterFromState, fromFilter.getError); export const getTerm = createSelector(getFilterFromState, fromFilter.getTerm); export const getFilter = createSelector(getFilterFromState, fromFilter.getFilter); - -export const getCollectionFromState = createSelector(getFilterState, getCollectionStateFn); -export const getCollection = createSelector(getCollectionFromState, fromCollection.getFilters); diff --git a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.spec.ts index 12680c035..e51cc7972 100644 --- a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.spec.ts @@ -3,7 +3,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { AdvancedInfoFormComponent } from './advanced-info-form.component'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import * as stubs from '../../../../testing/provider.stub'; @@ -11,7 +11,7 @@ import * as stubs from '../../../../testing/provider.stub'; describe('Advanced Info Form Component', () => { let fixture: ComponentFixture; let instance: AdvancedInfoFormComponent; - let store: Store; + let store: Store; beforeEach(() => { TestBed.configureTestingModule({ @@ -24,7 +24,7 @@ describe('Advanced Info Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts b/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts index cce947a77..e3afb8ea8 100644 --- a/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts +++ b/ui/src/app/metadata-provider/component/forms/advanced-info-form.component.ts @@ -8,7 +8,7 @@ import 'rxjs/add/operator/throttleTime'; import 'rxjs/add/operator/takeUntil'; import 'rxjs/add/operator/startWith'; -import * as fromProviders from '../../reducer'; +import * as fromCollection from '../../../domain/reducer'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; import { ProviderFormFragmentComponent } from './provider-form-fragment.component'; @@ -42,14 +42,14 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp protected fb: FormBuilder, protected statusEmitter: ProviderStatusEmitter, protected valueEmitter: ProviderValueEmitter, - protected store: Store + protected store: Store ) { super(fb, statusEmitter, valueEmitter); this.ids$ = this.store - .select(fromProviders.getAllEntityIds) + .select(fromCollection.getAllEntityIds) .takeUntil(this.ngUnsubscribe) - .combineLatest(this.store.select(fromProviders.getSelectedProvider), (ids: string[], provider: MetadataProvider) => { + .combineLatest(this.store.select(fromCollection.getSelectedProvider), (ids: string[], provider: MetadataProvider) => { return ids.filter(id => provider.entityId !== id); }); } diff --git a/ui/src/app/metadata-provider/component/forms/assertion-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/assertion-form.component.spec.ts index 518a5ec0f..5f6574a8c 100644 --- a/ui/src/app/metadata-provider/component/forms/assertion-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/assertion-form.component.spec.ts @@ -3,7 +3,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { AssertionFormComponent } from './assertion-form.component'; import * as stubs from '../../../../testing/provider.stub'; @@ -11,7 +11,7 @@ import * as stubs from '../../../../testing/provider.stub'; describe('Assertion Form Component', () => { let fixture: ComponentFixture; let instance: AssertionFormComponent; - let store: Store; + let store: Store; beforeEach(() => { TestBed.configureTestingModule({ @@ -24,7 +24,7 @@ describe('Assertion Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.spec.ts index 6f15fa5f9..1345dda16 100644 --- a/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/attribute-release-form.component.spec.ts @@ -3,7 +3,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { AttributeReleaseFormComponent } from './attribute-release-form.component'; import { ListValuesService } from '../../../domain/service/list-values.service'; @@ -12,7 +12,7 @@ import * as stubs from '../../../../testing/provider.stub'; describe('Attribute Release Form Component', () => { let fixture: ComponentFixture; let instance: AttributeReleaseFormComponent; - let store: Store; + let store: Store; beforeEach(() => { TestBed.configureTestingModule({ @@ -26,7 +26,7 @@ describe('Attribute Release Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts index 125142fc7..5f814a6a2 100644 --- a/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/descriptor-info-form.component.spec.ts @@ -4,7 +4,7 @@ import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { Provider } from '../../../domain/entity/provider'; @@ -40,7 +40,7 @@ class TestHostComponent { describe('Descriptor Info Form Component', () => { let fixture: ComponentFixture; let instance: TestHostComponent; - let store: Store; + let store: Store; let form: DescriptorInfoFormComponent; let fb: FormBuilder; @@ -56,7 +56,7 @@ describe('Descriptor Info Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule, SharedModule diff --git a/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts index 6cebda632..e97b9a376 100644 --- a/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/finish-form.component.spec.ts @@ -5,7 +5,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ActivatedRoute, Router } from '@angular/router'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { FinishFormComponent } from './finish-form.component'; @@ -36,7 +36,7 @@ class TestHostComponent { describe('Finished Form Component', () => { let fixture: ComponentFixture; let instance: TestHostComponent; - let store: Store; + let store: Store; let form: FinishFormComponent; beforeEach(() => { @@ -53,7 +53,7 @@ describe('Finished Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts index 5a8e75612..37fac92e4 100644 --- a/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/key-info-form.component.spec.ts @@ -4,7 +4,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { KeyInfoFormComponent } from './key-info-form.component'; @@ -37,7 +37,7 @@ class TestHostComponent { describe('Security (Key) Info Form Component', () => { let fixture: ComponentFixture; let instance: TestHostComponent; - let store: Store; + let store: Store; let form: KeyInfoFormComponent; beforeEach(() => { @@ -52,7 +52,7 @@ describe('Security (Key) Info Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts index 1fa280400..53d224962 100644 --- a/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/logout-form.component.spec.ts @@ -4,7 +4,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { LogoutFormComponent } from './logout-form.component'; @@ -34,7 +34,7 @@ class TestHostComponent { describe('Logout Endpoints Form Component', () => { let fixture: ComponentFixture; let instance: TestHostComponent; - let store: Store; + let store: Store; let form: LogoutFormComponent; beforeEach(() => { @@ -49,7 +49,7 @@ describe('Logout Endpoints Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts index 1635b6ad6..423122bef 100644 --- a/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/metadata-ui-form.component.spec.ts @@ -4,7 +4,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { Provider } from '../../../domain/entity/provider'; @@ -33,7 +33,7 @@ class TestHostComponent { describe('Metadata UI Form Component', () => { let fixture: ComponentFixture; let instance: TestHostComponent; - let store: Store; + let store: Store; let form: MetadataUiFormComponent; beforeEach(() => { @@ -48,7 +48,7 @@ describe('Metadata UI Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/organization-info-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/organization-info-form.component.spec.ts index 299f8c1ce..93ca34dd9 100644 --- a/ui/src/app/metadata-provider/component/forms/organization-info-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/organization-info-form.component.spec.ts @@ -3,7 +3,7 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { OrganizationInfoFormComponent } from './organization-info-form.component'; @@ -12,7 +12,7 @@ import * as stubs from '../../../../testing/provider.stub'; describe('Organization Info Form Component', () => { let fixture: ComponentFixture; let instance: OrganizationInfoFormComponent; - let store: Store; + let store: Store; beforeEach(() => { TestBed.configureTestingModule({ @@ -26,7 +26,7 @@ describe('Organization Info Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule ], diff --git a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts b/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts index 266c89738..9f38922ee 100644 --- a/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts +++ b/ui/src/app/metadata-provider/component/forms/provider-form-fragment.component.ts @@ -10,7 +10,6 @@ import 'rxjs/add/operator/startWith'; import { ProviderStatusEmitter, ProviderValueEmitter } from '../../../domain/service/provider-change-emitter.service'; import { MetadataProvider, Organization, Contact } from '../../../domain/model/metadata-provider'; -import * as fromProviders from '../../reducer'; import * as constants from '../../../shared/constant'; diff --git a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts b/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts index 26fb0f362..170699ec4 100644 --- a/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts +++ b/ui/src/app/metadata-provider/component/forms/relying-party-form.component.spec.ts @@ -4,7 +4,7 @@ import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; -import * as fromProviders from '../../reducer'; +import * as fromCollections from '../../../domain/reducer'; import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import { ListValuesService } from '../../../domain/service/list-values.service'; import { RelyingPartyFormComponent } from './relying-party-form.component'; @@ -40,7 +40,7 @@ class TestHostComponent { describe('Relying Party Form Component', () => { let fixture: ComponentFixture; let instance: TestHostComponent; - let store: Store; + let store: Store; let form: RelyingPartyFormComponent; let fb: FormBuilder; @@ -56,7 +56,7 @@ describe('Relying Party Form Component', () => { NoopAnimationsModule, ReactiveFormsModule, StoreModule.forRoot({ - 'providers': combineReducers(fromProviders.reducers), + 'collections': combineReducers(fromCollections.reducers), }), NgbPopoverModule, SharedModule diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts b/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts index c2b64fe26..a46bff536 100644 --- a/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts +++ b/ui/src/app/metadata-provider/container/blank-provider.component.spec.ts @@ -3,13 +3,13 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { NewProviderComponent } from './new-provider.component'; -import * as fromProviders from '../reducer'; +import * as fromCollections from '../../domain/reducer'; import { BlankProviderComponent } from './blank-provider.component'; import { UploadProviderComponent } from './upload-provider.component'; describe('Blank Provider Page', () => { let fixture: ComponentFixture; - let store: Store; + let store: Store; let instance: BlankProviderComponent; beforeEach(() => { @@ -17,7 +17,7 @@ describe('Blank Provider Page', () => { imports: [ NoopAnimationsModule, StoreModule.forRoot({ - user: combineReducers(fromProviders.reducers), + collections: combineReducers(fromCollections.reducers), }), ReactiveFormsModule, ], diff --git a/ui/src/app/metadata-provider/container/blank-provider.component.ts b/ui/src/app/metadata-provider/container/blank-provider.component.ts index 08232fa92..85865571c 100644 --- a/ui/src/app/metadata-provider/container/blank-provider.component.ts +++ b/ui/src/app/metadata-provider/container/blank-provider.component.ts @@ -14,9 +14,9 @@ import { Observable } from 'rxjs/Observable'; import { Subject } from 'rxjs/Subject'; import { Store } from '@ngrx/store'; -import { AddDraftRequest } from '../action/draft.action'; -import { AddProviderRequest, UploadProviderRequest } from '../action/provider.action'; -import * as fromProviders from '../reducer'; +import { AddDraftRequest } from '../../domain/action/draft-collection.action'; +import { AddProviderRequest, UploadProviderRequest } from '../../domain/action/provider-collection.action'; +import * as fromCollections from '../../domain/reducer'; import { EntityValidators } from '../../domain/service/entity-validators.service'; @Component({ @@ -30,10 +30,10 @@ export class BlankProviderComponent implements OnInit { ids$: Observable; constructor( - private store: Store, + private store: Store, private fb: FormBuilder ) { - this.ids$ = this.store.select(fromProviders.getAllEntityIds); + this.ids$ = this.store.select(fromCollections.getAllEntityIds); } ngOnInit(): void { diff --git a/ui/src/app/metadata-provider/container/new-provider.component.spec.ts b/ui/src/app/metadata-provider/container/new-provider.component.spec.ts index fe4de8e56..3ac3a9e16 100644 --- a/ui/src/app/metadata-provider/container/new-provider.component.spec.ts +++ b/ui/src/app/metadata-provider/container/new-provider.component.spec.ts @@ -3,13 +3,13 @@ import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; import { NewProviderComponent } from './new-provider.component'; -import * as fromProviders from '../reducer'; +import * as fromCollections from '../../domain/reducer'; import { BlankProviderComponent } from './blank-provider.component'; import { UploadProviderComponent } from './upload-provider.component'; describe('New Provider Page', () => { let fixture: ComponentFixture; - let store: Store; + let store: Store; let instance: NewProviderComponent; beforeEach(() => { @@ -17,7 +17,7 @@ describe('New Provider Page', () => { imports: [ NoopAnimationsModule, StoreModule.forRoot({ - user: combineReducers(fromProviders.reducers), + collections: combineReducers(fromCollections.reducers), }), ReactiveFormsModule, ], diff --git a/ui/src/app/metadata-provider/container/new-provider.component.ts b/ui/src/app/metadata-provider/container/new-provider.component.ts index 7aaf99583..43457f430 100644 --- a/ui/src/app/metadata-provider/container/new-provider.component.ts +++ b/ui/src/app/metadata-provider/container/new-provider.component.ts @@ -18,9 +18,9 @@ import { Store } from '@ngrx/store'; import { MetadataProvider } from '../../domain/model/metadata-provider'; import { Provider } from '../../domain/entity/provider'; -import { AddDraftRequest } from '../action/draft.action'; -import { AddProviderRequest, UploadProviderRequest, CreateProviderFromUrlRequest } from '../action/provider.action'; -import * as fromProviders from '../reducer'; +import { AddDraftRequest } from '../../domain/action/draft-collection.action'; +import { AddProviderRequest, UploadProviderRequest, CreateProviderFromUrlRequest } from '../../domain/action/provider-collection.action'; +import * as fromCollections from '../../domain/reducer'; import { EntityValidators } from '../../domain/service/entity-validators.service'; @Component({ @@ -36,7 +36,7 @@ export class NewProviderComponent implements OnInit { type: Symbol = this.BLANK; constructor( - private store: Store + private store: Store ) { } ngOnInit(): void { diff --git a/ui/src/app/metadata-provider/metadata-provider.module.ts b/ui/src/app/metadata-provider/metadata-provider.module.ts index 666e19b25..143b67ba1 100644 --- a/ui/src/app/metadata-provider/metadata-provider.module.ts +++ b/ui/src/app/metadata-provider/metadata-provider.module.ts @@ -6,13 +6,8 @@ import { ReactiveFormsModule, FormsModule } from '@angular/forms'; import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; -import { DraftEffects } from './effect/draft.effects'; -import { ProviderEffects } from './effect/provider.effects'; -import { reducers } from './reducer'; - import { NewProviderComponent } from './container/new-provider.component'; - import { ProviderEditorFormModule } from './component'; import { PreviewProviderDialogComponent } from './component/preview-provider-dialog.component'; import { PretttyXml } from './pipe/pretty-xml.pipe'; @@ -56,8 +51,6 @@ export class MetadataProviderModule { @NgModule({ imports: [ MetadataProviderModule, - StoreModule.forFeature('providers', reducers), - EffectsModule.forFeature([DraftEffects, ProviderEffects]), RouterModule.forChild([ { path: 'new', component: NewProviderComponent } ]), diff --git a/ui/src/app/metadata-provider/reducer/index.spec.ts b/ui/src/app/metadata-provider/reducer/index.spec.ts deleted file mode 100644 index 01494cdd5..000000000 --- a/ui/src/app/metadata-provider/reducer/index.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as selectors from './index'; - -describe('Metadata Provider reducer functions', () => { - describe(`combineAllFn`, () => { - it('should combine arrays', () => { - let a = ['foo', 'bar'], - b = ['baz', 'hrm']; - expect(selectors.combineAllFn(a, b)).toEqual([...b, ...a]); - }); - }); - describe(`doesExistFn`, () => { - it('should test whether the provided index is in the provided collection', () => { - expect(selectors.doesExistFn(['foo', 'bar'], 'foo')).toBe(true); - expect(selectors.doesExistFn(['bar', 'baz'], 'foo')).toBe(false); - }); - }); - describe(`getInCollectionFn`, () => { - it('should retrieve the item from the provided collection by index', () => { - expect(selectors.getInCollectionFn({ foo: 'bar' }, 'foo')).toEqual('bar'); - }); - }); - describe(`getEntityIdsFn`, () => { - it('should create a collection of entity ids from the provided entities', () => { - expect(selectors.getEntityIdsFn([{entityId: 'foo'}])).toEqual(['foo']); - }); - }); - describe(`getProvidersFromStateFn`, () => { - it('should select the providers slice of state', () => { - let providers = []; - expect(selectors.getProvidersFromStateFn({ providers })).toBe(providers); - }); - }); - describe(`getDraftsFromStateFn`, () => { - it('should select the providers slice of state', () => { - let drafts = []; - expect(selectors.getDraftsFromStateFn({ drafts })).toBe(drafts); - }); - }); -}); diff --git a/ui/src/locale/en.xlf b/ui/src/locale/en.xlf index e18456caa..24cb03ba4 100644 --- a/ui/src/locale/en.xlf +++ b/ui/src/locale/en.xlf @@ -1384,37 +1384,65 @@ - Service Provider Name: - Service Provider Name: + Name: + Name: app/dashboard/component/provider-item.component.ts 33 - - Created Date: - Created Date: - - app/dashboard/component/provider-item.component.ts - 35 - - - Service Provider Entity ID: - Service Provider Entity ID: + Entity ID: + Entity ID: app/dashboard/component/provider-item.component.ts 40 - Service Provider Status: - Service Provider Status: + Status: + Status: app/dashboard/component/provider-item.component.ts 42 + + {VAR_SELECT, select, filter {Filter} provider {Service Provider} other {} } + {VAR_SELECT, select, filter {Filter} provider {Service Provider} other {} } + + + + + + app/dashboard/container/dashboard.component.ts + 19 + + + + {VAR_SELECT, select, filter {Show Filters} provider {Show Sources} other {Show All} } + {VAR_SELECT, select, filter {Show Filter} provider {Show Sources} other {Show All} } + + + + + + app/dashboard/container/dashboard.component.ts + 14 + + + + {VAR_SELECT, select, filter {Show Filters} provider {Show Sources} other {Show All} } + {VAR_SELECT, select, filter {Show Filter} provider {Show Sources} other {Show All} } + + + Created Date: + Created Date: + + app/dashboard/component/provider-item.component.ts + 35 + + Enabled Enabled