/* 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 { Amounts, Logger, PaytoUriIBAN, TranslatedString, parsePaytoUri, stringifyPaytoUri } from "@gnu-taler/taler-util"; import { notifyError, notifyException, useNotifications, useTranslationContext } from "@gnu-taler/web-util/browser"; import { ComponentChildren, Fragment, h, VNode } from "preact"; import { StateUpdater, useEffect, useErrorBoundary, useState } from "preact/hooks"; import { LangSelectorLikePy as LangSelector } from "../components/LangSelector.js"; import { useBackendContext } from "../context/backend.js"; import { useBusinessAccountDetails } from "../hooks/circuit.js"; import { bankUiSettings } from "../settings.js"; import { useSettings } from "../hooks/settings.js"; import { CopyButton, CopyIcon } from "../components/CopyButton.js"; import logo from "../assets/logo-2021.svg"; import { useAccountDetails } from "../hooks/access.js"; const GIT_HASH = typeof __GIT_HASH__ !== "undefined" ? __GIT_HASH__ : undefined; const VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : undefined; const versionText = VERSION ? GIT_HASH ? `Version ${VERSION} (${GIT_HASH.substring(0, 8)})` : VERSION : ""; const logger = new Logger("BankFrame"); export function BankFrame({ children, account, }: { account?: string, children: ComponentChildren; }): VNode { const { i18n } = useTranslationContext(); const backend = useBackendContext(); const [settings, updateSettings] = useSettings(); const [open, setOpen] = useState(false) const [error, resetError] = useErrorBoundary(); useEffect(() => { if (error) { const desc = (error instanceof Error ? error.stack : String(error)) as TranslatedString if (error instanceof Error) { notifyException(i18n.str`Internal error, please report.`, error) } else { notifyError(i18n.str`Internal error, please report.`, String(error) as TranslatedString) } resetError() } }, [error]) const demo_sites = []; for (const i in bankUiSettings.demoSites) demo_sites.push( {bankUiSettings.demoSites[i][0]} , ); return (
{account &&

}
{children}
// //
// //
// {maybeDemoContent( //

// {IS_PUBLIC_ACCOUNT_ENABLED ? ( // // This part of the demo shows how a bank that supports Taler // directly would work. In addition to using your own bank // account, you can also see the transaction history of some{" "} // Public Accounts. // // ) : ( // // This part of the demo shows how a bank that supports Taler // directly would work. // // )} //

, // )} //
//
// //
// // {children} //
//
); } function StatusBanner(): VNode { const notifs = useNotifications() return
{ notifs.map(n => { switch (n.message.type) { case "error": return

{n.message.title}

{n.message.description &&
{n.message.description}
} {n.message.debug &&
{n.message.debug}
}
case "info": return

{n.message.title}

} })}
} function TestingTag(): VNode { const testingUrl = localStorage.getItem("bank-base-url"); if (!testingUrl) return ; return (

Testing with {testingUrl}{" "} { e.preventDefault(); localStorage.removeItem("bank-base-url"); window.location.reload(); }} > stop testing

); } function Footer() { return (

You can learn more about GNU Taler on our{" "} main website.

Copyright © 2014—2022 Taler Systems SA. {versionText}{" "}

); } function WelcomeAccount({ account }: { account: string }): VNode { const { i18n } = useTranslationContext(); const result = useAccountDetails(account); if (!result.ok) return
const payto = parsePaytoUri(result.data.payto_uri) if (!payto) return
const accountNumber = !payto.isKnown ? undefined : payto.targetType === "iban" ? payto.iban : payto.targetType === "x-taler-bank" ? payto.account : undefined; return Welcome, {account} {accountNumber !== undefined ? ({accountNumber} result.data.payto_uri} />) : }! } function AccountBalance({ account }: { account: string }): VNode { const result = useAccountDetails(account); if (!result.ok) return
return
{Amounts.currencyOf(result.data.balance.amount)}  {result.data.balance.credit_debit_indicator === "debit" ? "-" : ""} {Amounts.stringifyValue(result.data.balance.amount)}
}