diff options
Diffstat (limited to 'packages/bank-ui')
-rw-r--r-- | packages/bank-ui/src/hooks/preferences.ts | 2 | ||||
-rw-r--r-- | packages/bank-ui/src/pages/OperationState/state.ts | 14 | ||||
-rw-r--r-- | packages/bank-ui/src/pages/PaytoWireTransferForm.tsx | 73 | ||||
-rw-r--r-- | packages/bank-ui/src/pages/WalletWithdrawForm.tsx | 13 | ||||
-rw-r--r-- | packages/bank-ui/src/settings.json | 2 |
5 files changed, 91 insertions, 13 deletions
diff --git a/packages/bank-ui/src/hooks/preferences.ts b/packages/bank-ui/src/hooks/preferences.ts index bb3dcb153..9c60456c7 100644 --- a/packages/bank-ui/src/hooks/preferences.ts +++ b/packages/bank-ui/src/hooks/preferences.ts @@ -104,7 +104,7 @@ export function getLabelForPreferences( case "showInstallWallet": return i18n.str`Show install wallet first`; case "fastWithdrawal": - return i18n.str`Use fast withdrawal form`; + return i18n.str`Set the withdrawal amount in the wallet`; case "showDebugInfo": return i18n.str`Show debug info`; } diff --git a/packages/bank-ui/src/pages/OperationState/state.ts b/packages/bank-ui/src/pages/OperationState/state.ts index 19c097d18..32d4fea7a 100644 --- a/packages/bank-ui/src/pages/OperationState/state.ts +++ b/packages/bank-ui/src/pages/OperationState/state.ts @@ -18,6 +18,7 @@ import { Amounts, HttpStatusCode, TalerCoreBankErrorsByMethod, + TalerCorebankApi, TalerError, assertUnreachable, parsePaytoUri, @@ -58,9 +59,16 @@ export function useComponentState({ // FIXME: if amount is not enough use balance const parsedAmount = Amounts.parseOrThrow(`${currency}:${amount}`); if (!creds) return; - const resp = await bank.createWithdrawal(creds, { - amount: Amounts.stringify(parsedAmount), - }); + const params: TalerCorebankApi.BankAccountCreateWithdrawalRequest = + settings.fastWithdrawal + ? { + suggested_amount: Amounts.stringify(parsedAmount), + } + : { + amount: Amounts.stringify(parsedAmount), + }; + + const resp = await bank.createWithdrawal(creds, params); if (resp.type === "fail") { setFailure(resp); return; diff --git a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx index 3bf891504..bb408e497 100644 --- a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx +++ b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx @@ -111,6 +111,17 @@ export function PaytoWireTransferForm({ ? ("x-taler-bank" as const) : ("iban" as const); + const wireFee = + config.wire_transfer_fees === undefined + ? Amounts.zeroOfCurrency(config.currency) + // Amounts.parseOrThrow("YEIN:2.5") + : Amounts.parseOrThrow(config.wire_transfer_fees); + + const amountAfterFee = + !parsedAmount || Amounts.cmp(parsedAmount, wireFee) < 1 + ? undefined + : Amounts.sub(parsedAmount, wireFee).amount; + const errorsWire = undefinedIfEmpty({ account: !account ? i18n.str`Required` @@ -124,7 +135,7 @@ export function PaytoWireTransferForm({ ? i18n.str`Required` : !parsedAmount ? i18n.str`Not valid` - : validateAmount(parsedAmount, limit, i18n), + : validateAmount(parsedAmount, limit, wireFee, i18n), }); const parsed = !rawPaytoInput ? undefined : parsePaytoUri(rawPaytoInput); @@ -134,7 +145,7 @@ export function PaytoWireTransferForm({ ? i18n.str`Required` : !parsed ? i18n.str`Does not follow the pattern` - : validateRawPayto(parsed, limit, url.host, i18n, paytoType), + : validateRawPayto(parsed, limit, wireFee, url.host, i18n, paytoType), }); async function doSend() { @@ -479,9 +490,9 @@ export function PaytoWireTransferForm({ e.preventDefault(); }} > - <div class="p-4 sm:p-8"> + <div class="m-4"> {!isRawPayto ? ( - <div class="grid max-w-xs grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6"> + <div class="grid max-w-xs grid-cols-1 gap-x-6 gap-y-8 "> {(() => { switch (paytoType) { case "x-taler-bank": { @@ -623,6 +634,53 @@ export function PaytoWireTransferForm({ </div> )} </div> + <div class="px-4 my-4"> + <div class="grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6"> + <div class="sm:col-span-6"> + <dl class="mt-4 space-y-4"> + {Amounts.isZero(wireFee) ? undefined : ( + <Fragment> + <div class="flex items-center justify-between "> + <dt class="flex items-center text-sm text-gray-600"> + <span> + <i18n.Translate>Fee</i18n.Translate> + </span> + </dt> + <dd class="text-sm text-gray-900"> + <RenderAmount + value={wireFee} + negative + withColor + spec={config.currency_specification} + /> + </dd> + </div> + </Fragment> + )}{" "} + {!parsedAmount || !amountAfterFee ? undefined : ( + <Fragment> + <div class="flex items-center justify-between border-t-2 afu pt-4"> + <dt class="flex items-center text-sm text-gray-600"> + <span> + <i18n.Translate> + Recipient will receive + </i18n.Translate> + </span> + </dt> + <dd class="text-sm text-gray-900"> + <RenderAmount + value={amountAfterFee} + withColor + spec={config.currency_specification} + /> + </dd> + </div> + </Fragment> + )} + </dl> + </div> + </div> + </div> <div class="flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8"> {routeCancel ? ( <a @@ -768,6 +826,7 @@ export function RenderAmount({ function validateRawPayto( parsed: PaytoUri, limit: AmountJson, + fee: AmountJson, host: string, i18n: InternationalizationAPI, type: "iban" | "x-taler-bank", @@ -811,7 +870,7 @@ function validateRawPayto( if (!amount) { return i18n.str`The "amount" parameter is not valid`; } - result = validateAmount(amount, limit, i18n); + result = validateAmount(amount, limit, fee, i18n); if (result) return result; if (!parsed.params.message) { @@ -827,6 +886,7 @@ function validateRawPayto( function validateAmount( amount: AmountJson, limit: AmountJson, + fee: AmountJson, i18n: InternationalizationAPI, ): TranslatedString | undefined { if (amount.currency !== limit.currency) { @@ -835,6 +895,9 @@ function validateAmount( if (Amounts.isZero(amount)) { return i18n.str`Can't transfer zero amount`; } + if (Amounts.cmp(amount, fee) < 1) { + return i18n.str`Should be higher than fees`; + } if (Amounts.cmp(limit, amount) === -1) { return i18n.str`Balance is not enough`; } diff --git a/packages/bank-ui/src/pages/WalletWithdrawForm.tsx b/packages/bank-ui/src/pages/WalletWithdrawForm.tsx index a9c652643..39dea018f 100644 --- a/packages/bank-ui/src/pages/WalletWithdrawForm.tsx +++ b/packages/bank-ui/src/pages/WalletWithdrawForm.tsx @@ -19,6 +19,7 @@ import { AmountJson, Amounts, HttpStatusCode, + TalerCorebankApi, TranslatedString, assertUnreachable, parseWithdrawUri, @@ -141,9 +142,15 @@ function OldWithdrawalForm({ async function doStart() { if (!parsedAmount || !creds) return; await handleError(async () => { - const resp = await api.createWithdrawal(creds, { - amount: Amounts.stringify(parsedAmount), - }); + const params: TalerCorebankApi.BankAccountCreateWithdrawalRequest = + settings.fastWithdrawal + ? { + suggested_amount: Amounts.stringify(parsedAmount), + } + : { + amount: Amounts.stringify(parsedAmount), + }; + const resp = await api.createWithdrawal(creds, params); if (resp.type === "ok") { const uri = parseWithdrawUri(resp.body.taler_withdraw_uri); if (!uri) { diff --git a/packages/bank-ui/src/settings.json b/packages/bank-ui/src/settings.json index b1df52568..df5fe75ce 100644 --- a/packages/bank-ui/src/settings.json +++ b/packages/bank-ui/src/settings.json @@ -1,5 +1,5 @@ { - "backendBaseURL": "http://bank-fir.taler.test:1180/", + "backendBaseURL": "http://bank.taler.test:1180/", "simplePasswordForRandomAccounts": true, "allowRandomAccountCreation": true, "bankName": "Taler DEVELOPMENT Bank", |