From bf3e011183853452840673978689a21ea6644947 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 14 Apr 2022 16:35:00 -0300 Subject: check moving back or forw --- packages/anastasis-webui/src/pages/home/index.tsx | 64 ++++++++++++----------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/packages/anastasis-webui/src/pages/home/index.tsx b/packages/anastasis-webui/src/pages/home/index.tsx index cf31d68eb..7e7a00062 100644 --- a/packages/anastasis-webui/src/pages/home/index.tsx +++ b/packages/anastasis-webui/src/pages/home/index.tsx @@ -92,39 +92,39 @@ function ErrorBoundary(props: { return
{props.children}
; } +let currentHistoryId = 0; + export function AnastasisClientFrame(props: AnastasisClientFrameProps): VNode { const reducer = useAnastasisContext(); if (!reducer) { return

Fatal: Reducer must be in context.

; } - const next = async (): Promise => { + const doBack = async (): Promise => { + history.back(); + + if (props.onBack) { + await props.onBack(); + } + }; + const doNext = async (): Promise => { + try { + const nextId: number = + (history.state && typeof history.state.id === "number" + ? history.state.id + : 0) + 1; + + currentHistoryId = nextId; + + history.pushState({ id: nextId }, "unused", `#${nextId}`); + } catch (e) { + console.log(e); + } + if (props.onNext) { await props.onNext(); } else { await reducer.transition("next", {}); } - reducer.currentReducerState?.reducer_type; - - const stateName = !reducer.currentReducerState - ? "not-defined" - : reducer.currentReducerState.reducer_type === "backup" - ? `#backup-${reducer.currentReducerState.backup_state}` - : reducer.currentReducerState.reducer_type === "recovery" - ? `recovery-${reducer.currentReducerState.recovery_state}` - : reducer.currentReducerState.reducer_type === "error" - ? `error-${reducer.currentReducerState.code}` - : "unknown"; - - const id: number = - typeof history.state.id === "number" ? history.state.id : 1; - - history.pushState( - { - id: id + 1, - }, - "unused", - stateName, - ); }; const handleKeyPress = ( e: h.JSX.TargetedKeyboardEvent, @@ -133,9 +133,14 @@ export function AnastasisClientFrame(props: AnastasisClientFrameProps): VNode { // FIXME: By default, "next" action should be executed here }; - const browserOnBackButton = useCallback((ev: PopStateEvent) => { - console.log("BACK BACK", JSON.stringify(ev.state)); - reducer.back(); + const browserOnBackButton = useCallback(async (ev: PopStateEvent) => { + //check if we are going back or forward + if (!ev.state || ev.state.id === 0 || ev.state.id < currentHistoryId) { + await reducer.back(); + } else { + await reducer.transition("next", {}); + } + // reducer return false; }, []); @@ -164,16 +169,13 @@ export function AnastasisClientFrame(props: AnastasisClientFrameProps): VNode { justifyContent: "space-between", }} > - Next -- cgit v1.2.3