From 5dc7715dca81fb295d8610a300028fdb33f4a39d Mon Sep 17 00:00:00 2001 From: Jamil Date: Fri, 5 Jul 2024 12:00:31 -0700 Subject: [PATCH] feat(website): Add shadow to navbar on scroll (#5768) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevents problems with it blending in to content. ### Before Screenshot 2024-07-05 at 11 59 52 AM ### After Screenshot 2024-07-05 at 11 59 26 AM --- website/src/components/RootNavbar/index.tsx | 17 +++++++++++++++-- website/src/hooks/useScrollPosition.ts | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 website/src/hooks/useScrollPosition.ts diff --git a/website/src/components/RootNavbar/index.tsx b/website/src/components/RootNavbar/index.tsx index 983c19106..7ae8f29b7 100644 --- a/website/src/components/RootNavbar/index.tsx +++ b/website/src/components/RootNavbar/index.tsx @@ -17,10 +17,11 @@ import { HiChevronDown } from "react-icons/hi2"; import type { CustomFlowbiteTheme } from "flowbite-react"; import { HiBars3 } from "react-icons/hi2"; import { useDrawer } from "@/components/Providers/DrawerProvider"; +import { useScrollPosition } from "@/hooks/useScrollPosition"; const navbarTheme: CustomFlowbiteTheme["navbar"] = { root: { - base: "fixed top-0 left-0 right-0 z-50 items-center bg-white px-2 py-2.5 sm:px-4", + base: "fixed top-0 left-0 right-0 z-50 items-center bg-white px-2 py-2.5 sm:px-4 transition-shadow", rounded: { on: "rounded", off: "", @@ -150,9 +151,21 @@ function SidebarToggle() { } } +function applyTheme(scrollPosition: number) { + return { + ...navbarTheme, + root: { + ...navbarTheme?.root, + base: `${navbarTheme?.root?.base} ${scrollPosition > 0 ? "shadow" : "shadow-none"}`, + }, + }; +} + export default function RootNavbar() { + const scrollPosition = useScrollPosition(); + return ( - + { + const [scrollPosition, setScrollPosition] = useState(0); + + useEffect(() => { + const updatePosition = () => { + setScrollPosition(window.pageYOffset); + }; + + window.addEventListener("scroll", updatePosition); + + updatePosition(); + + return () => window.removeEventListener("scroll", updatePosition); + }, []); + + return scrollPosition; +};