diff options
author | Sebastian <sebasjm@gmail.com> | 2021-11-24 17:38:39 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2021-11-24 17:38:39 -0300 |
commit | f49df12b441a2bd06520df42ddd41fc42f639147 (patch) | |
tree | 13a3f9a5cecb5df234ceec1149bd794b2f03ea73 /packages/anastasis-webui/src/hooks | |
parent | 668c0430c204c1233fc266b723ed1be308d5f3f1 (diff) | |
download | wallet-core-f49df12b441a2bd06520df42ddd41fc42f639147.tar.xz |
restore and save session
Diffstat (limited to 'packages/anastasis-webui/src/hooks')
-rw-r--r-- | packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts b/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts index 1ef28a168..7b101baa0 100644 --- a/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts +++ b/packages/anastasis-webui/src/hooks/use-anastasis-reducer.ts @@ -107,6 +107,8 @@ export interface AnastasisReducerApi { reset: () => void; back: () => Promise<void>; transition(action: string, args: any): Promise<void>; + exportState: () => string; + importState: (s: string) => void; /** * Run multiple reducer steps in a transaction without * affecting the UI-visible transition state in-between. @@ -129,7 +131,7 @@ function storageSet(key: string, value: any): void { } } -function restoreState(): any { +function getStateFromStorage(): any { let state: any; try { const s = storageGet("anastasisReducerState"); @@ -148,7 +150,7 @@ function restoreState(): any { export function useAnastasisReducer(): AnastasisReducerApi { const [anastasisState, setAnastasisStateInternal] = useState<AnastasisState>( () => ({ - reducerState: restoreState(), + reducerState: getStateFromStorage(), currentError: undefined, }), ); @@ -165,7 +167,7 @@ export function useAnastasisReducer(): AnastasisReducerApi { setAnastasisStateInternal(newState); }; - async function doTransition(action: string, args: any) { + async function doTransition(action: string, args: any): Promise<void> { console.log("reducing with", action, args); let s: ReducerState; if (remoteReducer) { @@ -210,6 +212,18 @@ export function useAnastasisReducer(): AnastasisReducerApi { }); } }, + exportState() { + const state = getStateFromStorage() + return JSON.stringify(state) + }, + importState(s: string) { + try { + const state = JSON.parse(s) + setAnastasisState({ reducerState: state, currentError: undefined }) + } catch (e) { + throw Error('could not restore the state') + } + }, async startRecover() { let s: ReducerState; if (remoteReducer) { @@ -287,7 +301,7 @@ export function useAnastasisReducer(): AnastasisReducerApi { } class ReducerTxImpl implements ReducerTransactionHandle { - constructor(public transactionState: ReducerState) {} + constructor(public transactionState: ReducerState) { } async transition(action: string, args: any): Promise<ReducerState> { let s: ReducerState; if (remoteReducer) { |