/* This file is part of GNU Taler (C) 2021 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 */ /** * * @author Sebastian Javier Marchano (sebasjm) */ import { AmountJson, Amounts } from "@gnu-taler/taler-util"; import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { ErrorMessage } from "../components/ErrorMessage"; import { SelectList } from "../components/SelectList"; import { BoldLight, ButtonPrimary, ButtonSuccess, Centered, Input, InputWithLabel, LightText, LinkPrimary, } from "../components/styled"; import { useTranslationContext } from "../context/translation"; export interface Props { error: string | undefined; initialAmount?: string; exchangeList: Record; onCreate: (exchangeBaseUrl: string, amount: AmountJson) => Promise; onAddExchange: () => void; initialCurrency?: string; } export function CreateManualWithdraw({ initialAmount, exchangeList, error, initialCurrency, onCreate, onAddExchange, }: Props): VNode { const { i18n } = useTranslationContext(); const exchangeSelectList = Object.keys(exchangeList); const currencySelectList = Object.values(exchangeList); const exchangeMap = exchangeSelectList.reduce( (p, c) => ({ ...p, [c]: `${c} (${exchangeList[c]})` }), {} as Record, ); const currencyMap = currencySelectList.reduce( (p, c) => ({ ...p, [c]: c }), {} as Record, ); const foundExchangeForCurrency = exchangeSelectList.findIndex( (e) => exchangeList[e] === initialCurrency, ); const initialExchange = foundExchangeForCurrency !== -1 ? exchangeSelectList[foundExchangeForCurrency] : exchangeSelectList.length > 0 ? exchangeSelectList[0] : ""; const [exchange, setExchange] = useState(initialExchange || ""); const [currency, setCurrency] = useState(exchangeList[initialExchange] ?? ""); const [amount, setAmount] = useState(initialAmount || ""); const parsedAmount = Amounts.parse(`${currency}:${amount}`); function changeExchange(exchange: string): void { setExchange(exchange); setCurrency(exchangeList[exchange]); } function changeCurrency(currency: string): void { setCurrency(currency); const found = Object.entries(exchangeList).find((e) => e[1] === currency); if (found) { setExchange(found[0]); } else { setExchange(""); } } if (!initialExchange) { return (

Manual Withdrawal

Choose a exchange from where the coins will be withdrawn. The exchange will send the coins to this wallet after receiving a wire transfer with the correct subject. No exchange configured Add exchange
); } return (
{error && ( Can't create the reserve} description={error} /> )}

Manual Withdrawal

Choose a exchange from where the coins will be withdrawn. The exchange will send the coins to this wallet after receiving a wire transfer with the correct subject.

Currency} list={currencyMap} name="currency" value={currency} onChange={changeCurrency} /> Exchange} list={exchangeMap} name="currency" value={exchange} onChange={changeExchange} />

Add Exchange
{currency && (
{currency} setAmount(e.currentTarget.value)} />
)}

); }