/* This file is part of TALER (C) 2015-2016 GNUnet e.V. 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. 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 TALER; see the file COPYING. If not, see */ /** * Page shown to the user to confirm creation * of a reserve, usually requested by the bank. * * @author Florian Dold */ import { i18n } from '@gnu-taler/taler-util' import { renderAmount } from "../renderHtml"; import { useState, useEffect } from "preact/hooks"; import { acceptWithdrawal, onUpdateNotification, getWithdrawalDetailsForUri, } from "../wxApi"; import { h } from 'preact'; import { WithdrawUriInfoResponse } from "@gnu-taler/taler-util"; import { JSX } from "preact/jsx-runtime"; import { WalletAction } from '../components/styled'; interface Props { talerWithdrawUri?: string; } export interface ViewProps { details: WithdrawUriInfoResponse; selectedExchange?: string; accept: () => Promise; setCancelled: (b: boolean) => void; setSelecting: (b: boolean) => void; }; export function View({ details, selectedExchange, accept, setCancelled, setSelecting }: ViewProps) { return (

Taler Wallet

Digital Cash Withdrawal

You are about to withdraw{" "} {renderAmount(details.amount)} from your bank account into your wallet.

{selectedExchange ? (

The exchange {selectedExchange} will be used as the Taler payment service provider.

) : null}

setSelecting(true)} > {i18n.str`Chose different exchange provider`}
setCancelled(true)} > {i18n.str`Cancel withdraw operation`}

) } export function WithdrawPage({ talerWithdrawUri, ...rest }: Props): JSX.Element { const [details, setDetails] = useState(undefined); const [selectedExchange, setSelectedExchange] = useState(undefined); const [cancelled, setCancelled] = useState(false); const [selecting, setSelecting] = useState(false); const [error, setError] = useState(false); const [updateCounter, setUpdateCounter] = useState(1); const [state, setState] = useState(1) useEffect(() => { return onUpdateNotification(() => { console.log('updating...') setUpdateCounter(updateCounter + 1); }); }, []); useEffect(() => { console.log('on effect yes', talerWithdrawUri) if (!talerWithdrawUri) return const fetchData = async (): Promise => { try { const res = await getWithdrawalDetailsForUri({ talerWithdrawUri }); setDetails(res); if (res.defaultExchangeBaseUrl) { setSelectedExchange(res.defaultExchangeBaseUrl); } } catch (e) { console.error('error', JSON.stringify(e, undefined, 2)) setError(true) } }; fetchData(); }, [selectedExchange, selecting, talerWithdrawUri, updateCounter, state]); if (!talerWithdrawUri) { return missing withdraw uri; } const accept = async (): Promise => { if (!selectedExchange) { throw Error("can't accept, no exchange selected"); } console.log("accepting exchange", selectedExchange); const res = await acceptWithdrawal(talerWithdrawUri, selectedExchange); console.log("accept withdrawal response", res); if (res.confirmTransferUrl) { document.location.href = res.confirmTransferUrl; } }; if (!details) { return Loading...; } if (cancelled) { return Withdraw operation has been cancelled.; } if (error) { return This URI is not valid anymore.; } return }