diff options
Diffstat (limited to 'packages/demobank-ui/src/pages')
| -rw-r--r-- | packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx index 9fdd8ad59..747e8c516 100644 --- 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`}  | 
