import { BackupStates, RecoveryStates, ReducerStateBackup, ReducerStateRecovery } from "anastasis-core"; import { ComponentChildren, Fragment, FunctionalComponent, h, VNode } from "preact"; import { useErrorBoundary} from "preact/hooks"; import { Menu } from "../../components/menu"; import { AnastasisProvider, useAnastasisContext } from "../../context/anastasis"; import { AnastasisReducerApi, useAnastasisReducer } from "../../hooks/use-anastasis-reducer"; import { AttributeEntryScreen } from "./AttributeEntryScreen"; import { AuthenticationEditorScreen } from "./AuthenticationEditorScreen"; import { BackupFinishedScreen } from "./BackupFinishedScreen"; import { ChallengeOverviewScreen } from "./ChallengeOverviewScreen"; import { ChallengePayingScreen } from "./ChallengePayingScreen"; import { ContinentSelectionScreen } from "./ContinentSelectionScreen"; import { CountrySelectionScreen } from "./CountrySelectionScreen"; import { PoliciesPayingScreen } from "./PoliciesPayingScreen"; import { RecoveryFinishedScreen } from "./RecoveryFinishedScreen"; import { ReviewPoliciesScreen } from "./ReviewPoliciesScreen"; import { SecretEditorScreen } from "./SecretEditorScreen"; import { SecretSelectionScreen } from "./SecretSelectionScreen"; import { SolveScreen } from "./SolveScreen"; import { StartScreen } from "./StartScreen"; import { TruthsPayingScreen } from "./TruthsPayingScreen"; function isBackup(reducer: AnastasisReducerApi): boolean { return !!reducer.currentReducerState?.backup_state; } export function withProcessLabel( reducer: AnastasisReducerApi, text: string, ): string { if (isBackup(reducer)) { return `Backup: ${text}`; } return `Recovery: ${text}`; } interface AnastasisClientFrameProps { onNext?(): void; title: string; children: ComponentChildren; /** * Should back/next buttons be provided? */ hideNav?: boolean; /** * Hide only the "next" button. */ hideNext?: boolean; } function ErrorBoundary(props: { reducer: AnastasisReducerApi; children: ComponentChildren; }): VNode { const [error, resetError] = useErrorBoundary((error) => console.log("got error", error), ); if (error) { return (
Error:
{error.stack}
Fatal: Reducer must be in context.
; } const next = (): void => { if (props.onNext) { props.onNext(); } else { reducer.transition("next", {}); } }; const handleKeyPress = ( e: h.JSX.TargetedKeyboardEventFatal: Reducer must be in context.
; } const state = reducer.currentReducerState; if (!state) { returnBug: Unknown state.
Error: {JSON.stringify(reducer.currentError)}