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 6663529b09371ea9618dbd1f02ac179323fcf31f..0ac869af9f8fb781e123345a4878147cdc5de081 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 @@ -151,7 +151,7 @@ export class TopicCloudFilterComponent implements OnInit { } else { this._adminData.keywordORfulltext = KeywordOrFulltext.both; } - this.topicCloudAdminService.setAdminData(this._adminData, false, this.user.role); + this.topicCloudAdminService.updateLocalAdminData(this._adminData); const params = CloudParameters.currentParameters; params.question = this.question; diff --git a/src/app/services/util/tag-cloud-data.service.ts b/src/app/services/util/tag-cloud-data.service.ts index 864adce64ab4e85370491b42d2c7e521a15c52a0..477d1240125b504f45fbfce400634b05ee5d5919 100644 --- a/src/app/services/util/tag-cloud-data.service.ts +++ b/src/app/services/util/tag-cloud-data.service.ts @@ -66,7 +66,6 @@ export class TagCloudDataService { private _isAlphabeticallySorted: boolean; private _dataBus: BehaviorSubject<TagCloudData>; private _metaDataBus: BehaviorSubject<TagCloudMetaData>; - private _cachedData: TagCloudData; private _commentSubscription = null; private _roomId = null; private _calcWeightType = TagCloudCalcWeightType.byLength; @@ -94,11 +93,6 @@ export class TagCloudDataService { countPerWeight: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }; this._metaDataBus = new BehaviorSubject<TagCloudMetaData>(null); - this._cachedData = null; - // Subscribe to own 'service' for caching - this._dataBus.asObservable().subscribe(data => { - this._cachedData = data; - }); } static buildDataFromComments(adminData: TopicCloudAdminData, comments: Comment[]): [TagCloudData, Set<number>] { @@ -216,7 +210,7 @@ export class TagCloudDataService { } get currentData(): TagCloudData { - return this._cachedData; + return this._dataBus.value; } set weightCalcType(type: TagCloudCalcWeightType) { diff --git a/src/app/services/util/topic-cloud-admin.service.ts b/src/app/services/util/topic-cloud-admin.service.ts index 4b72656ab6c11495f9b9c067feec2d9774973ef0..288d2620866ddf9f63e83210bfd487f16b69657f 100644 --- a/src/app/services/util/topic-cloud-admin.service.ts +++ b/src/app/services/util/topic-cloud-admin.service.ts @@ -146,16 +146,28 @@ export class TopicCloudAdminService { this.roomService.getRoom(roomId).subscribe(room => { this.blacklistActive = room.blacklistIsActive; const adminData = TopicCloudAdminService.getDefaultAdminData; + const list = this.finishBlacklist(room.blacklist ? JSON.parse(room.blacklist) : [], room.blacklistIsActive, room.profanityFilter); + let areEqual = !!adminData.blacklist && list.length === adminData.blacklist.length; + for (let i = 0; i < list.length && areEqual; i++) { + areEqual = list[i] === adminData.blacklist[i]; + } if (adminData.blacklistIsActive !== room.blacklistIsActive || - adminData.profanityFilter !== room.profanityFilter) { + adminData.profanityFilter !== room.profanityFilter || !areEqual) { + this.blacklist.next(list); + this.blacklistIsActive.next(room.blacklistIsActive); + this.blacklistActive = room.blacklistIsActive; adminData.blacklistIsActive = room.blacklistIsActive; adminData.profanityFilter = room.profanityFilter; - this.setAdminData(adminData, false, userRole); + this.setAdminData(adminData, false, userRole, list); } }); } - setAdminData(_adminData: TopicCloudAdminData, updateRoom: boolean, userRole: UserRole) { + updateLocalAdminData(_adminData: TopicCloudAdminData) { + localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData)); + } + + setAdminData(_adminData: TopicCloudAdminData, updateRoom: boolean, userRole: UserRole, blacklist: string[] = null) { localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData)); if (updateRoom && userRole && userRole > UserRole.PARTICIPANT) { this.getRoom().subscribe(room => { @@ -164,17 +176,18 @@ export class TopicCloudAdminService { }); return; } - const subscription = this.getBlacklist().subscribe(list => { - _adminData.blacklist = []; - if (_adminData.blacklistIsActive) { - _adminData.blacklist = list; - } - if (_adminData.profanityFilter !== ProfanityFilter.deactivated) { - _adminData.blacklist = _adminData.blacklist.concat(this.profanityFilterService.getProfanityList); - } + const applyBlacklist = (list: string[]) => { + _adminData.blacklist = this.finishBlacklist(list, _adminData.blacklistIsActive, _adminData.profanityFilter); localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData)); - _adminData.blacklistIsActive = this.blacklistActive; this.adminData.next(_adminData); + }; + if (blacklist) { + applyBlacklist(blacklist); + return; + } + const subscription = this.getBlacklist().subscribe(list => { + _adminData.blacklistIsActive = this.blacklistActive; + applyBlacklist(list); subscription.unsubscribe(); }); } @@ -242,4 +255,12 @@ export class TopicCloudAdminService { }); }); } + + private finishBlacklist(list: string[], blacklistIsActive: boolean, profanityFilter: ProfanityFilter): string[] { + const blacklist = blacklistIsActive ? list : []; + if (profanityFilter === ProfanityFilter.deactivated) { + return blacklist; + } + return blacklist.concat(this.profanityFilterService.getProfanityList); + } }