/* This file is part of GNU Taler (C) 2022-2024 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 { AmountJson, TalerError } from "@gnu-taler/taler-util"; import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, VNode, h } from "preact"; import { useEffect } from "preact/hooks"; import { useWithdrawalDetails } from "../hooks/account.js"; import { useBankState } from "../hooks/bank-state.js"; import { useSessionState } from "../hooks/session.js"; import { RouteDefinition } from "@gnu-taler/web-util/browser"; import { PaytoWireTransferForm } from "./PaytoWireTransferForm.js"; import { WalletWithdrawForm } from "./WalletWithdrawForm.js"; function ShowOperationPendingTag({ woid, onOperationAlreadyCompleted, }: { woid: string; onOperationAlreadyCompleted?: () => void; }): VNode { const { i18n } = useTranslationContext(); const { state: credentials } = useSessionState(); const result = useWithdrawalDetails(woid); const loading = !result; const error = !loading && (result instanceof TalerError || result.type === "fail"); const pending = !loading && !error && (result.body.status === "pending" || result.body.status === "selected") && credentials.status === "loggedIn" && credentials.username === result.body.username; useEffect(() => { if (!loading && !pending && onOperationAlreadyCompleted) { onOperationAlreadyCompleted(); } }, [pending]); if (error || !pending) { return ; } return ( Operation ready ); } /** * Let the user choose a payment option, * then specify the details trigger the action. */ export function PaymentOptions({ routeClose, routeCashout, routeChargeWallet, routeWireTransfer, tab, limit, balance, onOperationCreated, onClose, routeOperationDetails, onAuthorizationRequired, }: { limit: AmountJson; balance: AmountJson; tab: "charge-wallet" | "wire-transfer" | undefined; onAuthorizationRequired: () => void; onOperationCreated: (wopid: string) => void; onClose: () => void; routeOperationDetails: RouteDefinition<{ wopid: string }>; routeClose: RouteDefinition; routeCashout: RouteDefinition; routeChargeWallet: RouteDefinition; routeWireTransfer: RouteDefinition<{ account?: string; subject?: string; amount?: string; }>; }): VNode { const { i18n } = useTranslationContext(); const [bankState, updateBankState] = useBankState(); return ( ); }