From 32318a80f48bf52ca7823a0c055164f43bdaf1d6 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 27 Oct 2021 15:13:35 -0300 Subject: working version with improved ui --- .../anastasis-webui/src/pages/home/SolveScreen.tsx | 121 ++++++++++++++++++--- 1 file changed, 106 insertions(+), 15 deletions(-) (limited to 'packages/anastasis-webui/src/pages/home/SolveScreen.tsx') diff --git a/packages/anastasis-webui/src/pages/home/SolveScreen.tsx b/packages/anastasis-webui/src/pages/home/SolveScreen.tsx index 05ae50b48..077726e02 100644 --- a/packages/anastasis-webui/src/pages/home/SolveScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/SolveScreen.tsx @@ -1,28 +1,36 @@ -import { h, VNode } from "preact"; +import { Fragment, h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { AnastasisClientFrame } from "."; import { ChallengeFeedback, ChallengeInfo } from "../../../../anastasis-core/lib"; +import { TextInput } from "../../components/fields/TextInput"; import { useAnastasisContext } from "../../context/anastasis"; -import { SolveEmailEntry } from "./SolveEmailEntry"; -import { SolvePostEntry } from "./SolvePostEntry"; -import { SolveQuestionEntry } from "./SolveQuestionEntry"; -import { SolveSmsEntry } from "./SolveSmsEntry"; -import { SolveUnsupportedEntry } from "./SolveUnsupportedEntry"; export function SolveScreen(): VNode { const reducer = useAnastasisContext() - + const [answer, setAnswer] = useState(""); + if (!reducer) { - return
no reducer in context
+ return +
no reducer in context
+
} if (!reducer.currentReducerState || reducer.currentReducerState.recovery_state === undefined) { - return
invalid state
+ return +
invalid state
+
} if (!reducer.currentReducerState.recovery_information) { - return
no recovery information found
+ return +
no recovery information found
+
} if (!reducer.currentReducerState.selected_challenge_uuid) { - return
no selected uuid
+ return +
no selected uuid
+
} + const chArr = reducer.currentReducerState.recovery_information.challenges; const challengeFeedback = reducer.currentReducerState.challenge_feedback ?? {}; const selectedUuid = reducer.currentReducerState.selected_challenge_uuid; @@ -39,16 +47,99 @@ export function SolveScreen(): VNode { email: SolveEmailEntry, post: SolvePostEntry, }; - const SolveDialog = dialogMap[selectedChallenge?.type] ?? SolveUnsupportedEntry; + const SolveDialog = selectedChallenge === undefined ? SolveUndefinedEntry : dialogMap[selectedChallenge.type] ?? SolveUnsupportedEntry; + + function onNext(): void { + reducer?.transition("solve_challenge", { answer }) + } + function onCancel(): void { + reducer?.back() + } + + return ( - + + + +
+ + +
+
); } export interface SolveEntryProps { + id: string; challenge: ChallengeInfo; feedback?: ChallengeFeedback; + answer: string; + setAnswer: (s:string) => void; } +function SolveSmsEntry({ challenge, answer, setAnswer }: SolveEntryProps): VNode { + return ( +

An sms has been sent to "{challenge.instructions}". Type the code below

+ +
+ ); +} +function SolveQuestionEntry({ challenge, answer, setAnswer }: SolveEntryProps): VNode { + return ( + +

Type the answer to the following question:

+
+        {challenge.instructions}
+      
+ +
+ ); +} + +function SolvePostEntry({ challenge, answer, setAnswer }: SolveEntryProps): VNode { + return ( + +

instruction for post type challenge "{challenge.instructions}"

+ +
+ ); +} + +function SolveEmailEntry({ challenge, answer, setAnswer }: SolveEntryProps): VNode { + return ( + +

An email has been sent to "{challenge.instructions}". Type the code below

+ +
+ ); +} + +function SolveUnsupportedEntry(props: SolveEntryProps): VNode { + return ( + +

+ The challenge selected is not supported for this UI. Please update this version or try using another policy. +

+

+ Challenge type: {props.challenge.type} +

+
+ ); +} +function SolveUndefinedEntry(props: SolveEntryProps): VNode { + return ( + +

+ There is no challenge information for id "{props.id}". Try resetting the recovery session. +

+
+ ); +} -- cgit v1.2.3