/* 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 * as i18n from "../i18n"; import { WithdrawDetailView, renderAmount } from "../renderHtml"; import React, { useState, useEffect } from "react"; import { acceptWithdrawal, onUpdateNotification, } from "../wxApi"; function WithdrawalDialog(props: { talerWithdrawUri: string }): JSX.Element { const [details, setDetails] = useState< any | undefined >(); const [selectedExchange, setSelectedExchange] = useState< string | undefined >(); const talerWithdrawUri = props.talerWithdrawUri; const [cancelled, setCancelled] = useState(false); const [selecting, setSelecting] = useState(false); const [customUrl, setCustomUrl] = useState(""); const [errMsg, setErrMsg] = useState(""); const [updateCounter, setUpdateCounter] = useState(1); useEffect(() => { return onUpdateNotification(() => { setUpdateCounter(updateCounter + 1); }); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { const fetchData = async (): Promise => { // FIXME: re-implement with new API // console.log("getting from", talerWithdrawUri); // let d: WithdrawalDetailsResponse | undefined = undefined; // try { // d = await getWithdrawDetails(talerWithdrawUri, selectedExchange); // } catch (e) { // console.error( // `error getting withdraw details for uri ${talerWithdrawUri}, exchange ${selectedExchange}`, // e, // ); // setErrMsg(e.message); // return; // } // console.log("got withdrawDetails", d); // if (!selectedExchange && d.bankWithdrawDetails.suggestedExchange) { // console.log("setting selected exchange"); // setSelectedExchange(d.bankWithdrawDetails.suggestedExchange); // } // setDetails(d); }; fetchData(); }, [selectedExchange, errMsg, selecting, talerWithdrawUri, updateCounter]); if (errMsg) { return (
Could not get details for withdraw operation:

{errMsg}

{ setSelecting(true); setErrMsg(undefined); setSelectedExchange(undefined); setDetails(undefined); }} > {i18n.str`Chose different exchange provider`}

); } if (!details) { return Loading...; } if (cancelled) { return Withdraw operation has been cancelled.; } if (selecting) { const bankSuggestion = details && details.bankWithdrawDetails.suggestedExchange; return (
{i18n.str`Please select an exchange. You can review the details before after your selection.`} {bankSuggestion && (

Bank Suggestion

)}

Custom Selection

setCustomUrl(e.target.value)} value={customUrl} />

); } 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; } }; return (

Digital Cash Withdrawal

You are about to withdraw{" "} {renderAmount(details.bankWithdrawDetails.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`}

{details.exchangeWithdrawDetails ? ( ) : null}
); } export function createWithdrawPage(): JSX.Element { const url = new URL(document.location.href); const talerWithdrawUri = url.searchParams.get("talerWithdrawUri"); if (!talerWithdrawUri) { throw Error("withdraw URI required"); } return ; }