/* 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 */ import { HttpResponsePaginated, useTranslationContext, } from "@gnu-taler/web-util/lib/index.browser"; import { createHashHistory } from "history"; import { h, VNode, } from "preact"; import { Router, route, Route } from "preact-router"; import { useEffect } from "preact/hooks"; import { Loading } from "../components/Loading.js"; import { PageStateType, usePageContext } from "../context/pageState.js"; import { HomePage } from "./HomePage.js"; import { BankFrame } from "./BankFrame.js"; import { PublicHistoriesPage } from "./PublicHistoriesPage.js"; import { RegistrationPage } from "./RegistrationPage.js"; import { BusinessAccount } from "./BusinessAccount.js"; function handleNotOkResult( safe: string, saveError: (state: PageStateType["error"]) => void, i18n: ReturnType["i18n"], ): (result: HttpResponsePaginated) => VNode { return function handleNotOkResult2( result: HttpResponsePaginated, ): VNode { if (result.clientError && result.isUnauthorized) { route(safe); return ; } if (result.clientError && result.isNotfound) { route(safe); return (
Page not found, you are going to be redirected to {safe}
); } if (result.loading) return ; if (!result.ok) { saveError({ title: i18n.str`The backend reported a problem: HTTP status #${result.status}`, description: i18n.str`Diagnostic from ${result.info?.url} is "${result.message}"`, debug: JSON.stringify(result.error), }); route(safe); } return
; }; } export function Routing(): VNode { const history = createHashHistory(); const { pageStateSetter } = usePageContext(); function saveError(error: PageStateType["error"]): void { pageStateSetter((prev) => ({ ...prev, error })); } const { i18n } = useTranslationContext(); return ( ( )} /> ( { route("/account"); }} /> )} /> ( { route("/business"); }} > { route("/register"); }} /> )} /> ( { route("/account"); }} onRegister={() => { route("/register"); }} onLoadNotOk={handleNotOkResult("/account", saveError, i18n)} /> )} /> ); } function Redirect({ to }: { to: string }): VNode { useEffect(() => { route(to, true); }, []); return
being redirected to {to}
; }