fix: start the session warning's focus on the button that keeps users signed in

This commit is contained in:
Linus Rath
2026-10-28 03:06:28 +01:00
parent af47856cde
commit 4821227415
2 changed files with 8 additions and 4 deletions
@@ -96,6 +96,8 @@ describe('session timeout guard', () => {
expect(screen.queryByText('idle_title')).toBeNull();
await advance(1 * SECOND);
expect(screen.getByText('idle_title')).toBeTruthy();
// Enter on the warning keeps the user signed in.
expect(document.activeElement?.textContent).toBe('stay');
fireEvent.click(screen.getByText('stay'));
expect(screen.queryByText('idle_title')).toBeNull();
@@ -72,11 +72,13 @@ export function SessionTimeoutDialog({ mode, deadline, maxHours, onStay, onDismi
</div>
</div>
{mode !== "ending" && (
<div className="flex flex-wrap items-center justify-end gap-3 px-6 pb-6">
<Button variant="outline" onClick={onSignOut}>{t("sign_out_now")}</Button>
// The safe answer comes first, so the focus trap starts on it and
// Enter keeps the user signed in; row-reverse shows it on the right.
<div className="flex flex-row-reverse flex-wrap items-center justify-start gap-3 px-6 pb-6">
{mode === "idle"
? <Button onClick={onStay} autoFocus>{t("stay")}</Button>
: <Button onClick={onDismiss} autoFocus>{t("dismiss")}</Button>}
? <Button onClick={onStay}>{t("stay")}</Button>
: <Button onClick={onDismiss}>{t("dismiss")}</Button>}
<Button variant="outline" onClick={onSignOut}>{t("sign_out_now")}</Button>
</div>
)}
</div>