From d8e445bf43f39fd8dc02624dbdd04e4237583aad Mon Sep 17 00:00:00 2001 From: Diego Escobedo Date: Sat, 25 Mar 2023 15:13:08 -0700 Subject: [PATCH] redirect after login to original route (#739) (#759) Co-authored-by: Aashish Upadhyay <81024263+Aashish-Upadhyay-101@users.noreply.github.com> Co-authored-by: mnida --- frontend/src/App.tsx | 6 +++++- frontend/src/pages/Login.tsx | 13 ++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 64cc9b4d1..5c0053ade 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -61,7 +61,11 @@ function App() { error?.response?.status === 401 && !publicRoutes.includes(pathname) ) { - navigate("/"); + navigate("/", { + state: { + redirectTo: pathname, + }, + }); } return error; }); diff --git a/frontend/src/pages/Login.tsx b/frontend/src/pages/Login.tsx index 91dcada3d..00b0ade91 100644 --- a/frontend/src/pages/Login.tsx +++ b/frontend/src/pages/Login.tsx @@ -1,5 +1,5 @@ import React, { FC, useState } from "react"; -import { useNavigate, Link } from "react-router-dom"; +import { useNavigate, Link, useLocation } from "react-router-dom"; import { Authentication, instance } from "../api/api"; import { Card, Input, Button, Form } from "antd"; import "./Login.css"; @@ -24,7 +24,9 @@ interface LoginForm extends HTMLFormControlsCollection { interface FormElements extends HTMLFormElement { readonly elements: LoginForm; } - +interface LocationState { + redirectTo?: string; +} interface LoginProps { username?: string; password?: string; @@ -36,6 +38,7 @@ const Login: FC = (props) => { const [error, setError] = useState(""); const setUsernameToStore = useGlobalStore((state) => state.setUsername); const queryClient = useQueryClient(); + const location = useLocation(); const [isAuthenticated, setIsAuthenticated] = useState(false); const navigate = useNavigate(); @@ -48,8 +51,8 @@ const Login: FC = (props) => { setUsername(event.target.value); }; - const redirectDashboard = () => { - navigate("/dashboard"); + const redirectAfterLogin = () => { + navigate((location.state as LocationState).redirectTo!); }; const isDemo = (import.meta as any).env.VITE_IS_DEMO === "true"; @@ -79,7 +82,7 @@ const Login: FC = (props) => { cookies.set("Token", token); instance.defaults.headers.common.Authorization = `Token ${token}`; queryClient.refetchQueries(["session"]); - redirectDashboard(); + redirectAfterLogin(); }, onError: (error: QueryErrors) => { // setError(error.message);