diff --git a/apps/web/src/components/menu/index.js b/apps/web/src/components/menu/index.js index 736899864..7c0b2c74d 100644 --- a/apps/web/src/components/menu/index.js +++ b/apps/web/src/components/menu/index.js @@ -10,6 +10,7 @@ import React, { import { Flex, Box, Text, Button } from "rebass"; import useMobile from "../../utils/use-mobile"; import { AnimatedFlex } from "../animated"; +import { getPosition } from "../../hooks/use-menu"; function useMenuFocus(items) { const [focusIndex, setFocusIndex] = useState(-1); @@ -121,8 +122,7 @@ function MenuContainer({ title, children }) { borderRadius: "default", boxShadow: "0px 0px 10px 0px #00000022", border: "1px solid var(--border)", - minWidth: 200, - maxWidth: 500, + width: 220, }} > {title && ( @@ -217,16 +217,35 @@ function MenuItem({ item, data, isFocused, isSubmenuOpen, onClose, onHover }) { isPremium, } = item; const itemRef = useRef(); + const subMenuRef = useRef(); useEffect(() => { if (isFocused) itemRef.current?.focus(); }, [isFocused]); + useEffect(() => { + if (!subMenuRef.current) return; + if (!isSubmenuOpen) { + subMenuRef.current.style.visibility = "hidden"; + return; + } + + const { top, left } = getPosition( + subMenuRef.current, + itemRef.current, + "right" + ); + + subMenuRef.current.style.visibility = "visible"; + subMenuRef.current.style.top = `${top}px`; + subMenuRef.current.style.left = `${left}px`; + }, [isSubmenuOpen]); + const onAction = useCallback( (e) => { e.stopPropagation(); if (onClose) onClose(); - onClick(data, item); + if (onClick) onClick(data, item); }, [onClick, onClose, item, data] ); @@ -249,7 +268,7 @@ function MenuItem({ item, data, isFocused, isSubmenuOpen, onClose, onHover }) { as="li" flexDirection={"column"} flex={1} - sx={{ position: "relative" }} + // sx={{ position: "relative" }} onMouseOver={onHover} > - {hasSubmenu && isSubmenuOpen && ( + {hasSubmenu && (