/* 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, TalerError, TranslatedString, parsePaytoUri } from "@gnu-taler/taler-util"; import { notifyError, notifyException, useNotifications, useTranslationContext } from "@gnu-taler/web-util/browser"; import { ComponentChildren, Fragment, VNode, h } from "preact"; import { useEffect, useErrorBoundary, useState } from "preact/hooks"; import logo from "../assets/logo-2021.svg"; import { Attention } from "../components/Attention.js"; import { CopyButton } from "../components/CopyButton.js"; import { LangSelector } from "../components/LangSelector.js"; import { useBackendContext } from "../context/backend.js"; import { useAccountDetails } from "../hooks/access.js"; import { useSettings } from "../hooks/settings.js"; import { bankUiSettings } from "../settings.js"; import { RenderAmount } from "./PaytoWireTransferForm.js"; import { Loading } from "../components/Loading.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 : ""; 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 = []; if (bankUiSettings.demoSites) { for (const i in bankUiSettings.demoSites) demo_sites.push( {bankUiSettings.demoSites[i][0]} , ); } return (
{account &&

}
{children}
); } function MaybeShowDebugInfo({ info }: { info: any }): VNode { const [settings] = useSettings() if (settings.showDebugInfo) { return
      {info}
    
} return } function StatusBanner(): VNode { const notifs = useNotifications() if (notifs.length === 0) return return
{ notifs.map(n => { switch (n.message.type) { case "error": return { n.remove() }}> {n.message.description &&
{n.message.description}
}
case "info": return { n.remove(); }} /> } })}
} 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() { const { i18n } = useTranslationContext() return (

Learn more about GNU Taler

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

); } function WelcomeAccount({ account }: { account: string }): VNode { const { i18n } = useTranslationContext(); const result = useAccountDetails(account); if (!result) { return } if (result instanceof TalerError) { return
} if (result.type === "fail") return
const payto = parsePaytoUri(result.body.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.body.payto_uri} />) : }! } function AccountBalance({ account }: { account: string }): VNode { const result = useAccountDetails(account); if (!result) { return } if (result instanceof TalerError) { return
} if (result.type === "fail") return
return }