/* 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 { renderAmount } from "../renderHtml"; import { useState, useEffect } from "preact/hooks"; import { acceptWithdrawal, onUpdateNotification, getWithdrawalDetailsForUri, } from "../wxApi"; import { WithdrawUriInfoResponse } from "@gnu-taler/taler-util"; import { JSX } from "preact/jsx-runtime"; interface Props { talerWithdrawUri?: string; } export interface ViewProps { talerWithdrawUri?: string; details?: WithdrawUriInfoResponse; cancelled?: boolean; selectedExchange?: string; accept: () => Promise; setCancelled: (b: boolean) => void; setSelecting: (b: boolean) => void; }; export function View({ talerWithdrawUri, details, cancelled, selectedExchange, accept, setCancelled, setSelecting }: ViewProps) { if (!talerWithdrawUri) { return missing withdraw uri; } if (!details) { return Loading...; } if (cancelled) { return Withdraw operation has been cancelled.; } return (

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 WithdrawalDialog({ talerWithdrawUri }: Props): JSX.Element { const [details, setDetails] = useState(undefined); const [selectedExchange, setSelectedExchange] = useState< string | undefined >(undefined); const [cancelled, setCancelled] = useState(false); const [selecting, setSelecting] = useState(false); const [errMsg, setErrMsg] = useState(""); const [updateCounter, setUpdateCounter] = useState(1); useEffect(() => { return onUpdateNotification(() => { setUpdateCounter(updateCounter + 1); }); }, []); useEffect(() => { if (!talerWithdrawUri) return const fetchData = async (): Promise => { const res = await getWithdrawalDetailsForUri({ talerWithdrawUri }); setDetails(res); if (res.defaultExchangeBaseUrl) { setSelectedExchange(res.defaultExchangeBaseUrl); } }; fetchData(); }, [selectedExchange, errMsg, selecting, talerWithdrawUri, updateCounter]); const accept = async (): Promise => { if (!talerWithdrawUri) return 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 } /** * @deprecated to be removed */ 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 ; }