aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-11-04 17:43:24 +0100
committerFlorian Dold <florian@dold.me>2021-11-04 17:43:36 +0100
commit4ebeb00243598f7a0caf79ef405134b14f68400e (patch)
treed235701a6fc6e43d85f7c06ba892c13ff6951c6f
parentc2d8dd76c3c9db446d99cf7a581be757a58b9bdc (diff)
anastasis-webui: return promises in anastasis reducer hook
-rw-r--r--packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts66
1 files changed, 36 insertions, 30 deletions
diff --git a/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts b/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts
index 72594749d..1ef28a168 100644
--- a/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts
+++ b/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts
@@ -1,5 +1,12 @@
import { TalerErrorCode } from "@gnu-taler/taler-util";
-import { BackupStates, getBackupStartState, getRecoveryStartState, RecoveryStates, reduceAction, ReducerState } from "anastasis-core";
+import {
+ BackupStates,
+ getBackupStartState,
+ getRecoveryStartState,
+ RecoveryStates,
+ reduceAction,
+ ReducerState,
+} from "anastasis-core";
import { useState } from "preact/hooks";
const reducerBaseUrl = "http://localhost:5000/";
@@ -98,13 +105,15 @@ export interface AnastasisReducerApi {
startBackup: () => void;
startRecover: () => void;
reset: () => void;
- back: () => void;
- transition(action: string, args: any): void;
+ back: () => Promise<void>;
+ transition(action: string, args: any): Promise<void>;
/**
* Run multiple reducer steps in a transaction without
* affecting the UI-visible transition state in-between.
*/
- runTransaction(f: (h: ReducerTransactionHandle) => Promise<void>): void;
+ runTransaction(
+ f: (h: ReducerTransactionHandle) => Promise<void>,
+ ): Promise<void>;
}
function storageGet(key: string): string | null {
@@ -222,9 +231,9 @@ export function useAnastasisReducer(): AnastasisReducerApi {
}
},
transition(action: string, args: any) {
- doTransition(action, args);
+ return doTransition(action, args);
},
- back() {
+ async back() {
const reducerState = anastasisState.reducerState;
if (!reducerState) {
return;
@@ -239,7 +248,7 @@ export function useAnastasisReducer(): AnastasisReducerApi {
reducerState: undefined,
});
} else {
- doTransition("back", {});
+ await doTransition("back", {});
}
},
dismissError() {
@@ -252,30 +261,27 @@ export function useAnastasisReducer(): AnastasisReducerApi {
reducerState: undefined,
});
},
- runTransaction(f) {
- async function run() {
- const txHandle = new ReducerTxImpl(anastasisState.reducerState!);
- try {
- await f(txHandle);
- } catch (e) {
- console.log("exception during reducer transaction", e);
- }
- const s = txHandle.transactionState;
- console.log("transaction finished, new state", s);
- if (s.code !== undefined) {
- setAnastasisState({
- ...anastasisState,
- currentError: txHandle.transactionState,
- });
- } else {
- setAnastasisState({
- ...anastasisState,
- reducerState: txHandle.transactionState,
- currentError: undefined,
- });
- }
+ async runTransaction(f) {
+ const txHandle = new ReducerTxImpl(anastasisState.reducerState!);
+ try {
+ await f(txHandle);
+ } catch (e) {
+ console.log("exception during reducer transaction", e);
+ }
+ const s = txHandle.transactionState;
+ console.log("transaction finished, new state", s);
+ if (s.code !== undefined) {
+ setAnastasisState({
+ ...anastasisState,
+ currentError: txHandle.transactionState,
+ });
+ } else {
+ setAnastasisState({
+ ...anastasisState,
+ reducerState: txHandle.transactionState,
+ currentError: undefined,
+ });
}
- run();
},
};
}