vector-im-hydrogen-web/src/domain/session/SessionViewModel.js

44 lines
1.3 KiB
JavaScript
Raw Normal View History

import EventEmitter from "../../EventEmitter.js";
2019-03-08 19:58:54 +01:00
import RoomTileViewModel from "./roomlist/RoomTileViewModel.js";
import RoomViewModel from "./room/RoomViewModel.js";
import SyncStatusViewModel from "./SyncStatusViewModel.js";
export default class SessionViewModel extends EventEmitter {
constructor(session, sync) {
super();
this._session = session;
this._syncStatusViewModel = new SyncStatusViewModel(sync);
this._currentRoomViewModel = null;
const roomTileVMs = this._session.rooms.mapValues((room, emitUpdate) => {
return new RoomTileViewModel({
room,
emitUpdate,
emitOpen: room => this._openRoom(room)
});
});
this._roomList = roomTileVMs.sortValues((a, b) => a.compare(b));
}
get syncStatusViewModel() {
return this._syncStatusViewModel;
}
get roomList() {
return this._roomList;
}
get currentRoom() {
return this._currentRoomViewModel;
}
_openRoom(room) {
if (this._currentRoomViewModel) {
this._currentRoomViewModel.disable();
}
2019-06-16 10:53:23 +02:00
this._currentRoomViewModel = new RoomViewModel(room, this._session.userId);
this._currentRoomViewModel.enable();
this.emit("change", "currentRoom");
}
}