diff --git a/FooterWrapper.tsx b/FooterWrapper.tsx index a6741ddd5d..c85fb5188a 100644 --- a/FooterWrapper.tsx +++ b/FooterWrapper.tsx @@ -1,16 +1,77 @@ "use client"; +import Footer from "@/components/footer/Footer"; +import { SIDEBAR_WIDTHS } from "@/constants/sidebar"; import { usePathname } from "next/navigation"; +import { useEffect, useState } from "react"; import useDeviceInfo from "./hooks/useDeviceInfo"; -import Footer from "@/components/footer/Footer"; +import { useSidebarController } from "./hooks/useSidebarController"; export default function FooterWrapper() { const { isApp } = useDeviceInfo(); const pathname = usePathname(); + const [homeActiveTab, setHomeActiveTab] = useState("latest"); + const { sidebarWidth, isMobile, isNarrow } = useSidebarController(); + useEffect(() => { + const win = (globalThis as typeof globalThis & { window?: Window }).window; + if (win === undefined) { + return; + } + + const determineInitialTab = () => { + try { + const params = new URLSearchParams(win.location?.search ?? ""); + const tabFromQuery = params.get("tab"); + const savedTab = win.localStorage.getItem("home.activeTab"); + const resolvedTab = tabFromQuery ?? savedTab; + if (resolvedTab) { + setHomeActiveTab(resolvedTab); + } + } catch (error) { + console.warn("Failed to determine active home tab", error); + } + }; + + determineInitialTab(); + + const handleTabChange = (event: CustomEvent<{ tab?: string }>) => { + if (event.detail?.tab) { + setHomeActiveTab(event.detail.tab); + } + }; + + win.addEventListener("homeTabChange", handleTabChange as EventListener); + + return () => { + win.removeEventListener("homeTabChange", handleTabChange as EventListener); + }; + }, []); + + const homeFeedTabActive = pathname === "/" && homeActiveTab === "feed"; + const myFeedRoutes = ["/my-feed", "/feed"]; + const hideFooter = isApp || - ["/waves", "/my-stream", "/open-mobile"].some((path) => + homeFeedTabActive || + myFeedRoutes.some((path) => pathname?.startsWith(path)) || + ["/waves", "/messages", "/notifications", "/open-mobile"].some((path) => pathname?.startsWith(path) ); - return hideFooter ? null :