forked from mystiq/hydrogen-web
show error when mount() fails in SwitchView
This commit is contained in:
parent
449262e3c1
commit
e0799181d9
2 changed files with 20 additions and 1 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
import {errorToDOM} from "./error.js";
|
||||||
|
|
||||||
export class SwitchView {
|
export class SwitchView {
|
||||||
constructor(defaultView) {
|
constructor(defaultView) {
|
||||||
this._childView = defaultView;
|
this._childView = defaultView;
|
||||||
|
@ -23,7 +25,12 @@ export class SwitchView {
|
||||||
const oldRoot = this.root();
|
const oldRoot = this.root();
|
||||||
this._childView.unmount();
|
this._childView.unmount();
|
||||||
this._childView = newView;
|
this._childView = newView;
|
||||||
const newRoot = this._childView.mount();
|
let newRoot;
|
||||||
|
try {
|
||||||
|
newRoot = this._childView.mount();
|
||||||
|
} catch (err) {
|
||||||
|
newRoot = errorToDOM(err);
|
||||||
|
}
|
||||||
const parent = oldRoot.parentElement;
|
const parent = oldRoot.parentElement;
|
||||||
if (parent) {
|
if (parent) {
|
||||||
parent.replaceChild(newRoot, oldRoot);
|
parent.replaceChild(newRoot, oldRoot);
|
||||||
|
|
12
src/ui/web/general/error.js
Normal file
12
src/ui/web/general/error.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import {tag} from "./html.js";
|
||||||
|
|
||||||
|
export function errorToDOM(error) {
|
||||||
|
const stack = new Error().stack;
|
||||||
|
const callee = stack.split("\n")[1];
|
||||||
|
return tag.div([
|
||||||
|
tag.h2("Something went wrong…"),
|
||||||
|
tag.h3(error.message),
|
||||||
|
tag.p(`This occurred while running ${callee}.`),
|
||||||
|
tag.pre(error.stack),
|
||||||
|
]);
|
||||||
|
}
|
Loading…
Reference in a new issue