forked from mystiq/hydrogen-web
translate last-session to a real session id
This commit is contained in:
parent
63620ce59a
commit
1bec1033d1
2 changed files with 18 additions and 2 deletions
|
@ -23,6 +23,14 @@ export class URLRouter {
|
|||
this._subscription = null;
|
||||
this._pathSubscription = null;
|
||||
this._isApplyingUrl = false;
|
||||
this._defaultSessionId = this._getLastSessionId();
|
||||
|
||||
}
|
||||
|
||||
_getLastSessionId() {
|
||||
const urlPath = this._history.urlAsPath(this._history.getLastUrl());
|
||||
const navPath = this._navigation.pathFrom(this._parseUrlPath(urlPath, this._navigation.path));
|
||||
return navPath.get("session")?.value;
|
||||
}
|
||||
|
||||
attach() {
|
||||
|
@ -50,7 +58,7 @@ export class URLRouter {
|
|||
|
||||
_applyUrl(url) {
|
||||
const urlPath = this._history.urlAsPath(url)
|
||||
const navPath = this._navigation.pathFrom(this._parseUrlPath(urlPath, this._navigation.path));
|
||||
const navPath = this._navigation.pathFrom(this._parseUrlPath(urlPath, this._navigation.path, this._defaultSessionId));
|
||||
// this will cause _applyNavigationPath to be called,
|
||||
// so set a flag whether this request came from ourselves
|
||||
// (in which case it is a redirect if the url does not match the current one)
|
||||
|
|
|
@ -85,7 +85,7 @@ function roomsSegmentWithRoom(rooms, roomId, path) {
|
|||
}
|
||||
}
|
||||
|
||||
export function parseUrlPath(urlPath, currentNavPath) {
|
||||
export function parseUrlPath(urlPath, currentNavPath, defaultSessionId) {
|
||||
// substr(1) to take of initial /
|
||||
const parts = urlPath.substr(1).split("/");
|
||||
const iterator = parts[Symbol.iterator]();
|
||||
|
@ -113,6 +113,14 @@ export function parseUrlPath(urlPath, currentNavPath) {
|
|||
segments.push(roomsSegmentWithRoom(rooms, roomId, currentNavPath));
|
||||
}
|
||||
segments.push(new Segment("room", roomId));
|
||||
} else if (type === "last-session") {
|
||||
let sessionSegment = currentNavPath.get("session");
|
||||
if (!sessionSegment?.value && defaultSessionId) {
|
||||
sessionSegment = new Segment("session", defaultSessionId);
|
||||
}
|
||||
if (sessionSegment) {
|
||||
segments.push(sessionSegment);
|
||||
}
|
||||
} else {
|
||||
// might be undefined, which will be turned into true by Segment
|
||||
const value = iterator.next().value;
|
||||
|
|
Loading…
Reference in a new issue