From 2a7ae3d9ae23e055aef8b2a6d59a115b98657ba8 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Mon, 21 Jan 2019 10:42:28 -0700 Subject: [PATCH] Implemented custom action for admin resolvers --- .../container/dashboard.component.ts | 2 +- .../domain/service/resolver.service.ts | 2 +- .../resolver/action/collection.action.ts | 16 +++- .../resolver/effect/collection.effects.ts | 91 +++++++++++++------ 4 files changed, 77 insertions(+), 34 deletions(-) diff --git a/ui/src/app/dashboard/container/dashboard.component.ts b/ui/src/app/dashboard/container/dashboard.component.ts index 56a7013fe..b0e71e770 100644 --- a/ui/src/app/dashboard/container/dashboard.component.ts +++ b/ui/src/app/dashboard/container/dashboard.component.ts @@ -4,7 +4,7 @@ import { Store } from '@ngrx/store'; import * as fromRoot from '../../app.reducer'; import * as fromAdmin from '../../admin/reducer'; import { Observable } from 'rxjs'; -import { LoadAdminRequest } from '../../admin/action/collection.action'; +import { LoadAdminRequest } from '../../admin/action/user-collection.action'; import { LoadRoleRequest } from '../../core/action/configuration.action'; import { map } from 'rxjs/operators'; diff --git a/ui/src/app/metadata/domain/service/resolver.service.ts b/ui/src/app/metadata/domain/service/resolver.service.ts index 895e086f0..3c3e48602 100644 --- a/ui/src/app/metadata/domain/service/resolver.service.ts +++ b/ui/src/app/metadata/domain/service/resolver.service.ts @@ -14,7 +14,7 @@ export class ResolverService { private http: HttpClient ) {} - query(): Observable { + query(opts: any = {}): Observable { return this.http.get(`${ this.base }${ this.endpoint }s`, {}) .pipe( catchError(err => throwError([])) diff --git a/ui/src/app/metadata/resolver/action/collection.action.ts b/ui/src/app/metadata/resolver/action/collection.action.ts index 9ce6c31d4..dc3843319 100644 --- a/ui/src/app/metadata/resolver/action/collection.action.ts +++ b/ui/src/app/metadata/resolver/action/collection.action.ts @@ -12,12 +12,15 @@ export enum ResolverCollectionActionTypes { UPDATE_RESOLVER_FAIL = '[Metadata Resolver] Update Fail', UPDATE_RESOLVER_CONFLICT = '[Metadata Resolver] Update Conflict', - LOAD_RESOLVER_REQUEST = '[Metadata Resolver Collection] Resolver REQUEST', - LOAD_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Resolver SUCCESS', - LOAD_RESOLVER_ERROR = '[Metadata Resolver Collection] Resolver ERROR', + LOAD_RESOLVER_REQUEST = '[Metadata Resolver Collection] Load Resolver REQUEST', + LOAD_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Load Resolver SUCCESS', + LOAD_RESOLVER_ERROR = '[Metadata Resolver Collection] Load Resolver ERROR', + LOAD_ADMIN_RESOLVERS_REQUEST = '[Metadata Resolver Collection] Load Admin Resolver REQUEST', + ADD_RESOLVER = '[Metadata Resolver Collection] Add Resolver', ADD_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Add Resolver Success', ADD_RESOLVER_FAIL = '[Metadata Resolver Collection] Add Resolver Fail', + REMOVE_RESOLVER = '[Metadata Resolver Collection] Remove Resolver', REMOVE_RESOLVER_SUCCESS = '[Metadata Resolver Collection] Remove Resolver Success', REMOVE_RESOLVER_FAIL = '[Metadata Resolver Collection] Remove Resolver Fail', @@ -50,6 +53,12 @@ export class LoadResolverRequest implements Action { constructor() { } } +export class LoadAdminResolverRequest implements Action { + readonly type = ResolverCollectionActionTypes.LOAD_ADMIN_RESOLVERS_REQUEST; + + constructor() { } +} + export class LoadResolverSuccess implements Action { readonly type = ResolverCollectionActionTypes.LOAD_RESOLVER_SUCCESS; @@ -138,6 +147,7 @@ export type ResolverCollectionActionsUnion = | LoadResolverRequest | LoadResolverSuccess | LoadResolverError + | LoadAdminResolverRequest | AddResolverRequest | AddResolverSuccess | AddResolverFail diff --git a/ui/src/app/metadata/resolver/effect/collection.effects.ts b/ui/src/app/metadata/resolver/effect/collection.effects.ts index 608d1d442..ac5bc87c8 100644 --- a/ui/src/app/metadata/resolver/effect/collection.effects.ts +++ b/ui/src/app/metadata/resolver/effect/collection.effects.ts @@ -5,9 +5,29 @@ import { Store } from '@ngrx/store'; import { of } from 'rxjs'; import { map, catchError, switchMap, tap, withLatestFrom } from 'rxjs/operators'; -import * as providerActions from '../action/collection.action'; +import { + ResolverCollectionActionTypes, + LoadResolverRequest, + LoadResolverSuccess, + LoadResolverError, + LoadAdminResolverRequest, + AddResolverRequest, + AddResolverSuccess, + AddResolverFail, + RemoveResolverRequest, + RemoveResolverSuccess, + RemoveResolverFail, + SelectResolver, + SelectResolverSuccess, + UpdateResolverRequest, + UpdateResolverSuccess, + UpdateResolverFail, + UpdateResolverConflict, + UploadResolverRequest, + CreateResolverFromUrlRequest +} from '../action/collection.action'; import * as draftActions from '../action/draft.action'; -import { ResolverCollectionActionTypes } from '../action/collection.action'; +import { } from '../action/collection.action'; import { ResolverService } from '../../domain/service/resolver.service'; import { removeNulls } from '../../../shared/util'; import { AddNotification } from '../../../notification/action/notification.action'; @@ -23,35 +43,48 @@ export class ResolverCollectionEffects { @Effect() loadResolvers$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.LOAD_RESOLVER_REQUEST), + ofType(ResolverCollectionActionTypes.LOAD_RESOLVER_REQUEST), switchMap(() => this.descriptorService .query() .pipe( - map(descriptors => new providerActions.LoadResolverSuccess(descriptors)), - catchError(error => of(new providerActions.LoadResolverError(error))) + map(descriptors => new LoadResolverSuccess(descriptors)), + catchError(error => of(new LoadResolverError(error))) + ) + ) + ); + + @Effect() + loadAdminResolvers$ = this.actions$.pipe( + ofType(ResolverCollectionActionTypes.LOAD_RESOLVER_REQUEST), + switchMap(() => + this.descriptorService + .query({admin: true}) + .pipe( + map(descriptors => new LoadResolverSuccess(descriptors)), + catchError(error => of(new LoadResolverError(error))) ) ) ); @Effect() updateResolver$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_REQUEST), + ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_REQUEST), map(action => action.payload), switchMap(provider => { return this.descriptorService .update(provider) .pipe( - map(p => new providerActions.UpdateResolverSuccess({ + map(p => new UpdateResolverSuccess({ id: p.id, changes: p })), catchError(err => { if (err.status === 409) { - return of(new providerActions.UpdateResolverConflict(provider)); + return of(new UpdateResolverConflict(provider)); } console.log(err); - return of(new providerActions.UpdateResolverFail({ + return of(new UpdateResolverFail({ errorCode: err.status, errorMessage: `${err.statusText} - ${err.message}` })); @@ -62,21 +95,21 @@ export class ResolverCollectionEffects { @Effect({ dispatch: false }) updateResolverSuccessRedirect$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS), + ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS), map(action => action.payload), tap(provider => this.router.navigate(['dashboard'])) ); @Effect() updateResolverSuccessReload$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS), + ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS), map(action => action.payload), - map(provider => new providerActions.LoadResolverRequest()) + map(provider => new LoadResolverRequest()) ); @Effect() updateResolverFailNotification$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL), + ofType(ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL), map(action => action.payload), withLatestFrom(this.store.select(fromI18n.getMessages)), map(([error, messages]) => new AddNotification( @@ -90,20 +123,20 @@ export class ResolverCollectionEffects { @Effect() selectResolver$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.SELECT), + ofType(ResolverCollectionActionTypes.SELECT), map(action => action.payload), switchMap(id => this.descriptorService .find(id) .pipe( - map(p => new providerActions.SelectResolverSuccess(p)) + map(p => new SelectResolverSuccess(p)) ) ) ); @Effect() addResolverRequest$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.ADD_RESOLVER), + ofType(ResolverCollectionActionTypes.ADD_RESOLVER), map(action => action.payload), map(provider => { return ({ @@ -115,28 +148,28 @@ export class ResolverCollectionEffects { this.descriptorService .save(provider) .pipe( - map(p => new providerActions.AddResolverSuccess(p)), - catchError(() => of(new providerActions.AddResolverFail(provider))) + map(p => new AddResolverSuccess(p)), + catchError(() => of(new AddResolverFail(provider))) ) ) ); @Effect({ dispatch: false }) addResolverSuccessRedirect$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS), + ofType(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS), map(action => action.payload), tap(provider => this.router.navigate(['dashboard'])) ); @Effect() addResolverSuccessReload$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS), + ofType(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS), map(action => action.payload), - map(provider => new providerActions.LoadResolverRequest()) + map(provider => new LoadResolverRequest()) ); @Effect() addResolverSuccessRemoveDraft$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS), + ofType(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS), map(action => action.payload), map(provider => { return new draftActions.RemoveDraftRequest(provider); @@ -145,7 +178,7 @@ export class ResolverCollectionEffects { @Effect() addResolverFailNotification$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.ADD_RESOLVER_FAIL), + ofType(ResolverCollectionActionTypes.ADD_RESOLVER_FAIL), map(action => action.payload), withLatestFrom(this.store.select(fromI18n.getMessages)), map(([error, messages]) => new AddNotification( @@ -159,28 +192,28 @@ export class ResolverCollectionEffects { @Effect() uploadResolverRequest$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.UPLOAD_RESOLVER_REQUEST), + ofType(ResolverCollectionActionTypes.UPLOAD_RESOLVER_REQUEST), map(action => action.payload), switchMap(file => this.descriptorService .upload(file.name, file.body) .pipe( - map(p => new providerActions.AddResolverSuccess(p)), - catchError((error) => of(new providerActions.AddResolverFail(error))) + map(p => new AddResolverSuccess(p)), + catchError((error) => of(new AddResolverFail(error))) ) ) ); @Effect() createResolverFromUrlRequest$ = this.actions$.pipe( - ofType(ResolverCollectionActionTypes.CREATE_RESOLVER_FROM_URL_REQUEST), + ofType(ResolverCollectionActionTypes.CREATE_RESOLVER_FROM_URL_REQUEST), map(action => action.payload), switchMap(file => this.descriptorService .createFromUrl(file.name, file.url) .pipe( - map(p => new providerActions.AddResolverSuccess(p)), - catchError((error) => of(new providerActions.AddResolverFail(error))) + map(p => new AddResolverSuccess(p)), + catchError((error) => of(new AddResolverFail(error))) ) ) );