aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/demobank-ui/src/pages/OperationState/state.ts49
-rw-r--r--packages/demobank-ui/src/pages/QrCodeSection.tsx20
-rw-r--r--packages/demobank-ui/src/pages/WalletWithdrawForm.tsx28
-rw-r--r--packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx26
-rw-r--r--packages/demobank-ui/src/pages/WithdrawalQRCode.tsx8
5 files changed, 111 insertions, 20 deletions
diff --git a/packages/demobank-ui/src/pages/OperationState/state.ts b/packages/demobank-ui/src/pages/OperationState/state.ts
index 136a2b505..a4890d726 100644
--- a/packages/demobank-ui/src/pages/OperationState/state.ts
+++ b/packages/demobank-ui/src/pages/OperationState/state.ts
@@ -50,11 +50,17 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
switch (resp.case) {
case "insufficient-funds": return notify({
type: "error",
- title: i18n.str`The operation was rejected due to insufficient funds`,
+ title: i18n.str`The operation was rejected due to insufficient funds.`,
description: resp.detail.hint as TranslatedString,
debug: resp.detail,
});
- default: assertUnreachable(resp.case)
+ case "unauthorized": return notify({
+ type: "error",
+ title: i18n.str`Unauthorized to make the opeartion, maybe the session has expired or the password changed.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ });
+ default: assertUnreachable(resp)
}
}
@@ -99,7 +105,19 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
description: resp.detail.hint as TranslatedString,
debug: resp.detail,
})
- default: assertUnreachable(resp.case)
+ case "invalid-id": return notify({
+ type: "error",
+ title: i18n.str`The operation id is invalid.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ });
+ case "not-found": return notify({
+ type: "error",
+ title: i18n.str`The operation was not found.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ });
+ default: assertUnreachable(resp)
}
}
})
@@ -128,6 +146,18 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
description: resp.detail.hint as TranslatedString,
debug: resp.detail,
})
+ case "invalid-id": return notify({
+ type: "error",
+ title: i18n.str`The operation id is invalid.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ });
+ case "not-found": return notify({
+ type: "error",
+ title: i18n.str`The operation was not found.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ });
default: assertUnreachable(resp)
}
}
@@ -183,7 +213,18 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
},
}
}
- default: assertUnreachable(result.case)
+ case "invalid-id": {
+ return {
+ status: "aborted",
+ error: undefined,
+ onClose: async () => {
+ updateSettings("currentWithdrawalOperationId", undefined)
+ onClose()
+ },
+ }
+
+ }
+ default: assertUnreachable(result)
}
}
diff --git a/packages/demobank-ui/src/pages/QrCodeSection.tsx b/packages/demobank-ui/src/pages/QrCodeSection.tsx
index 8948827aa..9ae1cf268 100644
--- a/packages/demobank-ui/src/pages/QrCodeSection.tsx
+++ b/packages/demobank-ui/src/pages/QrCodeSection.tsx
@@ -56,17 +56,29 @@ export function QrCodeSection({
async function doAbort() {
await withRuntimeErrorHandling(i18n, async () => {
- const result = await api.abortWithdrawalById(withdrawUri.withdrawalOperationId);
- if (result.type === "ok") {
+ const resp = await api.abortWithdrawalById(withdrawUri.withdrawalOperationId);
+ if (resp.type === "ok") {
onAborted();
} else {
- switch (result.case) {
+ switch (resp.case) {
case "previously-confirmed": return notify({
type: "info",
title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`
})
+ case "invalid-id": return notify({
+ type: "error",
+ title: i18n.str`The operation id is invalid.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
+ case "not-found": return notify({
+ type: "error",
+ title: i18n.str`The operation was not found.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
default: {
- assertUnreachable(result.case)
+ assertUnreachable(resp)
}
}
}
diff --git a/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx b/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx
index f1ff49068..0637a8af4 100644
--- a/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx
+++ b/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx
@@ -89,26 +89,40 @@ function OldWithdrawalForm({ goToConfirmOperation, limit, onCancel, focus }: {
async function doStart() {
if (!parsedAmount || !creds) return;
await withRuntimeErrorHandling(i18n, async () => {
- const result = await api.createWithdrawal(creds, {
+ const resp = await api.createWithdrawal(creds, {
amount: Amounts.stringify(parsedAmount),
});
- if (result.type === "ok") {
- const uri = parseWithdrawUri(result.body.taler_withdraw_uri);
+ if (resp.type === "ok") {
+ const uri = parseWithdrawUri(resp.body.taler_withdraw_uri);
if (!uri) {
return notifyError(
i18n.str`Server responded with an invalid withdraw URI`,
- i18n.str`Withdraw URI: ${result.body.taler_withdraw_uri}`);
+ i18n.str`Withdraw URI: ${resp.body.taler_withdraw_uri}`);
} else {
updateSettings("currentWithdrawalOperationId", uri.withdrawalOperationId)
goToConfirmOperation(uri.withdrawalOperationId);
}
} else {
- switch (result.case) {
+ switch (resp.case) {
case "insufficient-funds": {
- notify({ type: "error", title: i18n.str`The operation was rejected due to insufficient funds` })
+ notify({
+ type: "error",
+ title: i18n.str`The operation was rejected due to insufficient funds`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
break;
}
- default: assertUnreachable(result.case)
+ case "unauthorized": {
+ notify({
+ type: "error",
+ title: i18n.str`The operation was rejected due to insufficient funds`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
+ break;
+ }
+ default: assertUnreachable(resp)
}
}
})
diff --git a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
index 895094c28..5e0fa322f 100644
--- a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
+++ b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
@@ -110,6 +110,18 @@ export function WithdrawalConfirmationQuestion({
description: resp.detail.hint as TranslatedString,
debug: resp.detail,
});
+ case "invalid-id": return notify({
+ type: "error",
+ title: i18n.str`The operation id is invalid.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
+ case "not-found": return notify({
+ type: "error",
+ title: i18n.str`The operation was not found.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
default: assertUnreachable(resp)
}
}
@@ -129,8 +141,20 @@ export function WithdrawalConfirmationQuestion({
type: "error",
title: i18n.str`The reserve operation has been confirmed previously and can't be aborted`
});
+ case "invalid-id": return notify({
+ type: "error",
+ title: i18n.str`The operation id is invalid.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
+ case "not-found": return notify({
+ type: "error",
+ title: i18n.str`The operation was not found.`,
+ description: resp.detail.hint as TranslatedString,
+ debug: resp.detail,
+ })
default: {
- assertUnreachable(resp.case)
+ assertUnreachable(resp)
}
}
}
diff --git a/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx b/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx
index 5c300d0ab..bdd8ea585 100644
--- a/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx
+++ b/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx
@@ -23,14 +23,13 @@ import {
} from "@gnu-taler/taler-util";
import { notifyInfo, useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, VNode, h } from "preact";
+import { Attention } from "../components/Attention.js";
import { ErrorLoading } from "../components/ErrorLoading.js";
import { Loading } from "../components/Loading.js";
import { useWithdrawalDetails } from "../hooks/access.js";
-import { assertUnreachable } from "./WithdrawalOperationPage.js";
import { QrCodeSection } from "./QrCodeSection.js";
import { WithdrawalConfirmationQuestion } from "./WithdrawalConfirmationQuestion.js";
-import { Attention } from "../components/Attention.js";
-import { Pages } from "../pages.js";
+import { assertUnreachable } from "./WithdrawalOperationPage.js";
const logger = new Logger("WithdrawalQRCode");
@@ -59,7 +58,8 @@ export function WithdrawalQRCode({
if (result.type === "fail") {
switch (result.case) {
case "not-found": return <OperationNotFound onClose={onClose} />
- default: assertUnreachable(result.case)
+ case "invalid-id": return <OperationNotFound onClose={onClose} />
+ default: assertUnreachable(result)
}
}