diff --git a/apps/web/src/views/home/components/Header.tsx b/apps/web/src/views/home/components/Header.tsx index 16b57758..a24de2d0 100644 --- a/apps/web/src/views/home/components/Header.tsx +++ b/apps/web/src/views/home/components/Header.tsx @@ -6,55 +6,83 @@ import { twMerge } from "tailwind-merge"; import Button from "~/components/Button"; const Header = ({ isLoggedIn }: { isLoggedIn: boolean }) => { - const [isScrolled, setIsScrolled] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false); - const menuItems = [ - { label: t`Roadmap`, href: "/kan/roadmap", openInNewTab: true }, + const desktopMenuItems = [ + { + label: t`Roadmap`, + href: "/kan/roadmap", + openInNewTab: true, + }, { label: t`Features`, href: "/#features" }, { label: t`Pricing`, href: "/pricing" }, - { label: t`Docs`, href: "https://docs.kan.bn", openInNewTab: true }, + { + label: t`Docs`, + href: "https://docs.kan.bn", + openInNewTab: true, + }, ]; - useEffect(() => { - const handleScroll = () => { - setIsScrolled(window.scrollY > 0); - }; - window.addEventListener("scroll", handleScroll); - return () => window.removeEventListener("scroll", handleScroll); - }, []); + const mobileMenuItems = [ + { + label: t`Roadmap`, + href: "/kan/roadmap", + openInNewTab: true, + group: "Product", + }, + { label: t`Features`, href: "/#features", group: "Product" }, + { label: t`Pricing`, href: "/pricing", group: "Product" }, + { + label: t`Documentation`, + href: "https://docs.kan.bn", + openInNewTab: true, + group: "Resources", + }, + { label: t`FAQ`, href: "/#faq", group: "Resources" }, + { label: t`Contact`, href: "mailto:support@kan.bn", group: "Resources" }, + ]; + + // Group mobile menu items by their group property + const groupedMenuItems = mobileMenuItems.reduce( + (acc, item) => { + (acc[item.group] ??= []).push(item); + return acc; + }, + {} as Record, + ); const toggleMenu = () => { setIsMenuOpen(!isMenuOpen); - document.body.style.overflow = !isMenuOpen ? "hidden" : ""; }; + useEffect(() => { + document.documentElement.classList.toggle("overflow-hidden", isMenuOpen); + document.body.classList.toggle("overflow-hidden", isMenuOpen); + return () => { + document.documentElement.classList.remove("overflow-hidden"); + document.body.classList.remove("overflow-hidden"); + }; + }, [isMenuOpen]); + return ( <>
-
-
+
+
-

+

kan.bn

{/* Desktop Menu */}
- {menuItems.map((item) => ( + {desktopMenuItems.map((item) => ( { ))}
- {/* Hamburger Menu Button */} - + ) : ( +
+ + +
)} - /> -
-
- -
- {isLoggedIn ? ( - - ) : ( - <> - - - - )} +
+ {/* Hamburger Menu Button */} +
@@ -114,35 +138,27 @@ const Header = ({ isLoggedIn }: { isLoggedIn: boolean }) => { : "pointer-events-none translate-x-0 opacity-0" }`} > -
-
- {menuItems.map((item) => ( - - {item.label} - +
+
+ {Object.entries(groupedMenuItems).map(([group, items]) => ( +
+
+ {group} +
+ {items.map((item) => ( + setIsMenuOpen(false)} + > + {item.label} + + ))} +
))} -
- {isLoggedIn ? ( - - ) : ( - <> - - - - )} -
diff --git a/apps/web/src/views/home/components/Layout.tsx b/apps/web/src/views/home/components/Layout.tsx index 5dcb7ab2..2bcdd379 100644 --- a/apps/web/src/views/home/components/Layout.tsx +++ b/apps/web/src/views/home/components/Layout.tsx @@ -26,8 +26,8 @@ export default function Layout({ children }: { children: React.ReactNode }) { `}
+
-
{children}