mirror of
https://github.com/vector-im/hydrogen-web.git
synced 2024-12-23 03:25:12 +01:00
fix an applying an url also pushing a copy of the url back on history
it should replace instead, as it is a redirect
This commit is contained in:
parent
fb273782bf
commit
8357260133
@ -22,22 +22,13 @@ export class URLRouter {
|
|||||||
this._stringifyPath = stringifyPath;
|
this._stringifyPath = stringifyPath;
|
||||||
this._subscription = null;
|
this._subscription = null;
|
||||||
this._pathSubscription = null;
|
this._pathSubscription = null;
|
||||||
|
this._isApplyingUrl = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
attach() {
|
attach() {
|
||||||
this._subscription = this._history.subscribe(url => {
|
this._subscription = this._history.subscribe(url => this._applyUrl(url));
|
||||||
const redirectedUrl = this._applyUrl(url);
|
|
||||||
if (redirectedUrl !== url) {
|
|
||||||
this._history.replaceUrlSilently(redirectedUrl);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._applyUrl(this._history.get());
|
this._applyUrl(this._history.get());
|
||||||
this._pathSubscription = this._navigation.pathObservable.subscribe(path => {
|
this._pathSubscription = this._navigation.pathObservable.subscribe(path => this._applyNavigationPath(path));
|
||||||
const url = this.urlForPath(path);
|
|
||||||
if (url !== this._history.get()) {
|
|
||||||
this._history.pushUrlSilently(url);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dispose() {
|
dispose() {
|
||||||
@ -45,11 +36,27 @@ export class URLRouter {
|
|||||||
this._pathSubscription = this._pathSubscription();
|
this._pathSubscription = this._pathSubscription();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_applyNavigationPath(path) {
|
||||||
|
const url = this.urlForPath(path);
|
||||||
|
if (url !== this._history.get()) {
|
||||||
|
if (this._isApplyingUrl) {
|
||||||
|
// redirect
|
||||||
|
this._history.replaceUrlSilently(url);
|
||||||
|
} else {
|
||||||
|
this._history.pushUrlSilently(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_applyUrl(url) {
|
_applyUrl(url) {
|
||||||
const urlPath = this._history.urlAsPath(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 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)
|
||||||
|
this._isApplyingUrl = true;
|
||||||
this._navigation.applyPath(navPath);
|
this._navigation.applyPath(navPath);
|
||||||
return this._history.pathAsUrl(this._stringifyPath(navPath));
|
this._isApplyingUrl = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pushUrl(url) {
|
pushUrl(url) {
|
||||||
|
Loading…
Reference in New Issue
Block a user