forked from mystiq/hydrogen-web
Broken room list WIP
This commit is contained in:
parent
560ff2afb7
commit
a6b31741c3
4 changed files with 23 additions and 25 deletions
|
@ -40,8 +40,8 @@ export class SessionViewModel extends ViewModel {
|
||||||
this._leftPanelViewModel = this.track(new LeftPanelViewModel(this.childOptions({
|
this._leftPanelViewModel = this.track(new LeftPanelViewModel(this.childOptions({
|
||||||
invites: this._sessionContainer.session.invites,
|
invites: this._sessionContainer.session.invites,
|
||||||
rooms: this._sessionContainer.session.rooms,
|
rooms: this._sessionContainer.session.rooms,
|
||||||
|
sync: this._sessionContainer.sync,
|
||||||
compareFn: this._sessionContainer.sync.compare.bind(this._sessionContainer.sync),
|
compareFn: this._sessionContainer.sync.compare.bind(this._sessionContainer.sync),
|
||||||
includeRoomFn: this._sessionContainer.sync.includeRoom.bind(this._sessionContainer.sync),
|
|
||||||
})));
|
})));
|
||||||
this._settingsViewModel = null;
|
this._settingsViewModel = null;
|
||||||
this._roomViewModelObservable = null;
|
this._roomViewModelObservable = null;
|
||||||
|
|
|
@ -19,7 +19,9 @@ import {ViewModel} from "../../ViewModel.js";
|
||||||
import {RoomTileViewModel} from "./RoomTileViewModel.js";
|
import {RoomTileViewModel} from "./RoomTileViewModel.js";
|
||||||
import {InviteTileViewModel} from "./InviteTileViewModel.js";
|
import {InviteTileViewModel} from "./InviteTileViewModel.js";
|
||||||
import {RoomFilter} from "./RoomFilter.js";
|
import {RoomFilter} from "./RoomFilter.js";
|
||||||
|
import { ConcatList, MappedList } from "../../../observable/index.js";
|
||||||
import {FilteredMap} from "../../../observable/map/FilteredMap.js";
|
import {FilteredMap} from "../../../observable/map/FilteredMap.js";
|
||||||
|
import {Sync3ObservableList} from "../../../matrix/Sync3ObservableList";
|
||||||
import {ApplyMap} from "../../../observable/map/ApplyMap.js";
|
import {ApplyMap} from "../../../observable/map/ApplyMap.js";
|
||||||
import {addPanelIfNeeded} from "../../navigation/index.js";
|
import {addPanelIfNeeded} from "../../navigation/index.js";
|
||||||
import { PlaceholderRoomTileViewModel } from "./PlaceholderRoomTileViewModel.js";
|
import { PlaceholderRoomTileViewModel } from "./PlaceholderRoomTileViewModel.js";
|
||||||
|
@ -27,14 +29,13 @@ import { PlaceholderRoomTileViewModel } from "./PlaceholderRoomTileViewModel.js"
|
||||||
export class LeftPanelViewModel extends ViewModel {
|
export class LeftPanelViewModel extends ViewModel {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
super(options);
|
super(options);
|
||||||
const {rooms, invites, compareFn, includeRoomFn} = options;
|
const {rooms, invites, compareFn, sync} = options;
|
||||||
this._tileViewModelsMap = this._mapTileViewModels(rooms, invites);
|
const sync3List = new Sync3ObservableList(sync, rooms);
|
||||||
this._tileViewModelsSlidingWindow = new FilteredMap(this._tileViewModelsMap, (r, roomId) => {
|
const list = new ConcatList(invites.sortValues((a,b) => a.compare(b)), sync3List);
|
||||||
const include = includeRoomFn(roomId);
|
this._tileViewModelsMap = this._mapTileViewModels(list);
|
||||||
return include;
|
this._tileViewModelsFilterMap = new ApplyMap(this._tileViewModelsMap);
|
||||||
});
|
console.log(this._tileViewModelsMap);
|
||||||
this._tileViewModelsFilterMap = new ApplyMap(this._tileViewModelsSlidingWindow);
|
this._tileViewModels = this._tileViewModelsFilterMap;//.sortValues((a, b) => a.compare(b));
|
||||||
this._tileViewModels = this._tileViewModelsFilterMap.sortValues((a, b) => a.compare(b));
|
|
||||||
this._currentTileVM = null;
|
this._currentTileVM = null;
|
||||||
this._setupNavigation();
|
this._setupNavigation();
|
||||||
this._closeUrl = this.urlCreator.urlForSegment("session");
|
this._closeUrl = this.urlCreator.urlForSegment("session");
|
||||||
|
@ -42,14 +43,13 @@ export class LeftPanelViewModel extends ViewModel {
|
||||||
this._compareFn = compareFn;
|
this._compareFn = compareFn;
|
||||||
}
|
}
|
||||||
|
|
||||||
_mapTileViewModels(rooms, invites) {
|
_mapTileViewModels(list) {
|
||||||
// join is not commutative, invites will take precedence over rooms
|
return new MappedList(list, (roomOrInvite, emitChange) => {
|
||||||
return invites.join(rooms).mapValues((roomOrInvite, emitChange) => {
|
|
||||||
let vm;
|
let vm;
|
||||||
if (roomOrInvite.isInvite) {
|
if (roomOrInvite === null) {
|
||||||
|
vm = new PlaceholderRoomTileViewModel(this.childOptions({room: null, emitChange}));
|
||||||
|
} else if (roomOrInvite.isInvite) {
|
||||||
vm = new InviteTileViewModel(this.childOptions({invite: roomOrInvite, emitChange}));
|
vm = new InviteTileViewModel(this.childOptions({invite: roomOrInvite, emitChange}));
|
||||||
} else if (roomOrInvite.isPlaceholder) {
|
|
||||||
vm = new PlaceholderRoomTileViewModel(this.childOptions({room: roomOrInvite, emitChange}));
|
|
||||||
} else {
|
} else {
|
||||||
vm = new RoomTileViewModel(this.childOptions({
|
vm = new RoomTileViewModel(this.childOptions({
|
||||||
room: roomOrInvite,
|
room: roomOrInvite,
|
||||||
|
@ -57,11 +57,13 @@ export class LeftPanelViewModel extends ViewModel {
|
||||||
emitChange,
|
emitChange,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
if (roomOrInvite) {
|
||||||
const isOpen = this.navigation.path.get("room")?.value === roomOrInvite.id;
|
const isOpen = this.navigation.path.get("room")?.value === roomOrInvite.id;
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
vm.open();
|
vm.open();
|
||||||
this._updateCurrentVM(vm);
|
this._updateCurrentVM(vm);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return vm;
|
return vm;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ export class PlaceholderRoomTileViewModel extends BaseTileViewModel {
|
||||||
|
|
||||||
compare(other) {
|
compare(other) {
|
||||||
// TODO: factor this out with the compare(other) of the room tile as it does this check as well.
|
// TODO: factor this out with the compare(other) of the room tile as it does this check as well.
|
||||||
|
// TODO _room is null
|
||||||
if (other._room.index !== undefined) {
|
if (other._room.index !== undefined) {
|
||||||
return this._room.index > other._room.index ? 1 : -1;
|
return this._room.index > other._room.index ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
@ -44,7 +45,7 @@ export class PlaceholderRoomTileViewModel extends BaseTileViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
get name() {
|
get name() {
|
||||||
return "Placeholder " + this._room.index;
|
return "Placeholder";
|
||||||
}
|
}
|
||||||
|
|
||||||
get avatarLetter() {
|
get avatarLetter() {
|
||||||
|
|
|
@ -177,11 +177,6 @@ export class Sync3 {
|
||||||
return roomID;
|
return roomID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO REMOVE
|
|
||||||
includeRoom(roomId: string): boolean {
|
|
||||||
return this.roomIdToRoomIndex[roomId] !== undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO REMOVE
|
// TODO REMOVE
|
||||||
compare(roomIdA: string, roomIdB: string): number {
|
compare(roomIdA: string, roomIdB: string): number {
|
||||||
if (roomIdA === roomIdB) {
|
if (roomIdA === roomIdB) {
|
||||||
|
|
Loading…
Reference in a new issue