/* 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 { TranslationProvider, useTranslationContext, } from "@gnu-taler/web-util/browser"; import { createHashHistory } from "history"; import { ComponentChildren, Fragment, h, VNode } from "preact"; import { route, Route, Router } from "preact-router"; import { useEffect, useState } from "preact/hooks"; import PendingTransactions from "../components/PendingTransactions.js"; import { PopupBox } from "../components/styled/index.js"; import { AlertProvider } from "../context/alert.js"; import { IoCProviderForRuntime } from "../context/iocContext.js"; import { useTalerActionURL } from "../hooks/useTalerActionURL.js"; import { strings } from "../i18n/strings.js"; import { Pages, PopupNavBar, PopupNavBarOptions } from "../NavigationBar.js"; import { platform } from "../platform/foreground.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} ); }