summaryrefslogtreecommitdiff
path: root/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bank-ui/src/pages/PaytoWireTransferForm.tsx')
-rw-r--r--packages/bank-ui/src/pages/PaytoWireTransferForm.tsx28
1 files changed, 22 insertions, 6 deletions
diff --git a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
index 41956b84b..a3bb091c1 100644
--- a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
+++ b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
@@ -24,28 +24,30 @@ import {
HttpStatusCode,
PaytoString,
PaytoUri,
+ TalerCorebankApi,
TalerErrorCode,
TranslatedString,
assertUnreachable,
buildPayto,
parsePaytoUri,
- stringifyPaytoUri,
+ stringifyPaytoUri
} from "@gnu-taler/taler-util";
import {
InternationalizationAPI,
LocalNotificationBanner,
+ RouteDefinition,
ShowInputErrorLabel,
notifyInfo,
+ useBankCoreApiContext,
useLocalNotification,
useTranslationContext,
} from "@gnu-taler/web-util/browser";
import { ComponentChildren, Fragment, Ref, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { mutate } from "swr";
-import { useBankCoreApiContext } from "@gnu-taler/web-util/browser";
+import { IdempotencyRetry } from "../../../taler-util/lib/http-client/utils.js";
import { useBankState } from "../hooks/bank-state.js";
import { useSessionState } from "../hooks/session.js";
-import { RouteDefinition } from "@gnu-taler/web-util/browser";
import { undefinedIfEmpty, validateIBAN, validateTalerBank } from "../utils.js";
interface Props {
@@ -182,12 +184,17 @@ export function PaytoWireTransferForm({
const puri = payto_uri;
const sAmount = sendingAmount;
- await handleError(async () => {
- const request = {
+ await handleError(async function createTransactionHandleError() {
+ const request: TalerCorebankApi.CreateTransactionRequest = {
payto_uri: puri,
amount: sAmount,
};
- const resp = await api.createTransaction(credentials, request);
+ const check = IdempotencyRetry.tryFiveTimes();
+ const resp = await api.createTransaction(
+ credentials,
+ request,
+ check,
+ );
mutate(() => true);
if (resp.type === "fail") {
switch (resp.case) {
@@ -249,6 +256,15 @@ export function PaytoWireTransferForm({
debug: resp.detail,
when: AbsoluteTime.now(),
});
+ case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED: {
+ return notify({
+ type: "error",
+ title: i18n.str`Tried to create the transaction ${check.maxTries} times with different UID but failed.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ when: AbsoluteTime.now(),
+ });
+ }
case HttpStatusCode.Accepted: {
updateBankState("currentChallenge", {
operation: "create-transaction",