Keep memberlist panel open on room/grid change

Signed-off-by: RMidhunSuresh <rmidhunsuresh@gmail.com>
This commit is contained in:
RMidhunSuresh 2021-07-13 13:05:54 +05:30
parent d3a8e95962
commit ea0851eb94
3 changed files with 21 additions and 13 deletions

View file

@ -92,6 +92,16 @@ function pushRightPanelSegment(array, segment) {
array.push(new Segment(segment)); array.push(new Segment(segment));
} }
export function addPanelIfNeeded(navigation, panel, path) {
const segment = navigation.path.get(panel);
let _path = path;
if (segment?.value) {
_path = _path.with(navigation.segment("right-panel"));
_path = _path.with(segment)
}
return _path;
}
export function parseUrlPath(urlPath, currentNavPath, defaultSessionId) { export function parseUrlPath(urlPath, currentNavPath, defaultSessionId) {
// substr(1) to take of initial / // substr(1) to take of initial /
const parts = urlPath.substr(1).split("/"); const parts = urlPath.substr(1).split("/");
@ -122,6 +132,8 @@ export function parseUrlPath(urlPath, currentNavPath, defaultSessionId) {
segments.push(new Segment("room", roomId)); segments.push(new Segment("room", roomId));
if (currentNavPath.get("details")?.value) { if (currentNavPath.get("details")?.value) {
pushRightPanelSegment(segments, "details"); pushRightPanelSegment(segments, "details");
} else if (currentNavPath.get("members")?.value) {
pushRightPanelSegment(segments, "members");
} }
} else if (type === "last-session") { } else if (type === "last-session") {
let sessionSegment = currentNavPath.get("session"); let sessionSegment = currentNavPath.get("session");

View file

@ -15,6 +15,7 @@ limitations under the License.
*/ */
import {ViewModel} from "../ViewModel.js"; import {ViewModel} from "../ViewModel.js";
import {addPanelIfNeeded} from "../navigation/index.js";
function dedupeSparse(roomIds) { function dedupeSparse(roomIds) {
return roomIds.map((id, idx) => { return roomIds.map((id, idx) => {
@ -79,13 +80,10 @@ export class RoomGridViewModel extends ViewModel {
} }
_switchToRoom(roomId) { _switchToRoom(roomId) {
const detailsShown = !!this.navigation.path.get("details")?.value;
let path = this.navigation.path.until("rooms"); let path = this.navigation.path.until("rooms");
path = path.with(this.navigation.segment("room", roomId)); path = path.with(this.navigation.segment("room", roomId));
if (detailsShown) { path = addPanelIfNeeded(this.navigation, "details", path);
path = path.with(this.navigation.segment("right-panel", true)); path = addPanelIfNeeded(this.navigation, "members", path);
path = path.with(this.navigation.segment("details", true));
}
this.navigation.applyPath(path); this.navigation.applyPath(path);
} }

View file

@ -20,6 +20,7 @@ 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 {ApplyMap} from "../../../observable/map/ApplyMap.js"; import {ApplyMap} from "../../../observable/map/ApplyMap.js";
import {addPanelIfNeeded} from "../../navigation/index.js";
export class LeftPanelViewModel extends ViewModel { export class LeftPanelViewModel extends ViewModel {
constructor(options) { constructor(options) {
@ -92,13 +93,10 @@ export class LeftPanelViewModel extends ViewModel {
} }
} }
_pathForDetails(path) { _pathForRightPanel(path) {
let _path = path; let _path = path;
const details = this.navigation.path.get("details"); _path = addPanelIfNeeded(this.navigation, "details", _path);
if (details?.value) { _path = addPanelIfNeeded(this.navigation, "members", _path);
_path = _path.with(this.navigation.segment("right-panel"));
_path = _path.with(details)
}
return _path; return _path;
} }
@ -108,13 +106,13 @@ export class LeftPanelViewModel extends ViewModel {
if (this.gridEnabled) { if (this.gridEnabled) {
if (room) { if (room) {
path = path.with(room); path = path.with(room);
path = this._pathForDetails(path); path = this._pathForRightPanel(path);
} }
} else { } else {
if (room) { if (room) {
path = path.with(this.navigation.segment("rooms", [room.value])); path = path.with(this.navigation.segment("rooms", [room.value]));
path = path.with(room); path = path.with(room);
path = this._pathForDetails(path); path = this._pathForRightPanel(path);
} else { } else {
path = path.with(this.navigation.segment("rooms", [])); path = path.with(this.navigation.segment("rooms", []));
path = path.with(this.navigation.segment("empty-grid-tile", 0)); path = path.with(this.navigation.segment("empty-grid-tile", 0));