2022-01-19 17:24:11 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
|
|
import { ILogger } from '../../models/logger.model';
|
|
|
|
import { MenuType } from '../../models/menu.model';
|
|
|
|
import { LoggerService } from '../logger/logger.service';
|
|
|
|
|
2022-03-23 13:48:17 +01:00
|
|
|
/**
|
|
|
|
* @internal
|
|
|
|
*/
|
2022-01-19 17:24:11 +01:00
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root'
|
|
|
|
})
|
2022-04-05 15:40:43 +02:00
|
|
|
export class PanelService {
|
2022-04-05 15:51:10 +02:00
|
|
|
panelOpenedObs: Observable<{ opened: boolean; type?: MenuType }>;
|
2022-01-19 17:24:11 +01:00
|
|
|
protected log: ILogger;
|
2022-04-05 15:51:10 +02:00
|
|
|
protected isChatPanelOpened: boolean = false;
|
|
|
|
protected isParticipantsPanelOpened: boolean = false;
|
|
|
|
protected _panelOpened = <BehaviorSubject<{ opened: boolean; type?: MenuType }>>new BehaviorSubject({ opened: false });
|
2022-01-19 17:24:11 +01:00
|
|
|
|
|
|
|
constructor(protected loggerSrv: LoggerService) {
|
2022-04-05 15:40:43 +02:00
|
|
|
this.log = this.loggerSrv.get('PanelService');
|
2022-04-05 15:51:10 +02:00
|
|
|
this.panelOpenedObs = this._panelOpened.asObservable();
|
2022-01-19 17:24:11 +01:00
|
|
|
}
|
|
|
|
|
2022-04-05 15:51:10 +02:00
|
|
|
isPanelOpened(): boolean {
|
2022-01-19 17:24:11 +01:00
|
|
|
return this.isChatOpened() || this.isParticipantsOpened();
|
|
|
|
}
|
|
|
|
|
2022-04-05 15:51:10 +02:00
|
|
|
togglePanel(type: MenuType) {
|
2022-01-19 17:24:11 +01:00
|
|
|
this.log.d(`Toggling ${type} menu`);
|
|
|
|
if (type === MenuType.CHAT) {
|
2022-04-05 15:51:10 +02:00
|
|
|
if (this.isChatPanelOpened) {
|
2022-01-19 17:24:11 +01:00
|
|
|
// Close chat and side menu
|
2022-04-05 15:51:10 +02:00
|
|
|
this.isChatPanelOpened = false;
|
|
|
|
this._panelOpened.next({ opened: false });
|
2022-01-19 17:24:11 +01:00
|
|
|
} else {
|
|
|
|
// Open chat
|
2022-04-05 15:51:10 +02:00
|
|
|
this.isChatPanelOpened = true;
|
|
|
|
this.isParticipantsPanelOpened = false;
|
|
|
|
this._panelOpened.next({ opened: true, type: MenuType.CHAT });
|
2022-01-19 17:24:11 +01:00
|
|
|
}
|
|
|
|
} else if (type === MenuType.PARTICIPANTS) {
|
2022-04-05 15:51:10 +02:00
|
|
|
if (this.isParticipantsPanelOpened) {
|
2022-01-19 17:24:11 +01:00
|
|
|
// Close participants menu and side menu
|
2022-04-05 15:51:10 +02:00
|
|
|
this.isParticipantsPanelOpened = false;
|
|
|
|
this._panelOpened.next({ opened: false });
|
2022-01-19 17:24:11 +01:00
|
|
|
} else {
|
|
|
|
// Open participants menu
|
2022-04-05 15:51:10 +02:00
|
|
|
this.isParticipantsPanelOpened = true;
|
|
|
|
this.isChatPanelOpened = false;
|
|
|
|
this._panelOpened.next({ opened: true, type: MenuType.PARTICIPANTS });
|
2022-01-19 17:24:11 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
closeMenu() {
|
2022-04-05 15:51:10 +02:00
|
|
|
this.isParticipantsPanelOpened = false;
|
|
|
|
this.isChatPanelOpened = false;
|
|
|
|
this._panelOpened.next({ opened: false });
|
2022-01-19 17:24:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
isChatOpened() {
|
2022-04-05 15:51:10 +02:00
|
|
|
return this.isChatPanelOpened;
|
2022-01-19 17:24:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
isParticipantsOpened() {
|
2022-04-05 15:51:10 +02:00
|
|
|
return this.isParticipantsPanelOpened;
|
2022-01-19 17:24:11 +01:00
|
|
|
}
|
|
|
|
}
|