/* 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 { WithdrawDetails, } from "../../walletTypes"; import { WithdrawDetailView, renderAmount } from "../renderHtml"; import React, { useState, useEffect } from "react"; import * as ReactDOM from "react-dom"; import { getWithdrawDetails, acceptWithdrawal } from "../wxApi"; function NewExchangeSelection(props: { talerWithdrawUri: string }) { const [details, setDetails] = useState(); 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(""); useEffect(() => { const fetchData = async () => { console.log("getting from", talerWithdrawUri); let d: WithdrawDetails | undefined = undefined; try { d = await getWithdrawDetails(talerWithdrawUri, selectedExchange); } catch (e) { console.error("error getting withdraw details", 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]); 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 () => { 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 (
You are about to withdraw{" "} {renderAmount(details.bankWithdrawDetails.amount)} from your bank account into your wallet.

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

{details.exchangeWithdrawDetails ? ( ) : null}
); } async function main() { try { const url = new URL(document.location.href); const talerWithdrawUri = url.searchParams.get("talerWithdrawUri"); if (!talerWithdrawUri) { throw Error("withdraw URI required"); } ReactDOM.render( , document.getElementById("exchange-selection")!, ); } catch (e) { // TODO: provide more context information, maybe factor it out into a // TODO:generic error reporting function or component. document.body.innerText = i18n.str`Fatal error: "${e.message}".`; console.error("got error", e); } } document.addEventListener("DOMContentLoaded", () => { main(); });