Add a 'invalid URL' view

This commit is contained in:
Danila Fedorin 2021-08-30 12:05:42 -07:00
parent 628e99ba2d
commit e4aeadecd7
3 changed files with 36 additions and 0 deletions

29
src/InvalidUrlView.js Normal file
View file

@ -0,0 +1,29 @@
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import {TemplateView} from "./utils/TemplateView.js";
export class InvalidUrlView extends TemplateView {
render(t) {
return t.div({ className: "DisclaimerView card" }, [
t.h1("Invalid URL"),
t.p([
'The link you have entered is not valid. If you like, you can ',
t.a({ href: "#/" }, 'return to the home page.')
]),
]);
}
}

View file

@ -19,10 +19,12 @@ import {OpenLinkView} from "./open/OpenLinkView.js";
import {CreateLinkView} from "./create/CreateLinkView.js";
import {LoadServerPolicyView} from "./policy/LoadServerPolicyView.js";
import {DisclaimerView} from "./disclaimer/DisclaimerView.js";
import {InvalidUrlView} from "./InvalidUrlView.js";
export class RootView extends TemplateView {
render(t, vm) {
return t.div({className: "RootView"}, [
t.mapView(vm => vm.invalidUrl, invalid => invalid ? new InvalidUrlView() : null),
t.mapView(vm => vm.showDisclaimer, disclaimer => disclaimer ? new DisclaimerView() : null),
t.mapView(vm => vm.openLinkViewModel, vm => vm ? new OpenLinkView(vm) : null),
t.mapView(vm => vm.createLinkViewModel, vm => vm ? new CreateLinkView(vm) : null),

View file

@ -30,6 +30,7 @@ export class RootViewModel extends ViewModel {
this.createLinkViewModel = null;
this.loadServerPolicyViewModel = null;
this.showDisclaimer = false;
this.invalidUrl = false;
this.preferences.on("canClear", () => {
this.emitChange();
});
@ -58,6 +59,7 @@ export class RootViewModel extends ViewModel {
// clear them to avoid having to manually reset (n-1)/n view models in every case.
// That just doesn't scale well when we add new views.
const oldLink = this.link;
this.invalidUrl = false;
this.showDisclaimer = false;
this.loadServerPolicyViewModel = null;
this.createLinkViewModel = null;
@ -75,6 +77,9 @@ export class RootViewModel extends ViewModel {
this.createLinkViewModel = new CreateLinkViewModel(this.childOptions());
} else if (newLink = Link.parse(hash)) {
this._updateChildVMs(newLink, oldLink);
} else {
this._updateChildVMs(null, oldLink);
this.invalidUrl = true;
}
this.emitChange();
}