From c364b8682c1900b3904cbbcc4ef91350951faa26 Mon Sep 17 00:00:00 2001 From: Stavros Date: Sun, 26 Apr 2026 18:03:25 +0300 Subject: [PATCH] feat: preserve login params in forgot password screen (#819) --- frontend/src/components/auth/login-form.tsx | 7 +++++++ frontend/src/lib/i18n/locales/en-US.json | 3 ++- frontend/src/lib/i18n/locales/en.json | 3 ++- frontend/src/pages/forgot-password-page.tsx | 12 ++++++++---- frontend/src/pages/login-page.tsx | 4 ++++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/auth/login-form.tsx b/frontend/src/components/auth/login-form.tsx index 0255ed9..a0901a1 100644 --- a/frontend/src/components/auth/login-form.tsx +++ b/frontend/src/components/auth/login-form.tsx @@ -17,6 +17,7 @@ interface Props { onSubmit: (data: LoginSchema) => void; loading?: boolean; formId?: string; + params?: string; } export const LoginForm = (props: Props) => { @@ -71,6 +72,12 @@ export const LoginForm = (props: Props) => { { + e.preventDefault(); + window.location.replace( + `/forgot-password${props.params ? `${props.params}` : ""}`, + ); + }} className="text-muted-foreground hover:text-muted-foreground/80 text-sm absolute right-0 bottom-[2.565rem]" // 2.565 is *just* perfect > {t("forgotPasswordTitle")} diff --git a/frontend/src/lib/i18n/locales/en-US.json b/frontend/src/lib/i18n/locales/en-US.json index 5a9c9b0..0a5a76c 100644 --- a/frontend/src/lib/i18n/locales/en-US.json +++ b/frontend/src/lib/i18n/locales/en-US.json @@ -79,5 +79,6 @@ "profileScopeName": "Profile", "profileScopeDescription": "Allows the app to access your profile information.", "groupsScopeName": "Groups", - "groupsScopeDescription": "Allows the app to access your group information." + "groupsScopeDescription": "Allows the app to access your group information.", + "backToLoginButton": "Back to login" } diff --git a/frontend/src/lib/i18n/locales/en.json b/frontend/src/lib/i18n/locales/en.json index 5a9c9b0..0a5a76c 100644 --- a/frontend/src/lib/i18n/locales/en.json +++ b/frontend/src/lib/i18n/locales/en.json @@ -79,5 +79,6 @@ "profileScopeName": "Profile", "profileScopeDescription": "Allows the app to access your profile information.", "groupsScopeName": "Groups", - "groupsScopeDescription": "Allows the app to access your group information." + "groupsScopeDescription": "Allows the app to access your group information.", + "backToLoginButton": "Back to login" } diff --git a/frontend/src/pages/forgot-password-page.tsx b/frontend/src/pages/forgot-password-page.tsx index 3b6c3a7..7d47d02 100644 --- a/frontend/src/pages/forgot-password-page.tsx +++ b/frontend/src/pages/forgot-password-page.tsx @@ -10,12 +10,13 @@ import { Button } from "@/components/ui/button"; import { useAppContext } from "@/context/app-context"; import { useTranslation } from "react-i18next"; import Markdown from "react-markdown"; -import { useNavigate } from "react-router"; +import { useLocation } from "react-router"; export const ForgotPasswordPage = () => { const { forgotPasswordMessage } = useAppContext(); const { t } = useTranslation(); - const navigate = useNavigate(); + const { search } = useLocation(); + const searchParams = new URLSearchParams(search); return ( @@ -36,10 +37,13 @@ export const ForgotPasswordPage = () => { className="w-full" variant="outline" onClick={() => { - navigate("/login"); + const eparams = searchParams.toString(); + window.location.replace( + `/login${eparams.length > 0 ? `?${eparams}` : ""}`, + ); }} > - {t("notFoundButton")} + {t("backToLoginButton")} diff --git a/frontend/src/pages/login-page.tsx b/frontend/src/pages/login-page.tsx index ea7d716..c39a0fb 100644 --- a/frontend/src/pages/login-page.tsx +++ b/frontend/src/pages/login-page.tsx @@ -264,6 +264,10 @@ export const LoginPage = () => { onSubmit={(values) => loginMutate(values)} loading={loginIsPending || oauthIsPending} formId={formId} + params={(() => { + const eparams = searchParams.toString(); + return eparams.length > 0 ? `?${eparams}` : ""; + })()} /> )} {providers.length == 0 && (