From ab74bf066f2d5d9748dd7c164a1f0d97f3894611 Mon Sep 17 00:00:00 2001
From: rhenck <richard.henck@iqb.hu-berlin.de>
Date: Fri, 9 Jul 2021 17:15:38 +0200
Subject: [PATCH] [editor] Revert unit observable refactoring

---
 .../unit-view/unit-view.component.html        |  2 +-
 .../unit-view/unit-view.component.ts          |  2 -
 projects/editor/src/app/unit.service.ts       | 61 +++++++++----------
 3 files changed, 30 insertions(+), 35 deletions(-)

diff --git a/projects/editor/src/app/components/unit-view/unit-view.component.html b/projects/editor/src/app/components/unit-view/unit-view.component.html
index 3dd24fd94..13915b626 100644
--- a/projects/editor/src/app/components/unit-view/unit-view.component.html
+++ b/projects/editor/src/app/components/unit-view/unit-view.component.html
@@ -13,7 +13,7 @@
     <mat-drawer-content>
       <mat-tab-group mat-align-tabs="start" class="mat-tab-fill-height"
                      [selectedIndex]="unitService.selectedPageIndex | async">
-        <mat-tab *ngFor="let page of (unitObservable | async)!.pages; let i = index" label="Seite {{i+1}}">
+        <mat-tab *ngFor="let page of (unitService.unit | async)!.pages; let i = index" label="Seite {{i+1}}">
           <ng-template mat-tab-label>
             Seite {{i+1}}
             <button class="delete-page-button" mat-button (click)="deletePage()">
diff --git a/projects/editor/src/app/components/unit-view/unit-view.component.ts b/projects/editor/src/app/components/unit-view/unit-view.component.ts
index decf096ee..43137e721 100644
--- a/projects/editor/src/app/components/unit-view/unit-view.component.ts
+++ b/projects/editor/src/app/components/unit-view/unit-view.component.ts
@@ -21,8 +21,6 @@ import { Unit } from '../../../../../common/unit';
   ]
 })
 export class UnitViewComponent {
-  unitObservable: Observable<Unit> = this.unitService.getUnitObservable();
-
   constructor(public unitService: UnitService, public dialog: MatDialog) { }
 
   addPage(): void {
diff --git a/projects/editor/src/app/unit.service.ts b/projects/editor/src/app/unit.service.ts
index 025913d91..fc5b4f842 100644
--- a/projects/editor/src/app/unit.service.ts
+++ b/projects/editor/src/app/unit.service.ts
@@ -14,12 +14,10 @@ import { IdService } from './id.service';
   providedIn: 'root'
 })
 export class UnitService {
-  private unit: Unit;
-
+  private _unit: BehaviorSubject<Unit>;
   private _selectedPageIndex: BehaviorSubject<number>;
-  private unitSubject: BehaviorSubject<Unit>;
-
   private _pages: BehaviorSubject<UnitPage>[];
+
   private _selectedPageSectionIndex: BehaviorSubject<number>;
 
   private _selectedElements: BehaviorSubject<UnitUIElement[]>;
@@ -27,13 +25,13 @@ export class UnitService {
   elementUpdated = new Subject();
 
   constructor(private messageService: MessageService, private idService: IdService) {
-    this.unit = UnitFactory.createUnit();
+    const initialUnit = UnitFactory.createUnit();
     const initialPage = UnitFactory.createUnitPage();
     const initialSection = UnitFactory.createUnitPageSection();
     initialPage.sections.push(initialSection);
-    this.unit.pages.push(initialPage);
+    initialUnit.pages.push(initialPage);
 
-    this.unitSubject = new BehaviorSubject(this.unit);
+    this._unit = new BehaviorSubject(initialUnit);
     this._pages = [new BehaviorSubject(initialPage as UnitPage)];
     this._selectedPageIndex = new BehaviorSubject(0);
 
@@ -41,8 +39,8 @@ export class UnitService {
     this._selectedElements = new BehaviorSubject<UnitUIElement[]>([]);
   }
 
-  getUnitObservable(): Observable<Unit> {
-    return this.unitSubject.asObservable();
+  get unit(): Observable<Unit> {
+    return this._unit.asObservable();
   }
 
   get selectedPageIndex(): Observable<number> {
@@ -66,24 +64,24 @@ export class UnitService {
   }
 
   getSelectedPageSection(): UnitPageSection {
-    return this.unitSubject.value.pages[this._selectedPageIndex.value].sections[this._selectedPageSectionIndex.value];
+    return this._unit.value.pages[this._selectedPageIndex.value].sections[this._selectedPageSectionIndex.value];
   }
 
   addPage(): void {
     const newPage = UnitFactory.createUnitPage();
     newPage.sections.push(UnitFactory.createUnitPageSection());
-    this.unit.pages.push(newPage);
+    this._unit.value.pages.push(newPage);
     this._pages.push(new BehaviorSubject(newPage as UnitPage));
 
-    this.unitSubject.next(this.unit);
-    this._selectedPageIndex.next(this.unitSubject.value.pages.length - 1);
+    this._unit.next(this._unit.value);
+    this._selectedPageIndex.next(this._unit.value.pages.length - 1);
   }
 
   deletePage(index: number = this._selectedPageIndex.value): void {
-    this.unit.pages.splice(index, 1);
+    this._unit.value.pages.splice(index, 1);
     this._pages.splice(index, 1);
 
-    this.unitSubject.next(this.unit);
+    this._unit.next(this._unit.value);
     if (index === this._selectedPageIndex.value) {
       this._selectedPageIndex.next(this._selectedPageIndex.value - 1);
     }
@@ -91,20 +89,20 @@ export class UnitService {
 
   addSection(): void {
     const newSection = UnitFactory.createUnitPageSection();
-    this.unitSubject.value.pages[this._selectedPageIndex.value].sections.push(newSection);
-    this.unitSubject.next(this.unitSubject.value);
-    this._pages[this._selectedPageIndex.value].next(this.unitSubject.value.pages[this._selectedPageIndex.value]); // TODO auslagern?
+    this._unit.value.pages[this._selectedPageIndex.value].sections.push(newSection);
+    this._unit.next(this._unit.value);
+    this._pages[this._selectedPageIndex.value].next(this._unit.value.pages[this._selectedPageIndex.value]); // TODO auslagern?
   }
 
   deleteSection(): void {
-    if (this.unitSubject.value.pages[this._selectedPageIndex.value].sections.length < 2) {
+    if (this._unit.value.pages[this._selectedPageIndex.value].sections.length < 2) {
       this.messageService.showWarning('cant delete last section');
     } else {
       const index = this._selectedPageSectionIndex.value;
-      this.unitSubject.value.pages[this._selectedPageIndex.value].sections.splice(index, 1);
-      this.unitSubject.next(this.unitSubject.value);
+      this._unit.value.pages[this._selectedPageIndex.value].sections.splice(index, 1);
+      this._unit.next(this._unit.value);
 
-      this._pages[this._selectedPageIndex.value].next(this.unitSubject.value.pages[this._selectedPageIndex.value]);
+      this._pages[this._selectedPageIndex.value].next(this._unit.value.pages[this._selectedPageIndex.value]);
       if (this._selectedPageSectionIndex.value > 0) {
         this._selectedPageSectionIndex.next(this._selectedPageSectionIndex.value - 1);
       }
@@ -148,10 +146,10 @@ export class UnitService {
         throw new Error(`ElementType ${elementType} not found!`);
     }
     newElement.id = this.idService.getNewID(elementType);
-    this.unitSubject.value.pages[this._selectedPageIndex.value]
+    this._unit.value.pages[this._selectedPageIndex.value]
       .sections[this._selectedPageSectionIndex.value].elements.push(newElement!);
 
-    this._pages[this._selectedPageIndex.value].next(this.unitSubject.value.pages[this._selectedPageIndex.value]);
+    this._pages[this._selectedPageIndex.value].next(this._unit.value.pages[this._selectedPageIndex.value]);
   }
 
   switchPage(selectedIndex: number): void {
@@ -193,30 +191,29 @@ export class UnitService {
   }
 
   deleteSelectedElements(): void {
-    const oldElements = this.unitSubject.value.pages[this._selectedPageIndex.value]
+    const oldElements = this._unit.value.pages[this._selectedPageIndex.value]
       .sections[this._selectedPageSectionIndex.value].elements;
-    this.unitSubject.value.pages[this._selectedPageIndex.value]
+    this._unit.value.pages[this._selectedPageIndex.value]
       .sections[this._selectedPageSectionIndex.value].elements =
       oldElements.filter(element => !this._selectedElements.value.includes(element));
-    this._pages[this._selectedPageIndex.value].next(this.unitSubject.value.pages[this._selectedPageIndex.value]);
+    this._pages[this._selectedPageIndex.value].next(this._unit.value.pages[this._selectedPageIndex.value]);
   }
 
   saveUnit(): void {
-    const unitJSON = JSON.stringify(this.unit);
+    const unitJSON = JSON.stringify(this._unit.value);
     FileService.saveUnitToFile(unitJSON);
   }
 
   async loadUnit(): Promise<void> {
     const newUnit = JSON.parse(await FileService.loadFile(['.json']));
     this._selectedPageIndex.next(0);
-    this.unit = newUnit;
-    this.unitSubject.next(this.unit);
+    this._unit.next(newUnit);
     this._pages = [];
-    this.unitSubject.value.pages.forEach((page: UnitPage) => {
+    this._unit.value.pages.forEach((page: UnitPage) => {
       this._pages.push(new BehaviorSubject(page));
     });
 
-    this.idService.readExistingIDs(this.unitSubject.value);
+    this.idService.readExistingIDs(this._unit.value);
   }
 
   selectPageSection(index: number): void {
-- 
GitLab