aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/cta
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-03-06 21:15:30 +0100
committerFlorian Dold <florian@dold.me>2024-03-07 00:03:59 +0100
commit7ba1d1f3351e58a331e99337afea0fbedb6eb828 (patch)
tree60b7a485cd317c1fe55276acdc0e055cd9353bfb /packages/taler-wallet-webextension/src/cta
parent618caa117111b9fed6a792b6816fc724483eb349 (diff)
downloadwallet-core-7ba1d1f3351e58a331e99337afea0fbedb6eb828.tar.xz
refactor coin selection, report maxEffectiveSpendAmount
Diffstat (limited to 'packages/taler-wallet-webextension/src/cta')
-rw-r--r--packages/taler-wallet-webextension/src/cta/Payment/stories.tsx12
-rw-r--r--packages/taler-wallet-webextension/src/cta/TransferCreate/state.ts18
2 files changed, 16 insertions, 14 deletions
diff --git a/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx b/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx
index a3f00f164..567b5c177 100644
--- a/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx
@@ -59,7 +59,7 @@ export const NoEnoughBalanceAvailable = tests.createExample(BaseView, {
balanceAgeAcceptable: "USD:9" as AmountString,
balanceMerchantAcceptable: "USD:9" as AmountString,
balanceMerchantDepositable: "USD:9" as AmountString,
- feeGapEstimate: "USD:1" as AmountString,
+ maxEffectiveSpendAmount: "USD:9.5" as AmountString,
perExchange: {},
},
talerUri: "taler://pay/..",
@@ -100,7 +100,7 @@ export const NoEnoughBalanceMaterial = tests.createExample(BaseView, {
balanceAgeAcceptable: "USD:9" as AmountString,
balanceMerchantAcceptable: "USD:9" as AmountString,
balanceMerchantDepositable: "USD:0" as AmountString,
- feeGapEstimate: "USD:1" as AmountString,
+ maxEffectiveSpendAmount: "USD:9.5" as AmountString,
perExchange: {},
},
talerUri: "taler://pay/..",
@@ -141,7 +141,7 @@ export const NoEnoughBalanceAgeAcceptable = tests.createExample(BaseView, {
balanceAgeAcceptable: "USD:9" as AmountString,
balanceMerchantAcceptable: "USD:9" as AmountString,
balanceMerchantDepositable: "USD:9" as AmountString,
- feeGapEstimate: "USD:1" as AmountString,
+ maxEffectiveSpendAmount: "USD:9.5" as AmountString,
perExchange: {},
},
talerUri: "taler://pay/..",
@@ -183,7 +183,7 @@ export const NoEnoughBalanceMerchantAcceptable = tests.createExample(BaseView, {
balanceAgeAcceptable: "USD:10" as AmountString,
balanceMerchantAcceptable: "USD:9" as AmountString,
balanceMerchantDepositable: "USD:9" as AmountString,
- feeGapEstimate: "USD:1" as AmountString,
+ maxEffectiveSpendAmount: "USD:9.5" as AmountString,
perExchange: {},
},
talerUri: "taler://pay/..",
@@ -226,7 +226,7 @@ export const NoEnoughBalanceMerchantDepositable = tests.createExample(
balanceAgeAcceptable: "USD:10" as AmountString,
balanceMerchantAcceptable: "USD:10" as AmountString,
balanceMerchantDepositable: "USD:9" as AmountString,
- feeGapEstimate: "USD:1" as AmountString,
+ maxEffectiveSpendAmount: "USD:9.5" as AmountString,
perExchange: {},
},
talerUri: "taler://pay/..",
@@ -268,7 +268,7 @@ export const NoEnoughBalanceFeeGap = tests.createExample(BaseView, {
balanceAgeAcceptable: "USD:10" as AmountString,
balanceMerchantAcceptable: "USD:10" as AmountString,
balanceMerchantDepositable: "USD:10" as AmountString,
- feeGapEstimate: "USD:1" as AmountString,
+ maxEffectiveSpendAmount: "USD:9.5" as AmountString,
perExchange: {},
},
talerUri: "taler://pay/..",
diff --git a/packages/taler-wallet-webextension/src/cta/TransferCreate/state.ts b/packages/taler-wallet-webextension/src/cta/TransferCreate/state.ts
index d3cbc66a0..f092801ed 100644
--- a/packages/taler-wallet-webextension/src/cta/TransferCreate/state.ts
+++ b/packages/taler-wallet-webextension/src/cta/TransferCreate/state.ts
@@ -17,19 +17,18 @@
import {
AmountString,
Amounts,
- TalerError,
TalerErrorCode,
TalerProtocolTimestamp,
} from "@gnu-taler/taler-util";
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
+import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { isFuture, parse } from "date-fns";
-import { useEffect, useState } from "preact/hooks";
+import { useState } from "preact/hooks";
import { alertFromError, useAlertContext } from "../../context/alert.js";
import { useBackendContext } from "../../context/backend.js";
-import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { useAsyncAsHook } from "../../hooks/useAsyncAsHook.js";
-import { Props, State } from "./index.js";
import { BackgroundError, WxApiType } from "../../wxApi.js";
+import { Props, State } from "./index.js";
export function useComponentState({
amount: amountStr,
@@ -164,11 +163,14 @@ async function checkPeerPushDebitAndCheckMax(
const material = Amounts.parseOrThrow(
e.errorDetail.insufficientBalanceDetails.balanceMaterial,
);
- const gap = Amounts.parseOrThrow(
- e.errorDetail.insufficientBalanceDetails.feeGapEstimate,
- );
- const newAmount = Amounts.sub(material, gap).amount;
const amount = Amounts.parseOrThrow(amountState);
+ const gap = Amounts.sub(
+ amount,
+ Amounts.parseOrThrow(
+ e.errorDetail.insufficientBalanceDetails.maxEffectiveSpendAmount,
+ ),
+ ).amount;
+ const newAmount = Amounts.sub(material, gap).amount;
if (Amounts.cmp(newAmount, amount) === 0) {
//insufficient balance and the exception didn't give
//a good response that allow us to try again