Skip to content

Commit

Permalink
SHIBUI-1031 Implemented admin user dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Jan 8, 2019
1 parent 46d9f7a commit de4774a
Show file tree
Hide file tree
Showing 11 changed files with 93 additions and 19 deletions.
2 changes: 1 addition & 1 deletion ui/src/app/app.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
</div>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/metadata" routerLinkActive="active" aria-label="Metadata Dashboard">
<a class="nav-link" routerLink="/dashboard" routerLinkActive="active" aria-label="Metadata Dashboard">
<i class="fa fa-th fa-fw" aria-hidden="true"></i>
<translate-i18n key="action.dashboard">Dashboard</translate-i18n>
</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export class ProviderEditComponent implements OnDestroy, CanComponentDeactivate

cancel(): void {
this.clear();
this.router.navigate(['metadata', 'manager', 'providers']);
this.router.navigate(['dashboard', 'metadata', 'manager', 'providers']);
}

canDeactivate(
Expand Down
4 changes: 2 additions & 2 deletions ui/src/app/metadata/provider/effect/collection.effect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ export class CollectionEffects {
createProviderSuccessRedirect$ = this.actions$.pipe(
ofType<AddProviderSuccess>(ProviderCollectionActionTypes.ADD_PROVIDER_SUCCESS),
map(action => action.payload),
tap(provider => this.router.navigate(['metadata', 'manager', 'providers']))
tap(provider => this.router.navigate(['dashboard', 'metadata', 'manager', 'providers']))
);

@Effect()
Expand Down Expand Up @@ -162,7 +162,7 @@ export class CollectionEffects {
map(action => action.payload),
tap(provider => {
this.store.dispatch(new ClearProvider());
this.router.navigate(['metadata', 'manager', 'providers']);
this.router.navigate(['dashboard', 'metadata', 'manager', 'providers']);
})
);

Expand Down
8 changes: 8 additions & 0 deletions ui/src/app/metadata/resolver/action/collection.action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export enum ResolverCollectionActionTypes {
UPDATE_RESOLVER_REQUEST = '[Metadata Resolver] Update Request',
UPDATE_RESOLVER_SUCCESS = '[Metadata Resolver] Update Success',
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',
Expand Down Expand Up @@ -76,6 +77,12 @@ export class UpdateResolverSuccess implements Action {
export class UpdateResolverFail implements Action {
readonly type = ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL;

constructor(public payload: any) { }
}

export class UpdateResolverConflict implements Action {
readonly type = ResolverCollectionActionTypes.UPDATE_RESOLVER_CONFLICT;

constructor(public payload: MetadataResolver) { }
}

Expand Down Expand Up @@ -143,5 +150,6 @@ export type ResolverCollectionActionsUnion =
| UpdateResolverRequest
| UpdateResolverSuccess
| UpdateResolverFail
| UpdateResolverConflict
| UploadResolverRequest
| CreateResolverFromUrlRequest;
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export class ResolverEditComponent implements OnDestroy, CanComponentDeactivate

cancel(): void {
this.clear();
this.router.navigate(['metadata', 'manager', 'resolvers']);
this.router.navigate(['dashboard', 'metadata', 'manager', 'resolvers']);
}

canDeactivate(
Expand All @@ -97,7 +97,6 @@ export class ResolverEditComponent implements OnDestroy, CanComponentDeactivate
return of(true);
}
const diff = this.diffService.updatedDiff(this.resolver, this.latest);
console.log(diff, this.resolver, this.latest);
if (diff && Object.keys(diff).length > 0) {
let modal = this.modalService.open(UnsavedEntityComponent);
modal.result.then(
Expand Down
31 changes: 26 additions & 5 deletions ui/src/app/metadata/resolver/effect/collection.effects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,23 @@ export class ResolverCollectionEffects {
ofType<providerActions.UpdateResolverRequest>(ResolverCollectionActionTypes.UPDATE_RESOLVER_REQUEST),
map(action => action.payload),
switchMap(provider => {
delete provider.modifiedDate;
delete provider.createdDate;
return this.descriptorService
.update(provider)
.pipe(
map(p => new providerActions.UpdateResolverSuccess({
id: p.id,
changes: p
})),
catchError(err => of(new providerActions.UpdateResolverFail(provider)))
catchError(err => {
if (err.status === 409) {
return of(new providerActions.UpdateResolverConflict(provider));
}
console.log(err);
return of(new providerActions.UpdateResolverFail({
errorCode: err.status,
errorMessage: `${err.statusText} - ${err.message}`
}));
})
);
})
);
Expand All @@ -57,7 +64,7 @@ export class ResolverCollectionEffects {
updateResolverSuccessRedirect$ = this.actions$.pipe(
ofType<providerActions.UpdateResolverSuccess>(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS),
map(action => action.payload),
tap(provider => this.router.navigate(['metadata']))
tap(provider => this.router.navigate(['dashboard']))
);

@Effect()
Expand All @@ -67,6 +74,20 @@ export class ResolverCollectionEffects {
map(provider => new providerActions.LoadResolverRequest())
);

@Effect()
updateResolverFailNotification$ = this.actions$.pipe(
ofType<providerActions.UpdateResolverFail>(ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL),
map(action => action.payload),
withLatestFrom(this.store.select(fromI18n.getMessages)),
map(([error, messages]) => new AddNotification(
new Notification(
NotificationType.Danger,
`${error.errorCode}: ${this.i18nService.translate(error.errorMessage, null, messages)}`,
8000
)
))
);

@Effect()
selectResolver$ = this.actions$.pipe(
ofType<providerActions.SelectResolver>(ResolverCollectionActionTypes.SELECT),
Expand Down Expand Up @@ -104,7 +125,7 @@ export class ResolverCollectionEffects {
addResolverSuccessRedirect$ = this.actions$.pipe(
ofType<providerActions.AddResolverSuccess>(ResolverCollectionActionTypes.ADD_RESOLVER_SUCCESS),
map(action => action.payload),
tap(provider => this.router.navigate(['metadata']))
tap(provider => this.router.navigate(['dashboard']))
);
@Effect()
addResolverSuccessReload$ = this.actions$.pipe(
Expand Down
6 changes: 3 additions & 3 deletions ui/src/app/metadata/resolver/effect/entity.effect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,19 @@ export class EntityEffects {
cancelChanges$ = this.actions$.pipe(
ofType<Cancel>(ResolverEntityActionTypes.CANCEL),
map(() => new provider.LoadResolverRequest()),
tap(() => this.router.navigate(['metadata']))
tap(() => this.router.navigate(['dashboard']))
);

@Effect()
updateResolverSuccessRedirect$ = this.actions$.pipe(
updateResolverSuccessClear$ = this.actions$.pipe(
ofType<provider.UpdateResolverSuccess>(ResolverCollectionActionTypes.UPDATE_RESOLVER_SUCCESS),
map(action => action.payload),
map(p => new Clear())
);

@Effect()
openContention$ = this.actions$.pipe(
ofType<provider.UpdateResolverFail>(ResolverCollectionActionTypes.UPDATE_RESOLVER_FAIL),
ofType<provider.UpdateResolverConflict>(ResolverCollectionActionTypes.UPDATE_RESOLVER_CONFLICT),
map(action => action.payload),
withLatestFrom(this.store.select(fromResolver.getSelectedResolver)),
switchMap(([filter, current]) => {
Expand Down
12 changes: 9 additions & 3 deletions ui/src/app/user/admin/admin.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,26 @@ import { reducers } from './reducer';
import { AdminService } from './service/admin.service';
import { AdminCollectionEffects } from './effect/collection.effect';
import { EffectsModule } from '@ngrx/effects';
import { DeleteUserDialogComponent } from './component/delete-user-dialog.component';
import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';

@NgModule({
declarations: [
AdminManagementPageComponent,
AdminComponent
AdminComponent,
DeleteUserDialogComponent
],
entryComponents: [
DeleteUserDialogComponent
],
entryComponents: [],
imports: [
CommonModule,
FormsModule,
RouterModule,
HttpClientModule,
SharedModule,
I18nModule
I18nModule,
NgbModalModule
]
})
export class UserAdminModule {
Expand Down
13 changes: 13 additions & 0 deletions ui/src/app/user/admin/component/delete-user-dialog.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<div class="modal-header">
<h4 class="modal-title" translate="message.delete-user-title">Delete User?</h4>
</div>
<div class="modal-body">
<div class="d-flex w-100 justify-content-start">
<i class="fa fa-fw fa-exclamation-triangle fa-3x text-danger"></i>
<p class="ml-2" translate="message.delete-user-body">You are requesting to delete a user. If you complete this process the user will be removed. This cannot be undone. Do you wish to continue?</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" (click)="this.activeModal.close()" translate="action.delete">Delete</button>
<button type="button" class="btn btn-secondary" (click)="this.activeModal.dismiss()" translate="action.cancel">Cancel</button>
</div>
14 changes: 14 additions & 0 deletions ui/src/app/user/admin/component/delete-user-dialog.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';

import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';

@Component({
selector: 'delete-user-dialog',
changeDetection: ChangeDetectionStrategy.OnPush,
templateUrl: './delete-user-dialog.component.html'
})
export class DeleteUserDialogComponent {
constructor(
public activeModal: NgbActiveModal
) { }
} /* istanbul ignore next */
17 changes: 15 additions & 2 deletions ui/src/app/user/admin/container/admin-management.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import * as fromAdmin from '../reducer';
import { LoadAdminRequest, UpdateAdminRequest, RemoveAdminRequest } from '../action/collection.action';
import { Admin } from '../model/admin';
import { LoadRoleRequest } from '../../../core/action/configuration.action';
import { ModalService } from '../../../core/service/modal.service';
import { DeleteUserDialogComponent } from '../component/delete-user-dialog.component';
import { map } from 'rxjs/operators';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';

@Component({
selector: 'admin-management-page',
Expand All @@ -22,7 +26,8 @@ export class AdminManagementPageComponent {
roles$: Observable<string[]>;

constructor(
private store: Store<fromRoot.State>
private store: Store<fromRoot.State>,
private modal: NgbModal
) {
this.store.dispatch(new LoadAdminRequest());
this.store.dispatch(new LoadRoleRequest());
Expand All @@ -39,6 +44,14 @@ export class AdminManagementPageComponent {
}

deleteUser(user: string): void {
this.store.dispatch(new RemoveAdminRequest(user));
this.modal
.open(DeleteUserDialogComponent)
.result
.then(
result => this.store.dispatch(new RemoveAdminRequest(user))
)
.catch(
err => err
);
}
}

0 comments on commit de4774a

Please sign in to comment.