import { Amounts, HttpStatusCode, TalerError } from "@gnu-taler/taler-util"; import { Loading, notifyInfo, useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; import { ErrorLoadingWithDebug } from "../components/ErrorLoadingWithDebug.js"; import { useAccountDetails } from "../hooks/access.js"; import { useBackendState } from "../hooks/backend.js"; import { LoginForm } from "./LoginForm.js"; import { PaytoWireTransferForm } from "./PaytoWireTransferForm.js"; import { assertUnreachable } from "./WithdrawalOperationPage.js"; export function WireTransfer({ toAccount, onAuthorizationRequired, onCancel, onSuccess }: { onSuccess?: () => void; toAccount?: string, onCancel?: () => void, onAuthorizationRequired: () => void, }): VNode { const { i18n } = useTranslationContext(); const r = useBackendState(); const account = r.state.status !== "loggedOut" ? r.state.username : "admin"; const result = useAccountDetails(account); if (!result) { return } if (result instanceof TalerError) { return } if (result.type === "fail") { switch (result.case) { case HttpStatusCode.Unauthorized: return case HttpStatusCode.NotFound: return default: assertUnreachable(result) } } const { body: data } = result; const balance = Amounts.parseOrThrow(data.balance.amount); const balanceIsDebit = data.balance.credit_debit_indicator == "debit"; const debitThreshold = Amounts.parseOrThrow(data.debit_threshold); const limit = balanceIsDebit ? Amounts.sub(debitThreshold, balance).amount : Amounts.add(balance, debitThreshold).amount; if (!balance) return ; return ( { notifyInfo(i18n.str`Wire transfer created!`); if (onSuccess) onSuccess() }} onCancel={onCancel} /> ); }