From 1bfaf997c3f898ee7a5e8a19bbaf4475cce94f0f Mon Sep 17 00:00:00 2001
From: Sebastian
Date: Fri, 4 Nov 2022 14:35:38 -0300
Subject: [PATCH] some fixes
after update pageState reset info and error message
input values should not be undefined, otherwise it gets uncontrolled (not controlled by preact)
autofocus on captcha
create a dependency from transactionList to balance, so tx list will be queried again if balance is updated
update balance on any pageChange
---
packages/demobank-ui/src/hooks/index.ts | 2 -
packages/demobank-ui/src/pages/home/index.tsx | 72 +++++++++++++------
2 files changed, 52 insertions(+), 22 deletions(-)
diff --git a/packages/demobank-ui/src/hooks/index.ts b/packages/demobank-ui/src/hooks/index.ts
index 2126cada5..94e66e5e3 100644
--- a/packages/demobank-ui/src/hooks/index.ts
+++ b/packages/demobank-ui/src/hooks/index.ts
@@ -112,8 +112,6 @@ export function useLocalStorage(
value?: string | ((val?: string) => string | undefined),
) => {
setStoredValue((p) => {
- console.log("calling setStoredValue");
- console.log(window);
const toStore = value instanceof Function ? value(p) : value;
if (typeof window !== "undefined")
if (!toStore) window.localStorage.removeItem(key);
diff --git a/packages/demobank-ui/src/pages/home/index.tsx b/packages/demobank-ui/src/pages/home/index.tsx
index 6477e018d..be115412b 100644
--- a/packages/demobank-ui/src/pages/home/index.tsx
+++ b/packages/demobank-ui/src/pages/home/index.tsx
@@ -176,6 +176,7 @@ interface PageStateType {
* be moved in a future "withdrawal state" object.
*/
withdrawalId?: string;
+ timestamp?: number;
}
/**
@@ -497,7 +498,24 @@ function usePageState(
ret[1](newVal);
};
- return [retObj, retSetter];
+
+ //when moving from one page to another
+ //clean up the info and error bar
+ function removeLatestInfo(val: any): ReturnType {
+ const updater = typeof val === 'function' ? val : (c:any) => val
+ return retSetter((current:any) => {
+ const cleanedCurrent: PageStateType = {...current,
+ hasInfo: false,
+ info: undefined,
+ hasError: false,
+ errors: undefined,
+ timestamp: new Date().getTime()
+ }
+ return updater(cleanedCurrent)
+ })
+ }
+
+ return [retObj, removeLatestInfo];
}
/**
@@ -997,9 +1015,7 @@ function StatusBanner(Props: any): VNode | null {
const i18n = useTranslator();
if (!pageState.hasInfo) return null;
- const rval = {pageState.error}
;
- delete pageState.info_msg;
- pageState.hasInfo = false;
+ const rval = {pageState.info}
;
return rval;
}
@@ -1176,7 +1192,7 @@ function PaytoWireTransfer(Props: any): VNode {
type="text"
id="iban"
name="iban"
- value={submitData?.iban}
+ value={submitData?.iban ?? ""}
placeholder="CC0123456789"
required
pattern={ibanRegex}
@@ -1199,7 +1215,7 @@ function PaytoWireTransfer(Props: any): VNode {
name="subject"
id="subject"
placeholder="subject"
- value={submitData?.subject}
+ value={submitData?.subject ?? ""}
required
onInput={(e): void => {
submitDataSetter((submitData: any) => ({
@@ -1221,7 +1237,7 @@ function PaytoWireTransfer(Props: any): VNode {
id="amount"
placeholder="amount"
required
- value={submitData?.amount}
+ value={submitData?.amount ?? ""}
pattern={amountRegex}
onInput={(e): void => {
submitDataSetter((submitData: any) => ({
@@ -1282,7 +1298,11 @@ function PaytoWireTransfer(Props: any): VNode {
transactionData,
backendState,
pageStateSetter,
- () => submitDataSetter((p) => ({})),
+ () => submitDataSetter((p) => ({
+ amount: undefined,
+ iban: undefined,
+ subject: undefined,
+ })),
);
}}
/>
@@ -1291,7 +1311,11 @@ function PaytoWireTransfer(Props: any): VNode {
class="pure-button"
value="Clear"
onClick={async () => {
- submitDataSetter((p) => ({}));
+ submitDataSetter((p) => ({
+ amount: undefined,
+ iban: undefined,
+ subject: undefined,
+ }));
}}
/>
@@ -1436,6 +1460,7 @@ function TalerWithdrawalConfirmationQuestion(Props: any): VNode {
name="answer"
id="answer"
type="text"
+ autoFocus
required
onInput={(e): void => {
captchaAnswer = e.currentTarget.value;
@@ -1472,8 +1497,8 @@ function TalerWithdrawalConfirmationQuestion(Props: any): VNode {