2021-06-17 14:12:43 +05:30
|
|
|
import {ViewModel} from "../../ViewModel.js";
|
|
|
|
import {RoomDetailsViewModel} from "./RoomDetailsViewModel.js";
|
2021-06-17 15:17:02 +05:30
|
|
|
import {MemberListViewModel} from "./MemberListViewModel.js";
|
2021-06-17 14:12:43 +05:30
|
|
|
|
|
|
|
export class RightPanelViewModel extends ViewModel {
|
|
|
|
constructor(options) {
|
|
|
|
super(options);
|
|
|
|
this._room = options.room;
|
|
|
|
this._setupNavigation();
|
|
|
|
}
|
|
|
|
|
|
|
|
get roomDetailsViewModel() { return this._roomDetailsViewModel; }
|
2021-06-17 15:17:02 +05:30
|
|
|
get memberListViewModel() { return this._memberListViewModel; }
|
2021-06-27 15:05:35 +05:30
|
|
|
get activeViewModel() { return this._roomDetailsViewModel ?? this._memberListViewModel; }
|
2021-06-17 14:12:43 +05:30
|
|
|
|
|
|
|
_setupNavigation() {
|
|
|
|
const details = this.navigation.observe("details");
|
|
|
|
this.track(details.subscribe(() => this._toggleRoomDetailsPanel()));
|
|
|
|
this._toggleRoomDetailsPanel();
|
2021-06-17 15:17:02 +05:30
|
|
|
|
|
|
|
const members = this.navigation.observe("members");
|
|
|
|
this.track(members.subscribe(() => this._toggleMemberListPanel()));
|
|
|
|
this._toggleMemberListPanel();
|
2021-06-17 14:12:43 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
_toggleRoomDetailsPanel() {
|
|
|
|
this._roomDetailsViewModel = this.disposeTracked(this._roomDetailsViewModel);
|
|
|
|
const enable = !!this.navigation.path.get("details")?.value;
|
|
|
|
if (enable) {
|
|
|
|
const room = this._room;
|
|
|
|
this._roomDetailsViewModel = this.track(new RoomDetailsViewModel(this.childOptions({room})));
|
|
|
|
}
|
|
|
|
this.emitChange("roomDetailsViewModel");
|
|
|
|
}
|
2021-06-17 15:17:02 +05:30
|
|
|
|
|
|
|
async _toggleMemberListPanel() {
|
|
|
|
this._memberListViewModel = this.disposeTracked(this._memberListViewModel);
|
|
|
|
const enable = !!this.navigation.path.get("members")?.value;
|
|
|
|
if (enable) {
|
|
|
|
const list = await this._room.loadMemberList();
|
|
|
|
const members = list.members;
|
2021-06-18 13:16:23 +05:30
|
|
|
const powerLevels = this._room.powerLevels;
|
2021-06-26 14:32:39 +05:30
|
|
|
const mediaRepository = this._room.mediaRepository;
|
2021-06-17 15:17:02 +05:30
|
|
|
this._memberListViewModel = this.track(
|
2021-06-26 14:32:39 +05:30
|
|
|
new MemberListViewModel(this.childOptions({members, powerLevels, mediaRepository}))
|
2021-06-17 15:17:02 +05:30
|
|
|
);
|
|
|
|
}
|
|
|
|
this.emitChange("memberListViewModel");
|
|
|
|
}
|
2021-06-17 14:12:43 +05:30
|
|
|
}
|