diff --git a/web/src/layouts/HomeLayout.tsx b/web/src/layouts/RootLayout.tsx similarity index 78% rename from web/src/layouts/HomeLayout.tsx rename to web/src/layouts/RootLayout.tsx index fefedc2c..e0cf853e 100644 --- a/web/src/layouts/HomeLayout.tsx +++ b/web/src/layouts/RootLayout.tsx @@ -10,23 +10,33 @@ import useResponsiveWidth from "@/hooks/useResponsiveWidth"; import Loading from "@/pages/Loading"; import { Routes } from "@/router"; -const HomeLayout = () => { +const RootLayout = () => { const location = useLocation(); const { sm } = useResponsiveWidth(); const currentUser = useCurrentUser(); + const [lastVisited] = useLocalStorage("lastVisited", "/home"); const [collapsed, setCollapsed] = useLocalStorage("navigation-collapsed", false); const [initialized, setInitialized] = useState(false); - // Redirect to explore page if not logged in. useEffect(() => { - if ( - !currentUser && - ([Routes.HOME, Routes.TIMELINE, Routes.RESOURCES, Routes.INBOX, Routes.ARCHIVED, Routes.SETTING] as string[]).includes( - location.pathname, - ) - ) { - window.location.href = Routes.EXPLORE; - return; + if (!currentUser) { + if ( + ([Routes.ROOT, Routes.HOME, Routes.TIMELINE, Routes.RESOURCES, Routes.INBOX, Routes.ARCHIVED, Routes.SETTING] as string[]).includes( + location.pathname, + ) + ) { + window.location.href = Routes.EXPLORE; + return; + } + } else { + if (location.pathname === Routes.ROOT) { + if (lastVisited && ([Routes.HOME, Routes.TIMELINE] as string[]).includes(lastVisited)) { + window.location.href = lastVisited; + } else { + window.location.href = Routes.HOME; + } + return; + } } setInitialized(true); @@ -75,4 +85,4 @@ const HomeLayout = () => { ); }; -export default HomeLayout; +export default RootLayout; diff --git a/web/src/pages/RootRedirector.tsx b/web/src/pages/RootRedirector.tsx deleted file mode 100644 index d1632b50..00000000 --- a/web/src/pages/RootRedirector.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { useEffect } from "react"; -import useLocalStorage from "react-use/lib/useLocalStorage"; -import useNavigateTo from "@/hooks/useNavigateTo"; - -const RootRedirector: React.FC = () => { - const [lastVisited] = useLocalStorage("lastVisited", "/home"); - const navigateTo = useNavigateTo(); - - useEffect(() => { - if (lastVisited === "/home" || lastVisited === "/timeline") { - navigateTo(lastVisited); - } else { - navigateTo("/home"); - } - }, []); - - return <>; -}; - -export default RootRedirector; diff --git a/web/src/router/index.tsx b/web/src/router/index.tsx index 58bc443b..418b2183 100644 --- a/web/src/router/index.tsx +++ b/web/src/router/index.tsx @@ -1,6 +1,6 @@ import { createBrowserRouter } from "react-router-dom"; import App from "@/App"; -import HomeLayout from "@/layouts/HomeLayout"; +import RootLayout from "@/layouts/RootLayout"; import SuspenseWrapper from "@/layouts/SuspenseWrapper"; import About from "@/pages/About"; import Archived from "@/pages/Archived"; @@ -12,7 +12,6 @@ import MemoDetail from "@/pages/MemoDetail"; import NotFound from "@/pages/NotFound"; import PermissionDenied from "@/pages/PermissionDenied"; import Resources from "@/pages/Resources"; -import RootRedirector from "@/pages/RootRedirector"; import Setting from "@/pages/Setting"; import SignIn from "@/pages/SignIn"; import SignUp from "@/pages/SignUp"; @@ -56,13 +55,9 @@ const router = createBrowserRouter([ ], }, { - path: "/", - element: , + path: Routes.ROOT, + element: , children: [ - { - path: Routes.ROOT, - element: , - }, { path: Routes.HOME, element: ,