diff options
author | Sebastian <sebasjm@gmail.com> | 2022-03-30 14:36:24 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-03-30 14:36:24 -0300 |
commit | 89435696f9a28316ab3dc5ef7c73776d092da89c (patch) | |
tree | 6ead695277e252796dbf29dc1c5ee0023be90e99 /packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts | |
parent | 8642f8edcd1aa8fe18c50d534f485debf1df01c9 (diff) | |
download | wallet-core-89435696f9a28316ab3dc5ef7c73776d092da89c.tar.xz |
useAsync use an optional deps for callback, most of the time it just need to be rendered once
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts index 4e86c5ee5..b2d71874f 100644 --- a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts +++ b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts @@ -17,7 +17,7 @@ import { NotificationType, TalerErrorDetail } from "@gnu-taler/taler-util"; import { TalerError } from "@gnu-taler/taler-wallet-core"; -import { useEffect, useState } from "preact/hooks"; +import { useCallback, useEffect, useMemo, useState } from "preact/hooks"; import * as wxApi from "../wxApi.js"; interface HookOk<T> { @@ -41,16 +41,22 @@ export interface HookOperationalError { export type HookResponse<T> = HookOk<T> | HookError | undefined; -//"withdraw-group-finished" export function useAsyncAsHook<T>( fn: () => Promise<T>, updateOnNotification?: Array<NotificationType>, + deps?: any[], ): HookResponse<T> { + + const args = useMemo(() => ({ + fn, updateOnNotification + // eslint-disable-next-line react-hooks/exhaustive-deps + }), deps || []) const [result, setHookResponse] = useState<HookResponse<T>>(undefined); + useEffect(() => { async function doAsync(): Promise<void> { try { - const response = await fn(); + const response = await args.fn(); setHookResponse({ hasError: false, response }); } catch (e) { if (e instanceof TalerError) { @@ -69,11 +75,11 @@ export function useAsyncAsHook<T>( } } doAsync(); - if (updateOnNotification && updateOnNotification.length > 0) { - return wxApi.onUpdateNotification(updateOnNotification, () => { + if (args.updateOnNotification && args.updateOnNotification.length > 0) { + return wxApi.onUpdateNotification(args.updateOnNotification, () => { doAsync(); }); } - }, [fn, updateOnNotification]); + }, [args]); return result; } |