Try open matrix: links before showing clients

This commit is contained in:
Danila Fedorin 2021-08-23 14:38:07 -07:00
parent c25a9dae4d
commit bfcac9fafb
3 changed files with 46 additions and 13 deletions

View file

@ -40,6 +40,16 @@ function asPrefix(identifierKind) {
}
}
function asPath(identifierKind) {
switch (identifierKind) {
case IdentifierKind.RoomId: return "roomid";
case IdentifierKind.RoomAlias: return "r";
case IdentifierKind.GroupId: return null;
case IdentifierKind.UserId: return "u";
default: throw new Error("invalid id kind " + identifierKind);
}
}
function getWebInstanceMap(queryParams) {
const prefix = "web-instance[";
const postfix = "]";
@ -183,4 +193,15 @@ export class Link {
return `/${this.identifier}`;
}
}
toMatrixUrl() {
const prefix = asPath(this.identifierKind);
if (!prefix) {
// Some matrix.to links aren't valid matrix: links (i.e. groups)
return null;
}
const identifier = this.identifier.substring(1);
const suffix = this.eventId ? `/e/${this.eventId.substring(1)}` : "";
return `matrix:${prefix}/${identifier}${suffix}`;
}
}

View file

@ -21,7 +21,8 @@ import {LoadServerPolicyView} from "./policy/LoadServerPolicyView.js";
export class RootView extends TemplateView {
render(t, vm) {
return t.div({className: "RootView"}, [
return t.if(vm => !vm.hidden,
vm => t.div({className: "RootView"}, [
t.mapView(vm => vm.openLinkViewModel, vm => vm ? new OpenLinkView(vm) : null),
t.mapView(vm => vm.createLinkViewModel, vm => vm ? new CreateLinkView(vm) : null),
t.mapView(vm => vm.loadServerPolicyViewModel, vm => vm ? new LoadServerPolicyView(vm) : null),
@ -35,7 +36,8 @@ export class RootView extends TemplateView {
t.button({className: "text", onClick: () => vm.clearPreferences()}, "Clear preferences")),
])
])
]);
])
);
}
}

View file

@ -25,6 +25,7 @@ import {Platform} from "./Platform.js";
export class RootViewModel extends ViewModel {
constructor(options) {
super(options);
this.hidden = false;
this.link = null;
this.openLinkViewModel = null;
this.createLinkViewModel = null;
@ -58,6 +59,15 @@ export class RootViewModel extends ViewModel {
} else {
const oldLink = this.link;
this.link = Link.parse(hash);
const matrixUrl = this.link.toMatrixUrl()
if (matrixUrl) {
this.hidden = true;
setTimeout(() => {
this.hidden = false;
this.emitChange();
}, 1000);
this.openLink(this.link.toMatrixUrl());
}
this._updateChildVMs(oldLink);
}
}