From f73368ebdc4fe81c19db5d66225cb0556417e391 Mon Sep 17 00:00:00 2001 From: Nitesh Seram Date: Fri, 15 Nov 2024 10:18:03 +0530 Subject: [PATCH] [web] ui/navbar: make the navbar popover open on hover (#953) --- .../src/components/ui/Navbar/NavbarItem.tsx | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/ui/Navbar/NavbarItem.tsx b/apps/web/src/components/ui/Navbar/NavbarItem.tsx index 8fd0f7d4a..7dd93ba34 100644 --- a/apps/web/src/components/ui/Navbar/NavbarItem.tsx +++ b/apps/web/src/components/ui/Navbar/NavbarItem.tsx @@ -1,6 +1,7 @@ import clsx from 'clsx'; import { useState } from 'react'; import { RiArrowDownSLine } from 'react-icons/ri'; +import { useDebounce } from 'usehooks-ts'; import { themeOutlineElement_FocusVisible, @@ -25,6 +26,17 @@ export default function NavbarItem({ ...props }: NavbarTopLevelItem) { const [open, setOpen] = useState(false); + // To debounce open state when quick hovering on and out + const debouncedOpen = useDebounce(open, 100); + const [isClicked, setIsClicked] = useState(false); + + function handleMouseEnter() { + setOpen(true); + } + + function handleMouseLeave() { + setOpen(false); + } const commonStyles = clsx( 'group', @@ -58,14 +70,17 @@ export default function NavbarItem({ } return ( - + + )} + onClick={() => setIsClicked(true)} + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave}> {label}