From cd922a5efa2b90b6bc4a877a8f2d7140483ee02f Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Tue, 28 Sep 2021 11:01:40 +0200
Subject: [PATCH] [player] Reset pages when loading a new unit definition

---
 docs/release-notes.txt                   |  3 ++
 projects/player/src/app/app.component.ts | 55 ++++++++++++++----------
 2 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/docs/release-notes.txt b/docs/release-notes.txt
index 7ce4440aa..e9a87162e 100644
--- a/docs/release-notes.txt
+++ b/docs/release-notes.txt
@@ -15,6 +15,9 @@ Editor
 
 Player
 ======
+next
+- [bug] Reset pages when loading a new unit definition
+
 1.0.8
 - [bug] Don't show needless scrollbars for radio button group and validation messages
 - [bug] Fix/Allow resizing of text area
diff --git a/projects/player/src/app/app.component.ts b/projects/player/src/app/app.component.ts
index 61c50aab6..669025669 100644
--- a/projects/player/src/app/app.component.ts
+++ b/projects/player/src/app/app.component.ts
@@ -1,5 +1,4 @@
 import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
 import { TranslateService } from '@ngx-translate/core';
 import { MatDialog } from '@angular/material/dialog';
 import {
@@ -17,13 +16,15 @@ import { SpecialCharacterService } from './services/special-character.service';
 @Component({
   selector: 'player-aspect',
   template: `
-    <app-unit-state *ngIf="playerConfig" [pages]=pages [playerConfig]=playerConfig></app-unit-state>
+    <app-unit-state *ngIf="playerConfig && pages?.length"
+                    [pages]=pages
+                    [playerConfig]=playerConfig>
+    </app-unit-state>
   `
 })
 export class AppComponent implements OnInit {
-  form!: FormGroup;
   pages!: UnitPage[];
-  playerConfig!: PlayerConfig;
+  playerConfig!: PlayerConfig | undefined;
 
   constructor(private translateService: TranslateService,
               private veronaSubscriptionService: VeronaSubscriptionService,
@@ -71,24 +72,27 @@ export class AppComponent implements OnInit {
   }
 
   private onStart(message: VopStartCommand): void {
-    // eslint-disable-next-line no-console
-    console.log('player: onStart', message);
-    const unitDefinition: Unit = message.unitDefinition ? JSON.parse(message.unitDefinition) : {};
-    if (this.metaDataService.verifyUnitDefinitionVersion(unitDefinition.veronaModuleVersion)) {
-      this.playerConfig = message.playerConfig || {};
-      this.veronaPostService.sessionId = message.sessionId;
-      this.veronaPostService.stateReportPolicy = message.playerConfig?.stateReportPolicy || 'none';
-      this.initUnitPages(unitDefinition.pages, message.unitState);
-      this.specialCharacterService.useKeyboard(false);
-    } else {
-      this.dialog.open(AlertDialogComponent, {
-        data: {
-          title: this.translateService.instant('dialogTitle.wrongUnitDefinitionType'),
-          content: this.translateService.instant('dialogContent.wrongUnitDefinitionType',
-            { version: this.metaDataService.playerMetadata.supportedUnitDefinitionTypes })
-        }
-      });
-    }
+    this.reset();
+    setTimeout(() => {
+      // eslint-disable-next-line no-console
+      console.log('player: onStart', message);
+      const unitDefinition: Unit = message.unitDefinition ? JSON.parse(message.unitDefinition) : {};
+      if (this.metaDataService.verifyUnitDefinitionVersion(unitDefinition.veronaModuleVersion)) {
+        this.playerConfig = message.playerConfig || {};
+        this.veronaPostService.sessionId = message.sessionId;
+        this.veronaPostService.stateReportPolicy = message.playerConfig?.stateReportPolicy || 'none';
+        this.initUnitPages(unitDefinition.pages, message.unitState);
+        this.specialCharacterService.useKeyboard(false);
+      } else {
+        this.dialog.open(AlertDialogComponent, {
+          data: {
+            title: this.translateService.instant('dialogTitle.wrongUnitDefinitionType'),
+            content: this.translateService.instant('dialogContent.wrongUnitDefinitionType',
+              { version: this.metaDataService.playerMetadata.supportedUnitDefinitionTypes })
+          }
+        });
+      }
+    });
   }
 
   // structure of a unitPage:   {sections: [{elements: [{id: ..., value: ...}]}]}
@@ -124,4 +128,11 @@ export class AppComponent implements OnInit {
     console.log('player: onFocus', focused);
     this.veronaPostService.sendVopWindowFocusChangedNotification(focused);
   }
+
+  private reset(): void {
+    // eslint-disable-next-line no-console
+    console.log('player: reset');
+    this.pages = [];
+    this.playerConfig = {};
+  }
 }
-- 
GitLab