diff --git a/app/(home-pages)/layout.tsx b/app/(home-pages)/layout.tsx
index 5e402858..13135142 100644
--- a/app/(home-pages)/layout.tsx
+++ b/app/(home-pages)/layout.tsx
@@ -1,5 +1,6 @@
import { getIdentityData } from "actions/getIdentityData";
import { EntitySetProvider } from "components/EntitySetProvider";
+import { NavStateTracker } from "components/NavStateTracker";
import {
ThemeProvider,
ThemeBackgroundProvider,
@@ -13,6 +14,7 @@ export default async function HomePagesLayout(props: {
if (!identityData?.home_leaflet)
return (
<>
+
{props.children}
>
);
@@ -34,6 +36,7 @@ export default async function HomePagesLayout(props: {
>
+
{props.children}
diff --git a/app/(home-pages)/page.tsx b/app/(home-pages)/page.tsx
new file mode 100644
index 00000000..036e9562
--- /dev/null
+++ b/app/(home-pages)/page.tsx
@@ -0,0 +1,31 @@
+import { cookies } from "next/headers";
+import ReaderLayout from "./reader/layout";
+import ReaderPage from "./reader/page";
+import HomePage from "./home/page";
+
+export default async function RootPage() {
+ const cookieStore = await cookies();
+ const hasAuth =
+ cookieStore.has("auth_token") ||
+ cookieStore.has("external_auth_token");
+
+ if (!hasAuth) {
+ return (
+
+
+
+ );
+ }
+
+ const navState = cookieStore.get("nav-state")?.value;
+
+ if (navState === "reader") {
+ return (
+
+
+
+ );
+ }
+
+ return ;
+}
diff --git a/app/(home-pages)/reader/layout.tsx b/app/(home-pages)/reader/layout.tsx
index 76bee57b..29e6695c 100644
--- a/app/(home-pages)/reader/layout.tsx
+++ b/app/(home-pages)/reader/layout.tsx
@@ -27,8 +27,13 @@ export default function ReaderLayout({
const tabs = allTabs.filter((tab) => !tab.requiresAuth || isLoggedIn);
const isActive = (href: string) => {
- if (href === "/reader") return pathname === "/reader";
- if (href === "/reader/hot" && !isLoggedIn && pathname === "/reader")
+ if (href === "/reader")
+ return pathname === "/reader" || pathname === "/";
+ if (
+ href === "/reader/hot" &&
+ !isLoggedIn &&
+ (pathname === "/reader" || pathname === "/")
+ )
return true;
return pathname.startsWith(href);
};
@@ -62,7 +67,7 @@ export default function ReaderLayout({
))}
- {pathname === "/reader" && (
+ {(pathname === "/reader" || pathname === "/") && (
Publications
diff --git a/app/api/update-nav-state/route.ts b/app/api/update-nav-state/route.ts
new file mode 100644
index 00000000..3e496e82
--- /dev/null
+++ b/app/api/update-nav-state/route.ts
@@ -0,0 +1,16 @@
+import { NextRequest, NextResponse } from "next/server";
+
+export async function POST(request: NextRequest) {
+ const { state } = (await request.json()) as { state: string };
+ if (state !== "home" && state !== "reader") {
+ return NextResponse.json({ error: "Invalid state" }, { status: 400 });
+ }
+
+ const response = NextResponse.json({ ok: true });
+ response.cookies.set("nav-state", state, {
+ path: "/",
+ sameSite: "lax",
+ maxAge: 60 * 60 * 24 * 365,
+ });
+ return response;
+}
diff --git a/app/route.ts b/app/route.ts
deleted file mode 100644
index 9bc9116d..00000000
--- a/app/route.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { createNewLeaflet } from "actions/createNewLeaflet";
-import { cookies } from "next/headers";
-import { redirect } from "next/navigation";
-
-export const preferredRegion = ["sfo1"];
-export const dynamic = "force-dynamic";
-export const fetchCache = "force-no-store";
-
-export async function GET() {
- redirect("/home");
-}
diff --git a/components/NavStateTracker.tsx b/components/NavStateTracker.tsx
new file mode 100644
index 00000000..4bdf6fb3
--- /dev/null
+++ b/components/NavStateTracker.tsx
@@ -0,0 +1,27 @@
+"use client";
+
+import { usePathname } from "next/navigation";
+import { useEffect, useRef } from "react";
+
+export function NavStateTracker() {
+ const pathname = usePathname();
+ const lastState = useRef
(null);
+
+ useEffect(() => {
+ let state: string | null = null;
+ if (pathname === "/home") state = "home";
+ else if (pathname === "/reader" || pathname.startsWith("/reader/"))
+ state = "reader";
+
+ if (state && state !== lastState.current) {
+ lastState.current = state;
+ fetch("/api/update-nav-state", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ state }),
+ });
+ }
+ }, [pathname]);
+
+ return null;
+}