Skip to content

Commit

Permalink
Adding structure for source management
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Jan 17, 2019
1 parent 6e4007e commit 5b37eab
Show file tree
Hide file tree
Showing 17 changed files with 230 additions and 125 deletions.
2 changes: 1 addition & 1 deletion ui/src/app/admin/admin.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { LoadRoleRequest } from '../core/action/configuration.action';

import * as fromRoot from '../app.reducer';
import { Store } from '@ngrx/store';
import { LoadAdminRequest } from './action/collection.action';
import { LoadAdminRequest } from './action/user-collection.action';

@Component({
selector: 'admin-page',
Expand Down
10 changes: 7 additions & 3 deletions ui/src/app/admin/admin.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@ import { AdminManagementPageComponent } from './container/admin-management.compo
import { AdminComponent } from './admin.component';
import { reducers } from './reducer';
import { AdminService } from './service/admin.service';
import { AdminCollectionEffects } from './effect/collection.effect';
import { AdminCollectionEffects } from './effect/user-collection.effect';
import { EffectsModule } from '@ngrx/effects';
import { DeleteUserDialogComponent } from './component/delete-user-dialog.component';
import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
import { ActionRequiredPageComponent } from './container/action-required.component';
import { AccessRequestComponent } from './component/access-request.component';
import { UserManagementComponent } from './component/user-management.component';
import { EnableMetadataComponent } from './component/enable-metadata.component';
import { ManagerModule } from '../metadata/manager/manager.module';

@NgModule({
declarations: [
Expand All @@ -26,7 +28,8 @@ import { UserManagementComponent } from './component/user-management.component';
DeleteUserDialogComponent,
UserManagementComponent,
ActionRequiredPageComponent,
AccessRequestComponent
AccessRequestComponent,
EnableMetadataComponent
],
entryComponents: [
DeleteUserDialogComponent
Expand All @@ -41,7 +44,8 @@ import { UserManagementComponent } from './component/user-management.component';
HttpClientModule,
SharedModule,
I18nModule,
NgbModalModule
NgbModalModule,
ManagerModule
],
providers: [
AdminService
Expand Down
107 changes: 46 additions & 61 deletions ui/src/app/admin/component/access-request.component.html
Original file line number Diff line number Diff line change
@@ -1,68 +1,53 @@
<section class="section">
<div class="section-body border border-top-0 border-primary">
<div class="section-header bg-primary p-2 text-light">
<div class="row justify-content-between">
<div class="col-12">
<span class="lead" translate="label.user-access-request">User Access Request</span>
</div>
</div>

<ng-container>
<div class="d-flex justify-content-center">
<div class="w-25 alert alert-info m-3" *ngIf="!(hasUsers$ | async)">
<p>There are no new user requests at this time.</p>
</div>
<ng-container>
<div class="d-flex justify-content-center">
<div class="w-25 alert alert-info m-3" *ngIf="!(hasUsers$ | async)">
<p>There are no new user requests at this time.</p>
</div>
</div>
</ng-container>
<ng-container *ngIf="hasUsers$ | async">
<div *ngFor="let user of users$ | async; let i = index;">
<div class="p-3 bg-light border-light rounded m-3">
<div class="row align-items-center">
<div class="col-10">
<div class="row">
<div class="col text-right font-weight-bold" translate="label.user-id">
UserId
</div>
<div class="col">{{ user.username }}</div>
<div class="col text-right font-weight-bold" translate="label.email">
Email
</div>
<div class="col">{{ user.emailAddress }}</div>
</div>
<div class="w-100 my-1"></div>
<div class="row">
<div class="col text-right font-weight-bold" translate="label.name">
Name
</div>
<div class="col">{{ user.firstName }} {{ user.lastName }}</div>
<label [for]="'role-' + i" class="d-block col text-right font-weight-bold" translate="label.role">
Role
</label>
<div class="col">
<select
[id]="'role-' + i"
[name]="user.username"
[ngModel]="user.role"
class="form-control form-control-sm"
disableValidation
(change)="setUserRole(user, $event.target.value)">
<option *ngFor="let role of roles$ | async" [value]="role">{{ role }}</option>
</select>
</div>
</div>
</div>
</ng-container>
<ng-container *ngIf="hasUsers$ | async">
<div *ngFor="let user of users$ | async; let i = index;">
<div class="p-3 bg-light border-light rounded m-3">
<div class="row align-items-center">
<div class="col-10">
<div class="row">
<div class="col text-right font-weight-bold" translate="label.user-id">
UserId
</div>
<div class="col-2 text-right">
<button class="btn btn-danger btn-sm" (click)="deleteUser(user.username)">
<i class="fa fa-trash fa-lg"></i>
&nbsp;
<span translate="label.delete-request">
Delete Request
</span>
</button>
<div class="col">{{ user.username }}</div>
<div class="col text-right font-weight-bold" translate="label.email">
Email
</div>
<div class="col">{{ user.emailAddress }}</div>
</div>
<div class="w-100 my-1"></div>
<div class="row">
<div class="col text-right font-weight-bold" translate="label.name">
Name
</div>
<div class="col">{{ user.firstName }} {{ user.lastName }}</div>
<label [for]="'role-' + i" class="d-block col text-right font-weight-bold" translate="label.role">
Role
</label>
<div class="col">
<select [id]="'role-' + i" [name]="user.username" [ngModel]="user.role" class="form-control form-control-sm"
disableValidation (change)="setUserRole(user, $event.target.value)">
<option *ngFor="let role of roles$ | async" [value]="role">{{ role }}</option>
</select>
</div>
</div>
</div>
<div class="col-2 text-right">
<button class="btn btn-danger btn-sm" (click)="deleteUser(user.username)">
<i class="fa fa-trash fa-lg"></i>
&nbsp;
<span translate="label.delete-request">
Delete Request
</span>
</button>
</div>
</div>
</ng-container>
</div>
</div>
</section>
</ng-container>
14 changes: 14 additions & 0 deletions ui/src/app/admin/component/enable-metadata.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<ul class="list-unstyled m-0">
<li *ngFor="let resolver of limited$ | async; index as i"
[ngClass]="{'mt-2': i > 0}"
aria-label="Provider Item Accordion. Press Spacebar to open">
<resolver-item
[entity]="resolver"
[isOpen]="(entitiesOpen$ | async)[resolver.getId()]"
(select)="edit(resolver)"
(toggle)="toggleEntity(resolver)"
(preview)="openPreviewDialog(resolver)"
(delete)="deleteResolver(resolver)">
</resolver-item>
</li>
</ul>
75 changes: 75 additions & 0 deletions ui/src/app/admin/component/enable-metadata.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Store } from '@ngrx/store';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

import { MetadataEntity, MetadataResolver } from '../../metadata/domain/model';
import * as fromDashboard from '../../metadata/manager/reducer';
import { ToggleEntityDisplay } from '../../metadata/manager/action/manager.action';
import { DeleteDialogComponent } from '../../metadata/manager/component/delete-dialog.component';
import { PreviewEntity } from '../../metadata/domain/action/entity.action';
import { RemoveDraftRequest } from '../../metadata/resolver/action/draft.action';
import { LoadResolverRequest } from '../../metadata/resolver/action/collection.action';

@Component({
selector: 'enable-metadata',
templateUrl: './enable-metadata.component.html'
})

export class EnableMetadataComponent implements OnInit {
searchQuery$: Observable<string>;
resolvers$: Observable<MetadataEntity[]>;
loading$: Observable<boolean>;

total$: Observable<number>;
page = 1;
limit = 8;
limited$: Observable<MetadataEntity[]>;

entitiesOpen$: Observable<{ [key: string]: boolean }>;

constructor(
private store: Store<fromDashboard.DashboardState>,
private router: Router,
private modalService: NgbModal
) {
this.resolvers$ = store.select(fromDashboard.getSearchResults);
this.searchQuery$ = store.select(fromDashboard.getSearchQuery);
this.loading$ = store.select(fromDashboard.getSearchLoading);
this.entitiesOpen$ = store.select(fromDashboard.getOpenProviders);

this.total$ = this.resolvers$.pipe(map(list => list.length));
}

ngOnInit(): void {
this.store.dispatch(new LoadResolverRequest());
}

edit(entity: MetadataEntity): void {
this.router.navigate(['metadata', 'resolver', entity.getId(), 'edit']);
}

toggleEntity(entity: MetadataEntity): void {
this.store.dispatch(new ToggleEntityDisplay(entity.getId()));
}

openPreviewDialog(entity: MetadataEntity): void {
this.store.dispatch(new PreviewEntity({ id: entity.getId(), entity }));
}

deleteResolver(entity: MetadataResolver): void {
this.modalService
.open(DeleteDialogComponent)
.result
.then(
success => {
this.store.dispatch(new RemoveDraftRequest(entity));
},
err => {
console.log('Cancelled');
}
);
}
}
82 changes: 35 additions & 47 deletions ui/src/app/admin/component/user-management.component.html
Original file line number Diff line number Diff line change
@@ -1,47 +1,35 @@
<section class="section">
<div class="section-body border border-top-0 border-primary">
<div class="section-header bg-primary p-2 text-light">
<div class="row justify-content-between">
<div class="col-12">
<span class="lead" translate="label.user-maintenance">User Maintenance</span>
</div>
</div>
</div>
<div class="p-3">
<div class="alert alert-info" *ngIf="!(hasUsers$ | async)">
<p>There are no users configured in the system for you to manage.</p>
</div>
<table class="table table-striped" *ngIf="hasUsers$ | async">
<thead class="thead-primary">
<tr>
<th scope="col" translate="label.user-id">UserId</th>
<th scope="col" translate="label.name">Name</th>
<th scope="col" translate="label.email">Email</th>
<th scope="col" translate="label.role">Role</th>
<th scope="col" translate="label.delete">Delete?</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let user of users$ | async">
<th>{{ user.username }}</th>
<td>{{ user.firstName }} {{ user.lastName }}</td>
<td>{{ user.emailAddress }}</td>
<td>
<select [name]="user.username" [ngModel]="user.role" class="form-control" (change)="setUserRole(user, $event.target.value)">
<option *ngFor="let role of roles$ | async" [value]="role">{{ role }}</option>
</select>
</td>
<td>
<button class="btn btn-link" (click)="deleteUser(user.username)">
<span class="sr-only" translate="label.delete-user">
Delete User
</span>
<i class="fa fa-trash fa-lg text-danger"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<div class="alert alert-info" *ngIf="!(hasUsers$ | async)">
<p>There are no users configured in the system for you to manage.</p>
</div>
<table class="table table-striped" *ngIf="hasUsers$ | async">
<thead class="thead-primary">
<tr>
<th scope="col" translate="label.user-id">UserId</th>
<th scope="col" translate="label.name">Name</th>
<th scope="col" translate="label.email">Email</th>
<th scope="col" translate="label.role">Role</th>
<th scope="col" translate="label.delete">Delete?</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let user of users$ | async">
<th>{{ user.username }}</th>
<td>{{ user.firstName }} {{ user.lastName }}</td>
<td>{{ user.emailAddress }}</td>
<td>
<select [name]="user.username" [ngModel]="user.role" class="form-control" (change)="setUserRole(user, $event.target.value)">
<option *ngFor="let role of roles$ | async" [value]="role">{{ role }}</option>
</select>
</td>
<td>
<button class="btn btn-link" (click)="deleteUser(user.username)">
<span class="sr-only" translate="label.delete-user">
Delete User
</span>
<i class="fa fa-trash fa-lg text-danger"></i>
</button>
</td>
</tr>
</tbody>
</table>

2 changes: 1 addition & 1 deletion ui/src/app/admin/component/user-management.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as fromRoot from '../../app.reducer';
import * as fromCore from '../../core/reducer';
import * as fromAdmin from '../reducer';

import { UpdateAdminRequest, RemoveAdminRequest } from '../action/collection.action';
import { UpdateAdminRequest, RemoveAdminRequest } from '../action/user-collection.action';
import { Admin } from '../model/admin';
import { DeleteUserDialogComponent } from '../component/delete-user-dialog.component';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
Expand Down
28 changes: 27 additions & 1 deletion ui/src/app/admin/container/action-required.component.html
Original file line number Diff line number Diff line change
@@ -1 +1,27 @@
<access-request-component></access-request-component>
<section class="section">
<div class="section-body border border-top-0 border-primary">
<div class="section-header bg-primary p-2 text-light">
<div class="row justify-content-between">
<div class="col-12">
<span class="lead" translate="label.enable-metadata-sources">Enable Metadata Sources</span>
</div>
</div>
</div>
<div class="p-3">
<enable-metadata></enable-metadata>
</div>
</div>
</section>
<section class="section">
<div class="section-body border border-top-0 border-primary">
<div class="section-header bg-primary p-2 text-light">
<div class="row justify-content-between">
<div class="col-12">
<span class="lead" translate="label.user-access-request">User Access Request</span>
</div>
</div>
</div>
<access-request-component></access-request-component>
</div>
</section>

2 changes: 0 additions & 2 deletions ui/src/app/admin/container/action-required.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ import { Store } from '@ngrx/store';

import * as fromRoot from '../../app.reducer';

import { LoadNewUsersRequest } from '../action/collection.action';

@Component({
selector: 'action-required-page',
changeDetection: ChangeDetectionStrategy.OnPush,
Expand Down
Loading

0 comments on commit 5b37eab

Please sign in to comment.