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