From f817371e336564d71639a3f8f7ac956cbbd53df5 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 22 Apr 2024 12:55:27 -0300 Subject: fix #8423 --- packages/challenger-ui/src/Routing.tsx | 2 ++ .../challenger-ui/src/pages/AnswerChallenge.tsx | 22 +++++++++++++++++++++- packages/challenger-ui/src/pages/AskChallenge.tsx | 4 ++++ 3 files changed, 27 insertions(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/challenger-ui/src/Routing.tsx b/packages/challenger-ui/src/Routing.tsx index 6711e4cae..6166f159a 100644 --- a/packages/challenger-ui/src/Routing.tsx +++ b/packages/challenger-ui/src/Routing.tsx @@ -200,6 +200,7 @@ function PublicRounting(): VNode { }} > { @@ -233,6 +234,7 @@ function PublicRounting(): VNode { }} > { diff --git a/packages/challenger-ui/src/pages/AnswerChallenge.tsx b/packages/challenger-ui/src/pages/AnswerChallenge.tsx index 5e7973b3d..73a79c51f 100644 --- a/packages/challenger-ui/src/pages/AnswerChallenge.tsx +++ b/packages/challenger-ui/src/pages/AnswerChallenge.tsx @@ -36,11 +36,12 @@ export const EMAIL_REGEX = /^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$/; type Props = { nonce: string; + focus?: boolean; onComplete: () => void; routeAsk: RouteDefinition<{ nonce: string }>; }; -export function AnswerChallenge({ nonce, onComplete, routeAsk }: Props): VNode { +export function AnswerChallenge({ focus, nonce, onComplete, routeAsk }: Props): VNode { const { lib } = useChallengerApiContext(); const { i18n } = useTranslationContext(); const { state, accepted, completed } = useSessionState(); @@ -189,6 +190,8 @@ export function AnswerChallenge({ nonce, onComplete, routeAsk }: Props): VNode {
{ + element.focus({ preventScroll: true }); + element.scrollIntoView({ + behavior: "smooth", + block: "center", + inline: "center", + }); + }, 100); + } +} + export function undefinedIfEmpty(obj: T): T | undefined { return Object.keys(obj).some( (k) => (obj as Record)[k] !== undefined, diff --git a/packages/challenger-ui/src/pages/AskChallenge.tsx b/packages/challenger-ui/src/pages/AskChallenge.tsx index aaca51db7..30b50d707 100644 --- a/packages/challenger-ui/src/pages/AskChallenge.tsx +++ b/packages/challenger-ui/src/pages/AskChallenge.tsx @@ -27,6 +27,7 @@ import { import { Fragment, VNode, h } from "preact"; import { useState } from "preact/hooks"; import { useSessionState } from "../hooks/session.js"; +import { doAutoFocus } from "./AnswerChallenge.js"; type Form = { email: string; @@ -37,12 +38,14 @@ type Props = { nonce: string; onSendSuccesful: () => void; routeSolveChallenge: RouteDefinition<{ nonce: string }>; + focus?: boolean; }; export function AskChallenge({ nonce, onSendSuccesful, routeSolveChallenge, + focus, }: Props): VNode { const { state, accepted, completed } = useSessionState(); const status = state?.lastStatus; @@ -162,6 +165,7 @@ export function AskChallenge({ type="email" name="email" id="email" + ref={focus ? doAutoFocus : undefined} maxLength={512} autocomplete="email" value={email} -- cgit v1.2.3