aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/test-utils.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-09-20 16:04:51 -0300
committerSebastian <sebasjm@gmail.com>2022-09-20 16:05:59 -0300
commit52ec740c825d4e94fd59ef0a5cd8e8b73f4dfc06 (patch)
treedd65f9852005097c2cd8975b14ccbd198bef57e8 /packages/taler-wallet-webextension/src/test-utils.ts
parenta5525eab1e96d5b08fbb6442275b1e92f7f8d806 (diff)
downloadwallet-core-52ec740c825d4e94fd59ef0a5cd8e8b73f4dfc06.tar.xz
new compose feature: sub-states
implemented in withdraw page, WIP
Diffstat (limited to 'packages/taler-wallet-webextension/src/test-utils.ts')
-rw-r--r--packages/taler-wallet-webextension/src/test-utils.ts23
1 files changed, 15 insertions, 8 deletions
diff --git a/packages/taler-wallet-webextension/src/test-utils.ts b/packages/taler-wallet-webextension/src/test-utils.ts
index eebfa3612..7e9c5670e 100644
--- a/packages/taler-wallet-webextension/src/test-utils.ts
+++ b/packages/taler-wallet-webextension/src/test-utils.ts
@@ -82,31 +82,38 @@ export function renderNodeOrBrowser(Component: any, args: any): void {
document.body.removeChild(div);
}
}
+type RecursiveState<S> = S | (() => RecursiveState<S>)
interface Mounted<T> {
unmount: () => void;
- getLastResultOrThrow: () => T;
+ getLastResultOrThrow: () => Exclude<T, VoidFunction>;
assertNoPendingUpdate: () => void;
waitNextUpdate: (s?: string) => Promise<void>;
}
const isNode = typeof window === "undefined";
-export function mountHook<T>(
- callback: () => T,
+export function mountHook<T extends object>(
+ callback: () => RecursiveState<T>,
Context?: ({ children }: { children: any }) => VNode,
): Mounted<T> {
// const result: { current: T | null } = {
// current: null
// }
- let lastResult: T | Error | null = null;
+ let lastResult: Exclude<T, VoidFunction> | Error | null = null;
const listener: Array<() => void> = [];
// component that's going to hold the hook
function Component(): VNode {
try {
- lastResult = callback();
+ let componentOrResult = callback()
+ while (typeof componentOrResult === "function") {
+ componentOrResult = componentOrResult();
+ }
+ //typecheck fails here
+ const l: Exclude<T, () => void> = componentOrResult as any
+ lastResult = l;
} catch (e) {
if (e instanceof Error) {
lastResult = e;
@@ -157,13 +164,13 @@ export function mountHook<T>(
}
}
- function getLastResult(): T | Error | null {
- const copy = lastResult;
+ function getLastResult(): Exclude<T | Error | null, VoidFunction> {
+ const copy: Exclude<T | Error | null, VoidFunction> = lastResult;
lastResult = null;
return copy;
}
- function getLastResultOrThrow(): T {
+ function getLastResultOrThrow(): Exclude<T, VoidFunction> {
const r = getLastResult();
if (r instanceof Error) throw r;
if (!r) throw Error("there was no last result");