From fb8372dfbf27b7b4e8b2fe4f81aa2ba18bfcf638 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 15 Aug 2022 23:01:05 -0300 Subject: default exchange and select currency --- .../src/wallet/DestinationSelection.tsx | 135 ++++++++++++++++----- 1 file changed, 104 insertions(+), 31 deletions(-) (limited to 'packages/taler-wallet-webextension/src/wallet/DestinationSelection.tsx') diff --git a/packages/taler-wallet-webextension/src/wallet/DestinationSelection.tsx b/packages/taler-wallet-webextension/src/wallet/DestinationSelection.tsx index 5f9c5065c..ba5dcf1da 100644 --- a/packages/taler-wallet-webextension/src/wallet/DestinationSelection.tsx +++ b/packages/taler-wallet-webextension/src/wallet/DestinationSelection.tsx @@ -18,18 +18,29 @@ import { Amounts } from "@gnu-taler/taler-util"; import { styled } from "@linaria/react"; import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; +import { ErrorMessage } from "../components/ErrorMessage.js"; +import { Loading } from "../components/Loading.js"; +import { LoadingError } from "../components/LoadingError.js"; +import { SelectList } from "../components/SelectList.js"; import { + Input, InputWithLabel, LightText, + LinkPrimary, + SubTitle, SvgIcon, } from "../components/styled/index.js"; import { useTranslationContext } from "../context/translation.js"; +import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js"; +import { Alert } from "../mui/Alert.js"; import { Button } from "../mui/Button.js"; import { Grid } from "../mui/Grid.js"; import { Paper } from "../mui/Paper.js"; import { TextField } from "../mui/TextField.js"; +import { Pages } from "../NavigationBar.js"; import arrowIcon from "../svg/chevron-down.svg"; import bankIcon from "../svg/ri-bank-line.svg"; +import * as wxApi from "../wxApi.js"; const Container = styled.div` display: flex; @@ -152,6 +163,57 @@ const CircleDiv = styled.div` border: none; `; +export function SelectCurrency({ + onChange, +}: { + onChange: (s: string) => void; +}): VNode { + const { i18n } = useTranslationContext(); + + const hook = useAsyncAsHook(wxApi.listExchanges); + + if (!hook) { + return ; + } + if (hook.hasError) { + return ( + Could not load list of exchange} + /> + ); + } + const list: Record = {}; + hook.response.exchanges.forEach((e) => (list[e.currency] = e.currency)); + list[""] = "Select a currency"; + return ( + +

+ Specify the amount and the origin +

+ + + Choose a currency to proceed or add more exchanges in the settings tab + + + Known currencies} + list={list} + name="lang" + value={""} + onChange={(v) => onChange(v)} + /> + +
+
+ + Add an exchange + +
+ + ); +} + function RowExample({ info, disabled, @@ -194,9 +256,9 @@ export function DestinationSelectionGetCash({ ? undefined : Amounts.parse(initialAmount); const parsedInitialAmountValue = !parsedInitialAmount - ? "" + ? "0" : Amounts.stringifyValue(parsedInitialAmount); - const currency = parsedInitialAmount?.currency; + const [currency, setCurrency] = useState(parsedInitialAmount?.currency); const [amount, setAmount] = useState(parsedInitialAmountValue); const { i18n } = useTranslationContext(); @@ -220,7 +282,11 @@ export function DestinationSelectionGetCash({ ]; if (!currency) { - return
currency not provided
; + return ( +
+ setCurrency(c)} /> +
+ ); } const currencyAndAmount = `${currency}:${amount}`; const parsedAmount = Amounts.parse(currencyAndAmount); @@ -231,20 +297,25 @@ export function DestinationSelectionGetCash({

Specify the amount and the origin

- {currency}
- } - value={amount} - onChange={(e) => { - setAmount(e); - }} - /> + + {currency} + } + value={amount} + onChange={(e) => { + setAmount(e); + }} + /> + + {previous2.length > 0 ? ( @@ -350,20 +421,22 @@ export function DestinationSelectionSendCash({ Specify the amount and the destination - {currency} - } - value={amount} - onChange={(e) => { - setAmount(e); - }} - /> +
+ {currency}
+ } + value={amount} + onChange={(e) => { + setAmount(e); + }} + /> + {previous2.length > 0 ? ( -- cgit v1.2.3