From ea2f273a73c02a3b7e9345605357ac4900c4d672 Mon Sep 17 00:00:00 2001
From: Ruben Bimberg <ruben.bimberg@mni.thm.de>
Date: Mon, 12 Jul 2021 13:34:06 +0200
Subject: [PATCH] Fix redraw bug

Sometimes the tag cloud did a redraw unnecessarily
when joining the tag cloud via dialog.

[Ticket: #186]
---
 .../topic-cloud-filter/topic-cloud-filter.component.ts   | 2 +-
 .../components/shared/tag-cloud/tag-cloud.component.ts   | 8 ++------
 src/app/services/util/tag-cloud-data.service.ts          | 5 +++++
 src/app/services/util/topic-cloud-admin.service.ts       | 9 ++++++---
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts b/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts
index b3bf5ca68..9eb077c9e 100644
--- a/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts
+++ b/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts
@@ -68,7 +68,7 @@ export class TopicCloudFilterComponent implements OnInit {
       this.filteredComments = this.getCommentCounts(this.comments.filter(comment => this.tmpFilter.checkComment(comment)));
       this.commentsLoadedCallback();
       this.hasNoKeywords = this.comments.length >= 3 &&
-        this.allComments.keywords === 0 &&
+        this.comments.every(comment => !comment.keywordsFromSpacy || comment.keywordsFromSpacy.length === 0) &&
         !WorkerDialogComponent.isWorkingOnRoom(data.room.id);
     });
     this.eventService.broadcast('pushCurrentRoomData');
diff --git a/src/app/components/shared/tag-cloud/tag-cloud.component.ts b/src/app/components/shared/tag-cloud/tag-cloud.component.ts
index 65145b71b..122763e8f 100644
--- a/src/app/components/shared/tag-cloud/tag-cloud.component.ts
+++ b/src/app/components/shared/tag-cloud/tag-cloud.component.ts
@@ -156,7 +156,7 @@ const getDefaultCloudParameters = (): CloudParameters => {
   templateUrl: './tag-cloud.component.html',
   styleUrls: ['./tag-cloud.component.scss']
 })
-export class TagCloudComponent implements OnInit, OnDestroy, AfterContentInit, AfterViewInit {
+export class TagCloudComponent implements OnInit, OnDestroy, AfterContentInit {
 
   @ViewChild(TCloudComponent, { static: false }) child: TCloudComponent;
   @ViewChild(TagCloudPopUpComponent) popup: TagCloudPopUpComponent;
@@ -303,15 +303,11 @@ export class TagCloudComponent implements OnInit, OnDestroy, AfterContentInit, A
   ngAfterContentInit() {
     document.getElementById('footer_rescale').style.display = 'none';
     this._calcFont = window.getComputedStyle(document.getElementById('tagCloudComponent')).fontFamily;
-    this.dataManager.bindToRoom(this.roomId, this.userRole);
+    setTimeout(() => this.dataManager.bindToRoom(this.roomId, this.userRole));
     this.dataManager.updateDemoData(this.translateService);
     this.setCloudParameters(TagCloudComponent.getCurrentCloudParameters(), false);
   }
 
-  ngAfterViewInit() {
-    setTimeout(() => this.rebuildData());
-  }
-
   ngOnDestroy() {
     document.getElementById('footer_rescale').style.display = 'block';
     this.headerInterface.unsubscribe();
diff --git a/src/app/services/util/tag-cloud-data.service.ts b/src/app/services/util/tag-cloud-data.service.ts
index d3762dcda..7d60e8387 100644
--- a/src/app/services/util/tag-cloud-data.service.ts
+++ b/src/app/services/util/tag-cloud-data.service.ts
@@ -154,8 +154,12 @@ export class TagCloudDataService {
   }
 
   bindToRoom(roomId: string, userRole: UserRole): void {
+    if (this._subscriptionAdminData) {
+      throw new Error('Room already bound.');
+    }
     this._currentFilter = CommentFilter.currentFilter;
     this._roomId = roomId;
+    this._lastFetchedComments = null;
     this._subscriptionAdminData = this._tagCloudAdmin.getAdminData.subscribe(adminData => {
       this.onReceiveAdminData(adminData, true);
     });
@@ -181,6 +185,7 @@ export class TagCloudDataService {
 
   unbindRoom(): void {
     this._subscriptionAdminData.unsubscribe();
+    this._subscriptionAdminData = null;
     if (this._commentSubscription !== null) {
       this._commentSubscription.unsubscribe();
       this._commentSubscription = null;
diff --git a/src/app/services/util/topic-cloud-admin.service.ts b/src/app/services/util/topic-cloud-admin.service.ts
index 429b18536..6c88ce2f8 100644
--- a/src/app/services/util/topic-cloud-admin.service.ts
+++ b/src/app/services/util/topic-cloud-admin.service.ts
@@ -146,9 +146,12 @@ export class TopicCloudAdminService {
     this.roomService.getRoom(roomId).subscribe(room => {
       this.blacklistActive = room.blacklistIsActive;
       const adminData = TopicCloudAdminService.getDefaultAdminData;
-      adminData.blacklistIsActive = room.blacklistIsActive;
-      adminData.profanityFilter = room.profanityFilter;
-      this.setAdminData(adminData, false, userRole);
+      if (adminData.blacklistIsActive !== room.blacklistIsActive ||
+        adminData.profanityFilter !== room.profanityFilter) {
+        adminData.blacklistIsActive = room.blacklistIsActive;
+        adminData.profanityFilter = room.profanityFilter;
+        this.setAdminData(adminData, false, userRole);
+      }
     });
   }
 
-- 
GitLab