diff --git a/src/app/app.module.ts b/src/app/app.module.ts index f4654b0629dedf0d609907f8a7e527deab210581..3c32c0b5a89c67ddaef615bfc85574454deddce0 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -12,6 +12,7 @@ import { AuthenticationGuard } from './guards/authentication.guard'; import { RoomService } from './services/http/room.service'; import { CommentService } from './services/http/comment.service'; import { DataStoreService } from './services/util/data-store.service'; +import { EventService } from './services/util/event.service'; import { ContentService } from './services/http/content.service'; import { ContentAnswerService } from './services/http/content-answer.service'; import { VoteService } from './services/http/vote.service'; @@ -77,6 +78,7 @@ export function initializeApp(appConfig: AppConfig) { AuthenticationService, AuthenticationGuard, DataStoreService, + EventService, RoomService, CommentService, ContentService, diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts index e6a3c9f78f92d0b7b7433f9655c1ac12b7f00d37..43033c7022725ec234ab7f7d066c79951adaf892 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts @@ -9,8 +9,10 @@ import { Router } from '@angular/router'; import { RoomCreatorPageComponent } from '../../room-creator-page/room-creator-page.component'; import { DeleteCommentComponent } from '../delete-comment/delete-comment.component'; import { CommentService } from '../../../../services/http/comment.service'; +import { EventService } from '../../../../services/util/event.service'; import { CommentExportComponent } from '../comment-export/comment-export.component'; import { Comment } from '../../../../models/comment'; +import { RoomDeleted } from '../../../../models/messages/room-deleted'; @Component({ selector: 'app-room-edit', @@ -29,6 +31,7 @@ export class RoomEditComponent implements OnInit { protected roomService: RoomService, public router: Router, public commentService: CommentService, + public eventService: EventService, @Inject(MAT_DIALOG_DATA) public data: any) { } @@ -69,7 +72,10 @@ export class RoomEditComponent implements OnInit { this.translationService.get('room-page.deleted').subscribe(msg => { this.notificationService.show(room.name + msg); }); - this.roomService.deleteRoom(room.id).subscribe(); + this.roomService.deleteRoom(room.id).subscribe(result => { + const event = new RoomDeleted(room.id); + this.eventService.broadcast(event.type, event.payload); + }); this.dialogRef.close('delete'); this.router.navigate([`/creator`]); } diff --git a/src/app/components/shared/room-list/room-list.component.ts b/src/app/components/shared/room-list/room-list.component.ts index 0085157249b74dd8f449f6a0a460f4281bb54575..4dbaa283819e3771484dc2cda32e9769c3b6ad09 100644 --- a/src/app/components/shared/room-list/room-list.component.ts +++ b/src/app/components/shared/room-list/room-list.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Room } from '../../../models/room'; import { RoomService } from '../../../services/http/room.service'; +import { EventService } from '../../../services/util/event.service'; import { AuthenticationService } from '../../../services/http/authentication.service'; import { UserRole } from '../../../models/user-roles.enum'; @@ -17,12 +18,16 @@ export class RoomListComponent implements OnInit { constructor( private roomService: RoomService, + public eventService: EventService, protected authenticationService: AuthenticationService) { } ngOnInit() { this.getRooms(); this.getPath(); + this.eventService.on<any>('RoomDeleted').subscribe(payload => { + this.rooms = this.rooms.filter(r => r.id !== payload.id); + }); } getPath() { diff --git a/src/app/models/messages/room-deleted.ts b/src/app/models/messages/room-deleted.ts new file mode 100644 index 0000000000000000000000000000000000000000..fb2a279470a07332a27821c6a0c0086b70947ebb --- /dev/null +++ b/src/app/models/messages/room-deleted.ts @@ -0,0 +1,13 @@ +export class RoomDeleted { + type: string; + payload: { + id: string; + }; + + constructor(id: string) { + this.type = 'RoomDeleted'; + this.payload = { + id: id + }; + } +} diff --git a/src/app/services/util/event.service.ts b/src/app/services/util/event.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..243726b1cd79fcb9734a0622d18060626a23afe6 --- /dev/null +++ b/src/app/services/util/event.service.ts @@ -0,0 +1,27 @@ +import { Subject } from 'rxjs/Subject'; +import { Observable } from 'rxjs/Observable'; +import { filter, map } from 'rxjs/operators'; + +interface BroadcastEvent { + key: any; + data?: any; +} + +export class EventService { + private _eventBus: Subject<BroadcastEvent>; + + constructor() { + this._eventBus = new Subject<BroadcastEvent>(); + } + + broadcast(key: any, data?: any) { + this._eventBus.next({ key, data }); + } + + on<T>(key: any): Observable<T> { + return this._eventBus.asObservable().pipe( + filter(event => event.key === key), + map(event => <T>event.data) + ); + } +}