/* 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 */ /** * Main entry point for extension pages. * * @author sebasjm */ import { createHashHistory } from "history"; import { ComponentChildren, Fragment, h, VNode } from "preact"; import Router, { route, Route } from "preact-router"; import { Match } from "preact-router/match"; import { useEffect, useState } from "preact/hooks"; import PendingTransactions from "../components/PendingTransactions.js"; import { PopupBox } from "../components/styled/index.js"; import { DevContextProvider } from "../context/devContext.js"; import { IoCProviderForRuntime } from "../context/iocContext.js"; import { TranslationProvider, useTranslationContext, } from "../context/translation.js"; import { useTalerActionURL } from "../hooks/useTalerActionURL.js"; import { PopupNavBarOptions, Pages, PopupNavBar } from "../NavigationBar.js"; import { platform } from "../platform/api.js"; import { BackupPage } from "../wallet/BackupPage.js"; import { ProviderDetailPage } from "../wallet/ProviderDetailPage.js"; import { BalancePage } from "./BalancePage.js"; import { TalerActionFound } from "./TalerActionFound.js"; export function Application(): VNode { return ( ); } function ApplicationView(): VNode { const hash_history = createHashHistory(); const [action, setDismissed] = useTalerActionURL(); const actionUri = action?.uri; useEffect(() => { if (actionUri) { route(Pages.cta({ action: encodeURIComponent(actionUri) })); } }, [actionUri]); async function redirectToTxInfo(tid: string): Promise { redirectTo(Pages.balanceTransaction({ tid })); } return ( ( redirectTo(Pages.receiveCash({}))} goToWalletDeposit={(currency: string) => redirectTo(Pages.sendCash({ amount: `${currency}:0` })) } goToWalletHistory={(currency: string) => redirectTo(Pages.balanceHistory({ currency })) } /> )} /> { setDismissed(true); return redirectTo(Pages.balance); }} /> ); }} /> ( redirectTo(Pages.backupProviderAdd)} /> )} /> ( redirectTo(`${Pages.ctaPay}?talerPayUri=${uri}`) } onWithdraw={(amount: string) => redirectTo(Pages.receiveCash({ amount })) } pid={pid} onBack={() => redirectTo(Pages.backup)} /> )} /> ); } function RedirectToWalletPage(): VNode { const page = (document.location.hash || "#/").replace("#", ""); const [showText, setShowText] = useState(false); useEffect(() => { platform.openWalletPageFromPopup(page); setTimeout(() => { setShowText(true); }, 250); }); const { i18n } = useTranslationContext(); if (!showText) return ; return ( this popup is being closed and you are being redirected to {page} ); } async function redirectTo(location: string): Promise { route(location); } function Redirect({ to }: { to: string }): null { useEffect(() => { route(to, true); }); return null; } function PopupTemplate({ path, children, goToTransaction, }: { path?: PopupNavBarOptions; children: ComponentChildren; goToTransaction?: (id: string) => Promise; }): VNode { return ( {/* */} {goToTransaction ? ( ) : undefined} {children} ); }