taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 73dabdf43a55849ac5ca571f938d5dd847b03404
parent 5b1f779b1289c4f195085b08218d92cfdb08848e
Author: Florian Dold <florian@dold.me>
Date:   Wed,  8 Dec 2021 11:03:50 +0100

webextension: fix useEffect dependency tracking

Diffstat:
Mpackages/taler-wallet-webextension/src/cta/Pay.tsx | 5++++-
Mpackages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts | 9++++++---
2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/packages/taler-wallet-webextension/src/cta/Pay.tsx b/packages/taler-wallet-webextension/src/cta/Pay.tsx @@ -134,6 +134,8 @@ export function PayPage({ const foundAmount = foundBalance ? Amounts.parseOrThrow(foundBalance.available) : undefined; + // We use a string here so that dependency tracking for useEffect works properly + const foundAmountStr = foundAmount ? Amounts.stringify(foundAmount) : undefined; useEffect(() => { if (!talerPayUri) return; @@ -142,6 +144,7 @@ export function PayPage({ const p = await wxApi.preparePay(talerPayUri); setPayStatus(p); } catch (e) { + console.log("Got error while trying to pay", e); if (e instanceof OperationFailedError) { setPayErrMsg(e); } @@ -151,7 +154,7 @@ export function PayPage({ } }; doFetch(); - }, [talerPayUri, foundAmount]); + }, [talerPayUri, foundAmountStr]); if (!talerPayUri) { return <span>missing pay uri</span>; diff --git a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts @@ -13,7 +13,7 @@ You should have received a copy of the GNU General Public License along with TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ -import { ExchangesListRespose, NotificationType } from "@gnu-taler/taler-util"; +import { NotificationType } from "@gnu-taler/taler-util"; import { useEffect, useState } from "preact/hooks"; import * as wxApi from "../wxApi"; @@ -30,7 +30,10 @@ interface HookError { export type HookResponse<T> = HookOk<T> | HookError | undefined; //"withdraw-group-finished" -export function useAsyncAsHook<T>(fn: () => Promise<T>, updateOnNotification?: Array<NotificationType>): HookResponse<T> { +export function useAsyncAsHook<T>( + fn: () => Promise<T>, + updateOnNotification?: Array<NotificationType>, +): HookResponse<T> { const [result, setHookResponse] = useState<HookResponse<T>>(undefined); useEffect(() => { async function doAsync() { @@ -46,7 +49,7 @@ export function useAsyncAsHook<T>(fn: () => Promise<T>, updateOnNotification?: A doAsync(); if (updateOnNotification && updateOnNotification.length > 0) { return wxApi.onUpdateNotification(updateOnNotification, () => { - doAsync() + doAsync(); }); } }, []);