commit a221ec6b793ed10def1b7dc19c9772d343fe16de
parent 9fb0e7d0b386a1b10a39d0b664131590cd0c3a68
Author: Sebastian <sebasjm@gmail.com>
Date: Thu, 22 Dec 2022 18:38:47 -0300
fix unhandled input
Diffstat:
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
@@ -16,7 +16,7 @@
import { Logger } from "@gnu-taler/taler-util";
import { Fragment, h, VNode } from "preact";
-import { StateUpdater } from "preact/hooks";
+import { StateUpdater, useMemo, useState } from "preact/hooks";
import { useBackendContext } from "../context/backend.js";
import { PageStateType, usePageContext } from "../context/pageState.js";
import {
@@ -36,11 +36,15 @@ export function WithdrawalConfirmationQuestion(): VNode {
const { pageState, pageStateSetter } = usePageContext();
const backend = useBackendContext();
const { i18n } = useTranslationContext();
- const captchaNumbers = {
- a: Math.floor(Math.random() * 10),
- b: Math.floor(Math.random() * 10),
- };
- let captchaAnswer = "";
+
+ const captchaNumbers = useMemo(() => {
+ return {
+ a: Math.floor(Math.random() * 10),
+ b: Math.floor(Math.random() * 10),
+ };
+ }, [pageState.withdrawalId]);
+
+ const [captchaAnswer, setCaptchaAnswer] = useState<string | undefined>();
return (
<Fragment>
@@ -68,11 +72,12 @@ export function WithdrawalConfirmationQuestion(): VNode {
<input
name="answer"
id="answer"
+ value={captchaAnswer ?? ""}
type="text"
autoFocus
required
onInput={(e): void => {
- captchaAnswer = e.currentTarget.value;
+ setCaptchaAnswer(e.currentTarget.value);
}}
/>
</p>
@@ -86,7 +91,7 @@ export function WithdrawalConfirmationQuestion(): VNode {
captchaAnswer ==
(captchaNumbers.a + captchaNumbers.b).toString()
) {
- confirmWithdrawalCall(
+ await confirmWithdrawalCall(
backend.state,
pageState.withdrawalId,
pageStateSetter,
@@ -98,9 +103,10 @@ export function WithdrawalConfirmationQuestion(): VNode {
...prevState,
error: {
- title: i18n.str`Answer is wrong.`,
+ title: i18n.str`The answer "${captchaAnswer}" to "${captchaNumbers.a} + ${captchaNumbers.b}" is wrong.`,
},
}));
+ setCaptchaAnswer(undefined);
}}
>
{i18n.str`Confirm`}