aboutsummaryrefslogtreecommitdiff
path: root/packages/demobank-ui/src/components/Routing.tsx
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-09-19 00:39:00 -0300
committerSebastian <sebasjm@gmail.com>2023-09-19 00:39:00 -0300
commit0388d31d364139d0a3999126b06d8ac850117ab9 (patch)
tree8fcb0c248c689b70b1e583d0f35d267f8ca5b02f /packages/demobank-ui/src/components/Routing.tsx
parent40d2aa0c11e61ea45005c4c212c6ab686162b4b0 (diff)
downloadwallet-core-0388d31d364139d0a3999126b06d8ac850117ab9.tar.xz
account page
Diffstat (limited to 'packages/demobank-ui/src/components/Routing.tsx')
-rw-r--r--packages/demobank-ui/src/components/Routing.tsx109
1 files changed, 109 insertions, 0 deletions
diff --git a/packages/demobank-ui/src/components/Routing.tsx b/packages/demobank-ui/src/components/Routing.tsx
new file mode 100644
index 000000000..d5ea44e10
--- /dev/null
+++ b/packages/demobank-ui/src/components/Routing.tsx
@@ -0,0 +1,109 @@
+/*
+ This file is part of GNU Taler
+ (C) 2022 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { createHashHistory } from "history";
+import { VNode, h } from "preact";
+import { Route, Router, route } from "preact-router";
+import { useEffect } from "preact/hooks";
+import { BankFrame } from "../pages/BankFrame.js";
+import { BusinessAccount } from "../pages/BusinessAccount.js";
+import { HomePage, WithdrawalOperationPage } from "../pages/HomePage.js";
+import { PublicHistoriesPage } from "../pages/PublicHistoriesPage.js";
+import { RegistrationPage } from "../pages/RegistrationPage.js";
+
+export function Routing(): VNode {
+ const history = createHashHistory();
+
+ return (
+ <BankFrame
+ goToBusinessAccount={() => {
+ route("/business");
+ }}
+ >
+ <Router history={history}>
+ <Route
+ path="/operation/:wopid"
+ component={({ wopid }: { wopid: string }) => (
+ <WithdrawalOperationPage
+ operationId={wopid}
+ onContinue={() => {
+ route("/account");
+ }}
+ onLoadNotOk={() => {
+ route("/account");
+ }}
+ />
+ )}
+ />
+ <Route
+ path="/public-accounts"
+ component={() => <PublicHistoriesPage />}
+ />
+ <Route
+ path="/register"
+ component={() => (
+ <RegistrationPage
+ onComplete={() => {
+ route("/account");
+ }}
+ />
+ )}
+ />
+ <Route
+ path="/account"
+ component={() => (
+ <HomePage
+ onPendingOperationFound={(wopid) => {
+ route(`/operation/${wopid}`);
+ }}
+ onRegister={() => {
+ route("/register");
+ }}
+ />
+ )}
+ />
+ <Route
+ path="/business"
+ component={() => (
+ <BusinessAccount
+ onClose={() => {
+ route("/account");
+ }}
+ onRegister={() => {
+ route("/register");
+ }}
+ onLoadNotOk={() => {
+ route("/account");
+ }}
+ />
+ )}
+ />
+ <Route default component={Redirect} to="/account" />
+ </Router>
+ </BankFrame>
+ );
+}
+
+function Redirect({ to }: { to: string }): VNode {
+ useEffect(() => {
+ route(to, true);
+ }, []);
+ return <div>being redirected to {to}</div>;
+}
+
+export function assertUnreachable(x: never): never {
+ throw new Error("Didn't expect to get here");
+}