gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 01/02: fix loop rendering


From: gnunet
Subject: [taler-wallet-core] 01/02: fix loop rendering
Date: Wed, 30 Mar 2022 19:36:34 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit 8642f8edcd1aa8fe18c50d534f485debf1df01c9
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Wed Mar 30 14:22:42 2022 -0300

    fix loop rendering
---
 .../taler-wallet-webextension/src/cta/Deposit.tsx  |  3 +-
 packages/taler-wallet-webextension/src/cta/Pay.tsx |  2 +
 .../taler-wallet-webextension/src/cta/Withdraw.tsx | 79 ++++++++++++++--------
 .../src/hooks/useAsyncAsHook.ts                    |  2 +-
 .../src/hooks/useTalerActionURL.test.ts            |  1 +
 .../src/mui/input/FormControl.tsx                  | 10 ++-
 .../src/mui/input/InputBase.tsx                    |  2 +-
 .../src/platform/chrome.ts                         |  1 +
 .../src/wallet/CreateManualWithdraw.test.ts        |  1 +
 .../src/wallet/CreateManualWithdraw.tsx            |  1 +
 .../src/wallet/DepositPage.stories.tsx             |  1 +
 .../src/wallet/DepositPage.tsx                     |  3 +-
 .../src/wallet/ExchangeSetUrl.tsx                  |  2 +-
 .../src/wallet/ProviderAddPage.tsx                 |  3 +-
 .../taler-wallet-webextension/src/wxBackend.ts     |  1 -
 15 files changed, 72 insertions(+), 40 deletions(-)

diff --git a/packages/taler-wallet-webextension/src/cta/Deposit.tsx 
b/packages/taler-wallet-webextension/src/cta/Deposit.tsx
index 7ade50e2..541bc733 100644
--- a/packages/taler-wallet-webextension/src/cta/Deposit.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Deposit.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
 /*
  This file is part of TALER
  (C) 2015 GNUnet e.V.
@@ -197,7 +198,7 @@ export function PaymentRequestView({
   payStatus,
   payResult,
 }: PaymentRequestViewProps): VNode {
-  let totalFees: AmountJson = Amounts.getZero(payStatus.amountRaw);
+  const totalFees: AmountJson = Amounts.getZero(payStatus.amountRaw);
   const contractTerms: ContractTerms = payStatus.contractTerms;
   const { i18n } = useTranslationContext();
 
diff --git a/packages/taler-wallet-webextension/src/cta/Pay.tsx 
b/packages/taler-wallet-webextension/src/cta/Pay.tsx
index c2f35266..13fb6985 100644
--- a/packages/taler-wallet-webextension/src/cta/Pay.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Pay.tsx
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of TALER
  (C) 2015 GNUnet e.V.
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx 
b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
index 67a91039..64a0c258 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
@@ -28,7 +28,7 @@ import {
   WithdrawUriInfoResponse,
 } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
-import { useState } from "preact/hooks";
+import { useCallback, useMemo, useState } from "preact/hooks";
 import { Loading } from "../components/Loading.js";
 import { LoadingError } from "../components/LoadingError.js";
 import { ErrorTalerOperation } from "../components/ErrorTalerOperation.js";
@@ -247,37 +247,52 @@ export function WithdrawPageWithParsedURI({
   const [reviewing, setReviewing] = useState<boolean>(false);
   const [reviewed, setReviewed] = useState<boolean>(false);
 
-  const knownExchangesHook = useAsyncAsHook(() => wxApi.listExchanges());
+  const knownExchangesHook = useAsyncAsHook(
+    useCallback(() => wxApi.listExchanges(), []),
+  );
 
-  const knownExchanges =
-    !knownExchangesHook || knownExchangesHook.hasError
-      ? []
-      : knownExchangesHook.response.exchanges;
-  const withdrawAmount = Amounts.parseOrThrow(uriInfo.amount);
-  const thisCurrencyExchanges = knownExchanges.filter(
-    (ex) => ex.currency === withdrawAmount.currency,
+  const knownExchanges = useMemo(
+    () =>
+      !knownExchangesHook || knownExchangesHook.hasError
+        ? []
+        : knownExchangesHook.response.exchanges,
+    [knownExchangesHook],
+  );
+  const withdrawAmount = useMemo(
+    () => Amounts.parseOrThrow(uriInfo.amount),
+    [uriInfo.amount],
+  );
+  const thisCurrencyExchanges = useMemo(
+    () =>
+      knownExchanges.filter((ex) => ex.currency === withdrawAmount.currency),
+    [knownExchanges, withdrawAmount.currency],
   );
 
-  const exchange: string | undefined =
-    customExchange ??
-    uriInfo.defaultExchangeBaseUrl ??
-    (thisCurrencyExchanges[0]
-      ? thisCurrencyExchanges[0].exchangeBaseUrl
-      : undefined);
+  const exchange: string | undefined = useMemo(
+    () =>
+      customExchange ??
+      uriInfo.defaultExchangeBaseUrl ??
+      (thisCurrencyExchanges[0]
+        ? thisCurrencyExchanges[0].exchangeBaseUrl
+        : undefined),
+    [customExchange, thisCurrencyExchanges, uriInfo.defaultExchangeBaseUrl],
+  );
 
-  const detailsHook = useAsyncAsHook(async () => {
-    if (!exchange) throw Error("no default exchange");
-    const tos = await wxApi.getExchangeTos(exchange, ["text/xml"]);
+  const detailsHook = useAsyncAsHook(
+    useCallback(async () => {
+      if (!exchange) throw Error("no default exchange");
+      const tos = await wxApi.getExchangeTos(exchange, ["text/xml"]);
 
-    const tosState = buildTermsOfServiceState(tos);
+      const tosState = buildTermsOfServiceState(tos);
 
-    const info = await wxApi.getExchangeWithdrawalInfo({
-      exchangeBaseUrl: exchange,
-      amount: withdrawAmount,
-      tosAcceptedFormat: ["text/xml"],
-    });
-    return { tos: tosState, info };
-  });
+      const info = await wxApi.getExchangeWithdrawalInfo({
+        exchangeBaseUrl: exchange,
+        amount: withdrawAmount,
+        tosAcceptedFormat: ["text/xml"],
+      });
+      return { tos: tosState, info };
+    }, [exchange, withdrawAmount]),
+  );
 
   if (!detailsHook) {
     return <Loading />;
@@ -342,10 +357,14 @@ export function WithdrawPageWithParsedURI({
 }
 export function WithdrawPage({ talerWithdrawUri }: Props): VNode {
   const { i18n } = useTranslationContext();
-  const uriInfoHook = useAsyncAsHook(() =>
-    !talerWithdrawUri
-      ? Promise.reject(undefined)
-      : wxApi.getWithdrawalDetailsForUri({ talerWithdrawUri }),
+  const uriInfoHook = useAsyncAsHook(
+    useCallback(
+      () =>
+        !talerWithdrawUri
+          ? Promise.reject(undefined)
+          : wxApi.getWithdrawalDetailsForUri({ talerWithdrawUri }),
+      [talerWithdrawUri],
+    ),
   );
 
   if (!talerWithdrawUri) {
diff --git a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts 
b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
index 68bc9aed..4e86c5ee 100644
--- a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
@@ -74,6 +74,6 @@ export function useAsyncAsHook<T>(
         doAsync();
       });
     }
-  });
+  }, [fn, updateOnNotification]);
   return result;
 }
diff --git 
a/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.test.ts 
b/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.test.ts
index ed51d00e..25513f57 100644
--- a/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.test.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of GNU Taler
  (C) 2021 Taler Systems S.A.
diff --git a/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx 
b/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx
index 8860ce20..0f73f8c0 100644
--- a/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx
@@ -1,6 +1,6 @@
 import { css } from "@linaria/core";
 import { ComponentChildren, createContext, h, VNode } from "preact";
-import { useContext, useState } from "preact/hooks";
+import { useContext, useMemo, useState } from "preact/hooks";
 // eslint-disable-next-line import/extensions
 import { Colors } from "../style";
 
@@ -152,6 +152,10 @@ function withoutUndefinedProperties(obj: any): any {
 export function useFormControl(props: Partial<FCCProps> = {}): FCCProps {
   const ctx = useContext(FormControlContext);
   const cleanedProps = withoutUndefinedProperties(props);
-  if (!ctx) return { ...defaultContextValue, ...cleanedProps };
-  return { ...ctx, ...cleanedProps };
+
+  return useMemo(() => {
+    return !ctx
+      ? { ...defaultContextValue, ...cleanedProps }
+      : { ...ctx, ...cleanedProps };
+  }, [cleanedProps, ctx]);
 }
diff --git a/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx 
b/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx
index a25366bd..a71f11c5 100644
--- a/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx
@@ -169,7 +169,7 @@ export function InputBase({
     } else {
       fcs.onEmpty();
     }
-  }, [value]);
+  }, [value, fcs]);
 
   const handleFocus = (event: JSX.TargetedFocusEvent<EventTarget>): void => {
     // Fix a bug with IE11 where the focus/blur events are triggered
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts 
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index 67b293ec..67779f08 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of TALER
  (C) 2017 INRIA
diff --git 
a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts 
b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts
index 13ce322e..e6e699ce 100644
--- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts
+++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of GNU Taler
  (C) 2021 Taler Systems S.A.
diff --git 
a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx 
b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
index a549bf59..9d7a692a 100644
--- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of GNU Taler
  (C) 2021 Taler Systems S.A.
diff --git 
a/packages/taler-wallet-webextension/src/wallet/DepositPage.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/DepositPage.stories.tsx
index cadd0c86..edc2f971 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.stories.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of GNU Taler
  (C) 2021 Taler Systems S.A.
diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
index 375a03f8..335dfd3c 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of TALER
  (C) 2016 GNUnet e.V.
@@ -162,7 +163,7 @@ export function useComponentState(
     onCalculateFee(selectedAccount, parsedAmount).then((result) => {
       setFee(result);
     });
-  }, [amount]);
+  }, [amount, selectedAccount, parsedAmount, onCalculateFee]);
 
   const bs = balances.filter((b) => b.available.startsWith(currency));
   const balance =
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx 
b/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
index ce1bcbeb..ad8cb7db 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
@@ -64,7 +64,7 @@ function useEndpointStatus<T>(
       }
     }, 500);
     setHandler(h);
-  }, [value]);
+  }, [value, setHandler, handler, onVerify]);
 
   return {
     error: dirty ? error : undefined,
diff --git a/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
index e3a5b9cb..ed4a91f1 100644
--- a/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
 /*
  This file is part of GNU Taler
  (C) 2021 Taler Systems S.A.
@@ -112,7 +113,7 @@ export function SetUrlView({
       setUrlError(true);
       setName(undefined);
     }
-  }, [value]);
+  }, [onVerify, value]);
   return (
     <Fragment>
       <section>
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index 02342063..7401fd4f 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -40,7 +40,6 @@ import {
   Wallet,
   WalletStoresV1
 } from "@gnu-taler/taler-wallet-core";
-import { VNode } from "preact";
 import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory.js";
 import { BrowserHttpLib } from "./browserHttpLib.js";
 import { getReadRequestPermissions } from "./permissions.js";

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]