From 6b2029c57f8f9b219ff0f402228e10782caede80 Mon Sep 17 00:00:00 2001
From: mechtelm <mechtel@iqb.hu-berlin.de>
Date: Tue, 28 Jan 2020 18:43:49 +0100
Subject: [PATCH] * making workspace and superadmin modules lazy loading *
 problem: interceptor in workspace module ignored!

---
 package.json                                  |  2 +-
 src/app/app-routing.module.ts                 |  6 ++---
 src/app/app.interceptor.ts                    |  1 +
 src/app/app.module.ts                         |  8 ++-----
 src/app/iqb-files/iqb-files.module.ts         |  6 ++---
 src/app/start/start.component.ts              |  2 +-
 src/app/superadmin/backend.service.ts         |  4 ++--
 .../superadmin/superadmin-routing.module.ts   |  2 +-
 src/app/superadmin/superadmin.module.ts       |  8 +++----
 src/app/superadmin/users/users.component.ts   |  6 +++--
 .../workspaces/workspaces.component.ts        |  2 +-
 src/app/workspace/backend.service.ts          |  4 ++--
 src/app/workspace/files/files.component.ts    |  3 +--
 .../workspace/monitor/monitor.component.ts    |  2 +-
 .../workspace/results/results.component.ts    | 24 ++++++++++---------
 .../workspace/syscheck/syscheck.component.ts  |  7 +++---
 src/app/workspace/workspace-routing.module.ts |  4 ++--
 src/app/workspace/workspace.component.ts      |  9 +++----
 src/app/workspace/workspace.interceptor.ts    |  8 +++++--
 src/app/workspace/workspace.module.ts         | 12 +++-------
 src/app/workspace/workspacedata.service.ts    |  2 +-
 21 files changed, 55 insertions(+), 67 deletions(-)

diff --git a/package.json b/package.json
index a6e8d29c..cdebdf44 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
     "@angular/platform-browser-dynamic": "~8.2.14",
     "@angular/router": "~8.2.14",
     "@types/file-saver": "^2.0.1",
-    "iqb-components": "1.5.0",
+    "iqb-components": "1.6.0",
     "core-js": "^3.6.4",
     "file-saver": "^2.0.2",
     "hammerjs": "^2.0.8",
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 97b8c11a..fd48278b 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -1,17 +1,15 @@
 import { AboutComponent } from './about/about.component';
-import { SuperadminComponent } from './superadmin/superadmin.component';
 import { StartComponent } from './start/start.component';
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
-import { WorkspaceComponent } from './workspace';
 
 
 const routes: Routes = [
   {path: '', redirectTo: 'start', pathMatch: 'full'},
   {path: 'start', component: StartComponent},
-  {path: 'ws', component: WorkspaceComponent},
   {path: 'about', component: AboutComponent},
-  {path: 'superadmin', component: SuperadminComponent}
+  {path: 'ws', loadChildren: './workspace/workspace.module#WorkspaceModule'},
+  {path: 'superadmin', loadChildren: './superadmin/superadmin.module#SuperadminModule'}
 ];
 
 @NgModule({
diff --git a/src/app/app.interceptor.ts b/src/app/app.interceptor.ts
index a3db39b8..31dcca3d 100644
--- a/src/app/app.interceptor.ts
+++ b/src/app/app.interceptor.ts
@@ -25,6 +25,7 @@ export class AuthInterceptor implements HttpInterceptor {
       }
     });
 
+    console.log('AuthInterceptor');
     return next.handle(requestA);
   }
 }
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 9804ce88..083e75a0 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -23,12 +23,10 @@ import { MatTooltipModule } from '@angular/material/tooltip';
 import { AppComponent } from './app.component';
 import { AppRoutingModule } from './app-routing.module';
 
-import { WorkspaceModule } from './workspace';
 import { StartComponent } from './start/start.component';
-import { SuperadminModule } from './superadmin';
 import { FlexLayoutModule } from '@angular/flex-layout';
 import { httpInterceptorProviders } from './app.interceptor';
-import {IqbComponents} from "iqb-components";
+import {IqbComponentsModule} from "iqb-components";
 
 @NgModule({
   declarations: [
@@ -53,10 +51,8 @@ import {IqbComponents} from "iqb-components";
     MatTabsModule,
     ReactiveFormsModule,
     HttpClientModule,
-    WorkspaceModule,
-    SuperadminModule,
     AppRoutingModule,
-    IqbComponents,
+    IqbComponentsModule,
     MatCardModule,
     MatProgressSpinnerModule,
     FlexLayoutModule
diff --git a/src/app/iqb-files/iqb-files.module.ts b/src/app/iqb-files/iqb-files.module.ts
index becf4803..02d6c9ab 100644
--- a/src/app/iqb-files/iqb-files.module.ts
+++ b/src/app/iqb-files/iqb-files.module.ts
@@ -1,4 +1,3 @@
-import { IqbComponents } from 'iqb-components';
 import { NgModule } from '@angular/core';
 import { IqbFilesUploadComponent } from './iqbFilesUpload/iqbFilesUpload.component';
 import { IqbFilesUploadQueueComponent } from './iqbFilesUploadQueue/iqbFilesUploadQueue.component';
@@ -8,8 +7,8 @@ import { MatButtonModule } from '@angular/material/button';
 import { MatCardModule } from '@angular/material/card';
 import { MatProgressBarModule } from '@angular/material/progress-bar';
 import { MatIconModule } from '@angular/material/icon';
-import { HttpClientModule } from '@angular/common/http';
 import { CommonModule } from '@angular/common';
+import {IqbComponentsModule} from "iqb-components";
 
 
 @NgModule({
@@ -18,8 +17,7 @@ import { CommonModule } from '@angular/common';
     MatProgressBarModule,
     MatIconModule,
     MatCardModule,
-    HttpClientModule,
-    IqbComponents,
+    IqbComponentsModule,
     CommonModule
   ],
   declarations: [
diff --git a/src/app/start/start.component.ts b/src/app/start/start.component.ts
index 49f61310..ba5b72eb 100644
--- a/src/app/start/start.component.ts
+++ b/src/app/start/start.component.ts
@@ -1,11 +1,11 @@
 import { LoginData, WorkspaceData } from '../app.interfaces';
 import { BackendService } from '../backend.service';
-import { ServerError } from 'iqb-components';
 import { MainDataService } from '../maindata.service';
 import { Router } from '@angular/router';
 import { Component, OnInit, OnDestroy } from '@angular/core';
 import { FormGroup, FormBuilder, Validators } from '@angular/forms';
 import { Subscription } from 'rxjs';
+import {ServerError} from "iqb-components";
 
 
 @Component({
diff --git a/src/app/superadmin/backend.service.ts b/src/app/superadmin/backend.service.ts
index bb981740..d902c489 100644
--- a/src/app/superadmin/backend.service.ts
+++ b/src/app/superadmin/backend.service.ts
@@ -1,4 +1,4 @@
-import { Injectable, Inject } from '@angular/core';
+import {Injectable, Inject, SkipSelf} from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { Observable, of } from 'rxjs';
 import { catchError } from 'rxjs/operators';
@@ -11,7 +11,7 @@ export class BackendService {
 
   constructor(
     @Inject('SERVER_URL') private readonly serverUrl: string,
-    private http: HttpClient) {
+    @SkipSelf() private http: HttpClient) {
       this.serverUrl = this.serverUrl + 'php/sys.php/';
     }
 
diff --git a/src/app/superadmin/superadmin-routing.module.ts b/src/app/superadmin/superadmin-routing.module.ts
index 8a09ecc7..edbabde8 100644
--- a/src/app/superadmin/superadmin-routing.module.ts
+++ b/src/app/superadmin/superadmin-routing.module.ts
@@ -8,7 +8,7 @@ import { SuperadminComponent } from './superadmin.component';
 
 const routes: Routes = [
   {
-    path: 'superadmin',
+    path: '',
     component: SuperadminComponent,
     children: [
       {path: '', redirectTo: 'users', pathMatch: 'full'},
diff --git a/src/app/superadmin/superadmin.module.ts b/src/app/superadmin/superadmin.module.ts
index 7159f02a..2d0619c7 100644
--- a/src/app/superadmin/superadmin.module.ts
+++ b/src/app/superadmin/superadmin.module.ts
@@ -1,5 +1,4 @@
 import { NgModule } from '@angular/core';
-import { HttpClientModule } from '@angular/common/http';
 import { CommonModule } from '@angular/common';
 import { MatButtonModule } from '@angular/material/button';
 import { MatCheckboxModule } from '@angular/material/checkbox';
@@ -23,12 +22,12 @@ import { WorkspacesComponent } from './workspaces/workspaces.component';
 import { UsersComponent } from './users/users.component';
 import { SuperadminComponent } from './superadmin.component';
 import { BackendService } from './backend.service';
-import { IqbFilesModule } from '../iqb-files/iqb-files.module';
-import { IqbComponents } from 'iqb-components';
+import { IqbFilesModule } from '../iqb-files';
 import { NewuserComponent } from './users/newuser/newuser.component';
 import { NewpasswordComponent } from './users/newpassword/newpassword.component';
 import { NewworkspaceComponent } from './workspaces/newworkspace/newworkspace.component';
 import { EditworkspaceComponent } from './workspaces/editworkspace/editworkspace.component';
+import {IqbComponentsModule} from "iqb-components";
 
 
 @NgModule({
@@ -36,14 +35,13 @@ import { EditworkspaceComponent } from './workspaces/editworkspace/editworkspace
     CommonModule,
     SuperadminRoutingModule,
     IqbFilesModule,
-    IqbComponents,
+    IqbComponentsModule,
     MatTableModule,
     MatTabsModule,
     MatIconModule,
     MatSelectModule,
     MatCheckboxModule,
     MatSortModule,
-    HttpClientModule,
     ReactiveFormsModule,
     MatProgressSpinnerModule,
     MatDialogModule,
diff --git a/src/app/superadmin/users/users.component.ts b/src/app/superadmin/users/users.component.ts
index a4ac3999..4cc23e19 100644
--- a/src/app/superadmin/users/users.component.ts
+++ b/src/app/superadmin/users/users.component.ts
@@ -10,8 +10,10 @@ import { MatSnackBar } from '@angular/material/snack-bar';
 import { MatSort } from '@angular/material/sort';
 import { FormGroup } from '@angular/forms';
 import { SelectionModel } from '@angular/cdk/collections';
-import { ConfirmDialogComponent, ConfirmDialogData, MessageDialogComponent,
-  MessageDialogData, MessageType } from 'iqb-components';
+import {
+  ConfirmDialogComponent, ConfirmDialogData, MessageDialogComponent,
+  MessageDialogData, MessageType
+} from "iqb-components";
 import { Subscription } from 'rxjs';
 import { MainDataService } from 'src/app/maindata.service';
 
diff --git a/src/app/superadmin/workspaces/workspaces.component.ts b/src/app/superadmin/workspaces/workspaces.component.ts
index cd077da3..86a001c3 100644
--- a/src/app/superadmin/workspaces/workspaces.component.ts
+++ b/src/app/superadmin/workspaces/workspaces.component.ts
@@ -11,7 +11,7 @@ import { MatSort } from '@angular/material/sort';
 import { FormGroup } from '@angular/forms';
 import { SelectionModel } from '@angular/cdk/collections';
 import { ConfirmDialogComponent, ConfirmDialogData, MessageDialogComponent,
-  MessageDialogData, MessageType } from 'iqb-components';
+  MessageDialogData, MessageType } from "iqb-components";
 import { Subscription } from 'rxjs';
 import { MainDataService } from 'src/app/maindata.service';
 
diff --git a/src/app/workspace/backend.service.ts b/src/app/workspace/backend.service.ts
index 7e67f5b0..e79ed687 100644
--- a/src/app/workspace/backend.service.ts
+++ b/src/app/workspace/backend.service.ts
@@ -1,6 +1,6 @@
 import { GetFileResponseData, CheckWorkspaceResponseData, BookletsStarted, SysCheckStatistics,
   ReviewData, LogData, UnitResponse, ResultData, MonitorData } from './workspace.interfaces';
-import { Injectable, Inject } from '@angular/core';
+import {Injectable, Inject, SkipSelf} from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { Observable } from 'rxjs';
 import { catchError } from 'rxjs/operators';
@@ -12,7 +12,7 @@ export class BackendService {
 
   constructor(
     @Inject('SERVER_URL') private readonly serverUrl: string,
-    private http: HttpClient) {
+    @SkipSelf() private http: HttpClient) {
 
     this.serverUrlSlim = this.serverUrl + 'php/ws.php/';
     this.serverUrl = this.serverUrl + 'php/';
diff --git a/src/app/workspace/files/files.component.ts b/src/app/workspace/files/files.component.ts
index d9879ac5..447344b8 100644
--- a/src/app/workspace/files/files.component.ts
+++ b/src/app/workspace/files/files.component.ts
@@ -1,9 +1,8 @@
 import { MainDataService } from '../../maindata.service';
-import { ServerError } from "iqb-components";
 import { WorkspaceDataService } from '../workspacedata.service';
 import { GetFileResponseData, CheckWorkspaceResponseData } from '../workspace.interfaces';
 import { ConfirmDialogComponent, ConfirmDialogData, MessageDialogComponent,
-  MessageDialogData, MessageType } from 'iqb-components';
+  MessageDialogData, MessageType, ServerError } from "iqb-components";
 import { Subscription } from 'rxjs';
 import { MatTableDataSource } from '@angular/material/table';
 import { MatSnackBar } from '@angular/material/snack-bar';
diff --git a/src/app/workspace/monitor/monitor.component.ts b/src/app/workspace/monitor/monitor.component.ts
index 090070ea..8dbad30b 100644
--- a/src/app/workspace/monitor/monitor.component.ts
+++ b/src/app/workspace/monitor/monitor.component.ts
@@ -9,7 +9,7 @@ import { SelectionModel } from '@angular/cdk/collections';
 import { saveAs } from 'file-saver';
 import { MonitorData } from '../workspace.interfaces';
 import { Subscription } from 'rxjs';
-import { ServerError } from 'iqb-components';
+import {ServerError} from "iqb-components";
 
 
 @Component({
diff --git a/src/app/workspace/results/results.component.ts b/src/app/workspace/results/results.component.ts
index bf31c736..5cec77cd 100644
--- a/src/app/workspace/results/results.component.ts
+++ b/src/app/workspace/results/results.component.ts
@@ -1,8 +1,8 @@
-import { LogData } from './../workspace.interfaces';
-import { WorkspaceDataService } from './../workspacedata.service';
-import { ConfirmDialogComponent, ConfirmDialogData } from 'iqb-components';
+import { LogData } from '../workspace.interfaces';
+import { WorkspaceDataService } from '../workspacedata.service';
+import { ConfirmDialogComponent, ConfirmDialogData } from "iqb-components";
 import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core';
-import { BackendService } from './../backend.service';
+import { BackendService } from '../backend.service';
 import { MatDialog } from '@angular/material/dialog';
 import { MatSnackBar } from '@angular/material/snack-bar';
 import { MatSort } from '@angular/material/sort';
@@ -35,7 +35,7 @@ export class ResultsComponent implements OnInit, OnDestroy {
   ) { }
 
   ngOnInit() {
-    this.workspaceIdSubscription = this.wds.workspaceId$.subscribe(ws => {
+    this.workspaceIdSubscription = this.wds.workspaceId$.subscribe(() => {
       this.updateTable();
     });
   }
@@ -110,7 +110,7 @@ export class ResultsComponent implements OnInit, OnDestroy {
               myCsvData += lineDelimiter;
             }
           });
-          var blob = new Blob([myCsvData], {type: "text/csv;charset=utf-8"});
+          const blob = new Blob([myCsvData], {type: "text/csv;charset=utf-8"});
           saveAs(blob, "iqb-testcenter-responses.csv");
         } else {
           this.snackBar.open('Keine Daten verfügbar.', 'Fehler', {duration: 3000});
@@ -157,8 +157,10 @@ export class ResultsComponent implements OnInit, OnDestroy {
 
           responseData.forEach((resp: ReviewData) => {
             if ((resp.entry !== null) && (resp.entry.length > 0)) {
-              myCsvData += '"' + resp.groupname + '"' + columnDelimiter + '"' + resp.loginname + '"' + columnDelimiter + '"' + resp.code + '"' + columnDelimiter +
-                '"' + resp.bookletname + '"' + columnDelimiter + '"' + resp.unitname + '"' + columnDelimiter  + '"' +  resp.priority  + '"' + columnDelimiter;
+              myCsvData += '"' + resp.groupname + '"' + columnDelimiter + '"' + resp.loginname + '"' +
+                columnDelimiter + '"' + resp.code + '"' + columnDelimiter + '"' + resp.bookletname + '"' +
+                columnDelimiter + '"' + resp.unitname + '"' + columnDelimiter  + '"' +
+                resp.priority  + '"' + columnDelimiter;
               const resp_categories = resp.categories.split(' ');
               allCategories.forEach(s => {
                 if (resp_categories.includes(s)) {
@@ -170,7 +172,7 @@ export class ResultsComponent implements OnInit, OnDestroy {
               myCsvData += '"' + resp.reviewtime + '"' + columnDelimiter  + '"' +  resp.entry  + '"' + lineDelimiter;
             }
           });
-          var blob = new Blob([myCsvData], {type: "text/csv;charset=utf-8"});
+          const blob = new Blob([myCsvData], {type: "text/csv;charset=utf-8"});
           saveAs(blob, "iqb-testcenter-reviews.csv");
         } else {
           this.snackBar.open('Keine Daten verfügbar.', 'Fehler', {duration: 3000});
@@ -204,7 +206,7 @@ export class ResultsComponent implements OnInit, OnDestroy {
               resp.timestamp.toString() + '"' + columnDelimiter  + resp.logentry.replace(/\\"/g, '""')  + lineDelimiter;
             }
           });
-          var blob = new Blob([myCsvData], {type: "text/csv;charset=utf-8"});
+          const blob = new Blob([myCsvData], {type: "text/csv;charset=utf-8"});
           saveAs(blob, "iqb-testcenter-logs.csv");
         } else {
           this.snackBar.open('Keine Daten verfügbar.', 'Fehler', {duration: 3000});
@@ -243,7 +245,7 @@ export class ResultsComponent implements OnInit, OnDestroy {
         if (result !== false) {
           // =========================================================
           this.dataLoading = true;
-          this.bs.deleteData(selectedGroups).subscribe((deleteOk: boolean) => {
+          this.bs.deleteData(selectedGroups).subscribe(() => {
                   this.tableselectionCheckbox.clear();
                   this.dataLoading = false;
                 });
diff --git a/src/app/workspace/syscheck/syscheck.component.ts b/src/app/workspace/syscheck/syscheck.component.ts
index b95e5d30..8d1952fc 100644
--- a/src/app/workspace/syscheck/syscheck.component.ts
+++ b/src/app/workspace/syscheck/syscheck.component.ts
@@ -1,6 +1,6 @@
-import { ConfirmDialogComponent, ConfirmDialogData } from 'iqb-components';
+import { ConfirmDialogComponent, ConfirmDialogData } from "iqb-components";
 import { Component, OnInit, ViewChild } from '@angular/core';
-import { BackendService } from './../backend.service';
+import { BackendService } from '../backend.service';
 import { MatDialog } from '@angular/material/dialog';
 import { MatSnackBar } from '@angular/material/snack-bar';
 import { MatSort } from '@angular/material/sort';
@@ -17,7 +17,6 @@ import { SysCheckStatistics } from '../workspace.interfaces';
 export class SyscheckComponent implements OnInit {
   displayedColumns: string[] = ['selectCheckbox', 'syscheckLabel', 'number', 'details'];
   public resultDataSource = new MatTableDataSource<SysCheckStatistics>([]);
-  private isAdmin = false;
   // prepared for selection if needed sometime
   public tableselectionCheckbox = new SelectionModel<SysCheckStatistics>(true, []);
   public dataLoading = false;
@@ -114,7 +113,7 @@ export class SyscheckComponent implements OnInit {
         if (result !== false) {
           // =========================================================
           this.dataLoading = true;
-          this.bs.deleteSysCheckReports(selectedReports).subscribe((deleteOk: boolean) => {
+          this.bs.deleteSysCheckReports(selectedReports).subscribe(() => {
                   this.tableselectionCheckbox.clear();
                   this.dataLoading = false;
                 });
diff --git a/src/app/workspace/workspace-routing.module.ts b/src/app/workspace/workspace-routing.module.ts
index d4068ec0..98fd9e28 100644
--- a/src/app/workspace/workspace-routing.module.ts
+++ b/src/app/workspace/workspace-routing.module.ts
@@ -1,14 +1,14 @@
 import { SyscheckComponent } from './syscheck/syscheck.component';
 import { MonitorComponent } from './monitor/monitor.component';
 import { ResultsComponent } from './results/results.component';
-import { NgModule, Component } from '@angular/core';
+import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
 import { FilesComponent } from './files/files.component';
 import { WorkspaceComponent } from './workspace.component';
 
 const routes: Routes = [
   {
-    path: 'ws/:ws',
+    path: ':ws',
     component: WorkspaceComponent,
     children: [
       {path: '', redirectTo: 'monitor', pathMatch: 'full'},
diff --git a/src/app/workspace/workspace.component.ts b/src/app/workspace/workspace.component.ts
index 31c200b5..9c59a47d 100644
--- a/src/app/workspace/workspace.component.ts
+++ b/src/app/workspace/workspace.component.ts
@@ -1,11 +1,8 @@
 import { WorkspaceDataService } from './workspacedata.service';
-import { MainDataService } from './../maindata.service';
+import { MainDataService } from '../maindata.service';
 import { ActivatedRoute } from '@angular/router';
-import { Observable, Subscription } from 'rxjs';
+import { Subscription } from 'rxjs';
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { MatFormFieldModule } from '@angular/material/form-field';
-import { MatSelectModule } from '@angular/material/select';
-import { MatTabsModule } from '@angular/material/tabs';
 
 
 @Component({
@@ -30,7 +27,7 @@ export class WorkspaceComponent implements OnInit, OnDestroy {
       this.wds.setWorkspace(ws, this.mds.getWorkspaceRole(ws), this.mds.getWorkspaceName(ws));
     });
 
-    this.logindataSubscription = this.mds.loginData$.subscribe(ld => {
+    this.logindataSubscription = this.mds.loginData$.subscribe(() => {
       this.wds.setWorkspace(this.wds.ws, this.mds.getWorkspaceRole(this.wds.ws), this.mds.getWorkspaceName(this.wds.ws));
     });
   }
diff --git a/src/app/workspace/workspace.interceptor.ts b/src/app/workspace/workspace.interceptor.ts
index 01876554..24ff6b52 100644
--- a/src/app/workspace/workspace.interceptor.ts
+++ b/src/app/workspace/workspace.interceptor.ts
@@ -1,10 +1,13 @@
 import { WorkspaceDataService } from './workspacedata.service';
-import { Injectable } from '@angular/core';
+import {Injectable} from '@angular/core';
 import { HttpInterceptor, HttpRequest,
   HttpHandler, HttpEvent, HTTP_INTERCEPTORS } from '@angular/common/http';
 import { Observable } from 'rxjs';
 
-@Injectable()
+@Injectable({
+  providedIn: 'root'
+})
+
 export class WorkspaceInterceptor implements HttpInterceptor {
   constructor(public wds: WorkspaceDataService) {}
 
@@ -25,6 +28,7 @@ export class WorkspaceInterceptor implements HttpInterceptor {
       }
     });
 
+    console.log('WorkspaceInterceptor');
     return next.handle(requestA);
   }
 }
diff --git a/src/app/workspace/workspace.module.ts b/src/app/workspace/workspace.module.ts
index ced23362..db946b1a 100644
--- a/src/app/workspace/workspace.module.ts
+++ b/src/app/workspace/workspace.module.ts
@@ -1,21 +1,16 @@
 import { FlexLayoutModule } from '@angular/flex-layout';
 import { BackendService } from './backend.service';
 import { IqbFilesModule } from '../iqb-files';
-import { IqbComponents } from 'iqb-components';
 import { ReactiveFormsModule } from '@angular/forms';
-import { NgModule, Component } from '@angular/core';
+import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { WorkspaceDataService } from './workspacedata.service';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
-
-import { HttpClientModule } from '@angular/common/http';
 import { WorkspaceRoutingModule } from './workspace-routing.module';
 import { WorkspaceComponent } from './workspace.component';
 import { FilesComponent } from './files/files.component';
 import { ResultsComponent } from './results/results.component';
 
-
 import { MatButtonModule } from '@angular/material/button';
 import { MatCardModule } from '@angular/material/card';
 import { MatCheckboxModule } from '@angular/material/checkbox';
@@ -36,6 +31,7 @@ import { MatExpansionModule } from '@angular/material/expansion';
 import {MatGridListModule} from '@angular/material/grid-list';
 import { SyscheckComponent } from './syscheck/syscheck.component';
 import { httpInterceptorProviders } from './workspace.interceptor';
+import {IqbComponentsModule} from 'iqb-components';
 
 @NgModule({
   imports: [
@@ -50,7 +46,6 @@ import { httpInterceptorProviders } from './workspace.interceptor';
     MatSortModule,
     MatCardModule,
     MatExpansionModule,
-    HttpClientModule,
     ReactiveFormsModule,
     MatProgressSpinnerModule,
     MatDialogModule,
@@ -61,10 +56,9 @@ import { httpInterceptorProviders } from './workspace.interceptor';
     MatToolbarModule,
     MatSnackBarModule,
     MatGridListModule,
-    IqbComponents,
+    IqbComponentsModule,
     FlexLayoutModule,
     MatCardModule,
-    BrowserAnimationsModule,
     FlexLayoutModule
   ],
   exports: [
diff --git a/src/app/workspace/workspacedata.service.ts b/src/app/workspace/workspacedata.service.ts
index 1b91eba5..6e13e13f 100644
--- a/src/app/workspace/workspacedata.service.ts
+++ b/src/app/workspace/workspacedata.service.ts
@@ -1,6 +1,6 @@
 import { BehaviorSubject } from 'rxjs';
 import { Injectable } from '@angular/core';
-import { ServerError } from "iqb-components";
+import { ServerError } from 'iqb-components';
 
 @Injectable({
   providedIn: 'root'
-- 
GitLab