diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-08-25 18:08:37 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-08-25 18:08:37 +0200 |
commit | 21c176a69ee04c4d59baedb79017f6c42ece22d6 (patch) | |
tree | 80ab7dd089f796f678d7fb5e4df892571c4eee28 /src/webex/pages/error.tsx | |
parent | bf70e752b67b24592a2ef0b4a6303c256f69ff86 (diff) | |
download | wallet-core-21c176a69ee04c4d59baedb79017f6c42ece22d6.tar.xz |
add rudimentary error reporting in a new tab
Diffstat (limited to 'src/webex/pages/error.tsx')
-rw-r--r-- | src/webex/pages/error.tsx | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/src/webex/pages/error.tsx b/src/webex/pages/error.tsx index e86b6cf4c..3f3940d72 100644 --- a/src/webex/pages/error.tsx +++ b/src/webex/pages/error.tsx @@ -22,40 +22,69 @@ * @author Florian Dold */ + import * as React from "react"; import * as ReactDOM from "react-dom"; import URI = require("urijs"); +import * as wxApi from "../wxApi"; + interface ErrorProps { - message: string; + report: any; } class ErrorView extends React.Component<ErrorProps, { }> { render(): JSX.Element { - return ( - <div> - An error occurred: {this.props.message} - </div> - ); + const report = this.props.report; + if (!report) { + return ( + <div> + <h1>Error Report Not Found</h1> + <p>This page is supposed to display an error reported by the GNU Taler wallet, + but the corresponding error report can't be found.</p> + <p>Maybe the error occured before the browser was restarted or the wallet was reloaded.</p> + </div> + ); + } + switch (report.name) { + default: + return ( + <div> + <h1>Unknown Error</h1> + The GNU Taler wallet reported an unknown error. Here are the details: + <pre> + {JSON.stringify(report, null, " ")} + </pre> + </div> + ); + } } } async function main() { - try { - const url = new URI(document.location.href); - const query: any = URI.parseQuery(url.query()); + const url = new URI(document.location.href); + const query: any = URI.parseQuery(url.query()); - const message: string = query.message || "unknown error"; + const container = document.getElementById("container"); + if (!container) { + console.error("fatal: can't mount component, countainer missing"); + return; + } - ReactDOM.render(<ErrorView message={message} />, document.getElementById( - "container")!); + // report that we'll render, either looked up from the + // logging module or synthesized here for fixed/fatal errors + let report; - } catch (e) { - // TODO: provide more context information, maybe factor it out into a - // TODO:generic error reporting function or component. - document.body.innerText = `Fatal error: "${e.message}".`; - console.error(`got error "${e.message}"`, e); + const reportUid: string = query.reportUid; + if (!reportUid) { + report = { + name: "missing-error", + }; + } else { + report = await wxApi.getReport(reportUid); } + + ReactDOM.render(<ErrorView report={report} />, container); } document.addEventListener("DOMContentLoaded", () => main()); |