From f1065aea20c71d33a44c47025d0cd25a07ce5aa1 Mon Sep 17 00:00:00 2001 From: paf <paf@titelfrei.de> Date: Tue, 16 Jun 2020 16:56:22 +0200 Subject: [PATCH] show group(s) on group-monitor entry screen --- .../monitor-starter.component.html | 8 +++---- .../monitor-starter.component.ts | 21 ++++++++++++------- src/app/app.interfaces.ts | 5 +++++ src/app/backend.service.ts | 20 ++++++++++++++---- src/app/group-monitor/backend.service.ts | 2 +- .../group-monitor-routing.module.ts | 2 +- .../group-monitor/group-monitor.component.ts | 4 +--- 7 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/app/app-root/monitor-starter/monitor-starter.component.html b/src/app/app-root/monitor-starter/monitor-starter.component.html index da1cc929..13641cb9 100644 --- a/src/app/app-root/monitor-starter/monitor-starter.component.html +++ b/src/app/app-root/monitor-starter/monitor-starter.component.html @@ -3,12 +3,12 @@ <mat-card-title>Testdurchführung überwachen</mat-card-title> <mat-card-content> <div fxLayoutGap="10px" fxLayout="column"> - <p *ngIf="workspaces.length === 0"> + <p *ngIf="accessObjects.length === 0"> Sie sind angemeldet. Aktuell sind keine Bereiche zur Überwachung für Sie freigegeben. </p> - <button mat-raised-button color="primary" (click)="buttonGotoMonitor(ws)" - *ngFor="let ws of workspaces"> - {{ws.name}} + <button mat-raised-button color="primary" (click)="buttonGotoMonitor(accessObject)" + *ngFor="let accessObject of accessObjects"> + {{accessObject.name}} </button> </div> </mat-card-content> diff --git a/src/app/app-root/monitor-starter/monitor-starter.component.ts b/src/app/app-root/monitor-starter/monitor-starter.component.ts index 2f68a2aa..135ea7af 100644 --- a/src/app/app-root/monitor-starter/monitor-starter.component.ts +++ b/src/app/app-root/monitor-starter/monitor-starter.component.ts @@ -1,5 +1,5 @@ import {Component, OnDestroy, OnInit} from '@angular/core'; -import {AuthAccessKeyType, AuthData, WorkspaceData} from "../../app.interfaces"; +import {AccessObject, AuthAccessKeyType, AuthData, WorkspaceData} from '../../app.interfaces'; import {from, Subscription} from "rxjs"; import {Router} from "@angular/router"; import {BackendService} from "../../backend.service"; @@ -15,7 +15,7 @@ import {CustomtextService} from "iqb-components"; ] }) export class MonitorStarterComponent implements OnInit, OnDestroy { - workspaces: WorkspaceData[] = []; + accessObjects: (WorkspaceData|AccessObject)[] = []; isWorkspaceMonitor = false; private getWorkspaceDataSubscription: Subscription = null; @@ -34,7 +34,7 @@ export class MonitorStarterComponent implements OnInit, OnDestroy { const authData = authDataUntyped as AuthData; if (authData) { if (authData.token) { - this.workspaces = []; + this.accessObjects = []; let scopeIdList = []; if (authData.access[AuthAccessKeyType.TEST_GROUP_MONITOR]) { scopeIdList = authData.access[AuthAccessKeyType.TEST_GROUP_MONITOR]; @@ -48,9 +48,13 @@ export class MonitorStarterComponent implements OnInit, OnDestroy { } this.getWorkspaceDataSubscription = from(scopeIdList).pipe( concatMap(monitorScopeId => { - return this.bs.getWorkspaceData(monitorScopeId) + if (authData.access[AuthAccessKeyType.TEST_GROUP_MONITOR]) { + return this.bs.getGroupData(monitorScopeId) + } else if (authData.access[AuthAccessKeyType.WORKSPACE_MONITOR]) { + return this.bs.getWorkspaceData(monitorScopeId) + } })).subscribe( - wsData => this.workspaces.push(wsData), + wsData => this.accessObjects.push(wsData), () => this.mds.setSpinnerOff(), () => this.mds.setSpinnerOff() ); @@ -70,11 +74,12 @@ export class MonitorStarterComponent implements OnInit, OnDestroy { }); } - buttonGotoMonitor(ws: WorkspaceData) { + buttonGotoMonitor(accessObject: AccessObject) { + if (this.isWorkspaceMonitor) { - this.router.navigateByUrl('/wm/' + ws.id.toString()); + this.router.navigateByUrl('/wm/' + accessObject.id.toString()); } else { - this.router.navigateByUrl('/gm/' + ws.id.toString()); + this.router.navigateByUrl('/gm/' + accessObject.id.toString()); } } diff --git a/src/app/app.interfaces.ts b/src/app/app.interfaces.ts index cbf4a12b..33cbcd14 100644 --- a/src/app/app.interfaces.ts +++ b/src/app/app.interfaces.ts @@ -30,6 +30,11 @@ export interface WorkspaceData { role: "RW" | "RO" | "n.d."; } +export interface AccessObject { + id: string; + name: string; +} + export interface BookletData { id: string; label: string; diff --git a/src/app/backend.service.ts b/src/app/backend.service.ts index aa0d408f..2475404e 100644 --- a/src/app/backend.service.ts +++ b/src/app/backend.service.ts @@ -4,10 +4,10 @@ import {HttpClient} from '@angular/common/http'; import {Observable, of} from 'rxjs'; import {catchError, map, switchMap} from 'rxjs/operators'; import { - SysCheckInfo, - AuthData, - WorkspaceData, - BookletData, ApiError + SysCheckInfo, + AuthData, + WorkspaceData, + BookletData, ApiError, AccessObject } from './app.interfaces'; import {SysConfig} from "./config/app.config"; @@ -87,6 +87,18 @@ export class BackendService { })); } + getGroupData(groupName: string): Observable<AccessObject> { + return this.http + .get<AccessObject>(this.serverUrl + 'monitor/group/' + groupName) + .pipe(catchError(() => { + console.warn('get workspace data failed for ' + groupName); + return of(<AccessObject>{ + id: groupName, + name: groupName, + }) + })); + } + getSessionData(): Observable<AuthData | number> { return this.http .get<AuthData>(this.serverUrl + 'session') diff --git a/src/app/group-monitor/backend.service.ts b/src/app/group-monitor/backend.service.ts index c2c648e9..70490a47 100644 --- a/src/app/group-monitor/backend.service.ts +++ b/src/app/group-monitor/backend.service.ts @@ -8,7 +8,7 @@ import {WebsocketBackendService} from './websocket-backend.service'; @Injectable() export class BackendService extends WebsocketBackendService<TestSession[]> { - public pollingEndpoint = '/workspace/1/sessions'; + public pollingEndpoint = '/monitor/test-sessions'; public pollingInterval = 5000; public wsChannelName = 'test-sessions'; public initialData: TestSession[] = []; diff --git a/src/app/group-monitor/group-monitor-routing.module.ts b/src/app/group-monitor/group-monitor-routing.module.ts index ba7c7ae5..858bbd11 100644 --- a/src/app/group-monitor/group-monitor-routing.module.ts +++ b/src/app/group-monitor/group-monitor-routing.module.ts @@ -4,7 +4,7 @@ import {GroupMonitorComponent} from "./group-monitor.component"; const routes: Routes = [ - {path: ':ws', component: GroupMonitorComponent} + {path: ':group-name', component: GroupMonitorComponent} ]; @NgModule({ diff --git a/src/app/group-monitor/group-monitor.component.ts b/src/app/group-monitor/group-monitor.component.ts index 9d8079fd..40f7c2f2 100644 --- a/src/app/group-monitor/group-monitor.component.ts +++ b/src/app/group-monitor/group-monitor.component.ts @@ -15,8 +15,6 @@ import {Sort} from '@angular/material/sort'; }) export class GroupMonitorComponent implements OnInit, OnDestroy { - private workspacesId: string; - private routingSubscription: Subscription = null; ownGroup: string; @@ -36,7 +34,7 @@ export class GroupMonitorComponent implements OnInit, OnDestroy { this.routingSubscription = this.route.params.subscribe(params => { - this.workspacesId = params['ws']; + this.ownGroup = params['group-name']; // TODO fetch label }); this.sortBy$ = new BehaviorSubject<Sort>({direction: 'asc', active: 'bookletName'}); -- GitLab