From ee6f56ce7a664b897546b03fd1a6849d3aaea073 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Tue, 5 May 2026 13:46:22 +0200 Subject: [PATCH] Main Menu Dropdown: Fix width (#6902) --- src/components/common/MainMenuDropdown.tsx | 1 + src/components/left/main/LeftMainHeader.scss | 20 +++++++++++---- src/components/ui/DropdownMenu.tsx | 26 ++++++++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/components/common/MainMenuDropdown.tsx b/src/components/common/MainMenuDropdown.tsx index cc5088ab5..0d218cc81 100644 --- a/src/components/common/MainMenuDropdown.tsx +++ b/src/components/common/MainMenuDropdown.tsx @@ -68,6 +68,7 @@ const LeftSideMenuDropdown = ({ positionX={shouldHideSearch && lang.isRtl ? 'right' : 'left'} transformOriginX={90} transformOriginY={100} + withPortal onTransitionEnd={lang.isRtl ? handleDropdownMenuTransitionEnd : undefined} > = ({ autoClose = true, }) => { const menuRef = useRef(); + const triggerRef = useRef(); const [isOpen, setIsOpen] = useState(false); + const [menuAnchor, setMenuAnchor] = useState(); const toggleIsOpen = () => { + if (!isOpen && withPortal && triggerRef.current) { + const rect = triggerRef.current.getBoundingClientRect(); + setMenuAnchor({ x: rect.left, y: rect.bottom }); + } + setIsOpen(!isOpen); if (isOpen) { @@ -97,8 +108,16 @@ const DropdownMenu: FC = ({ ); }, [trigger]); + const getTriggerElement = useLastCallback(() => triggerRef.current); + const getRootElement = useLastCallback(() => document.body); + const getMenuElement = useLastCallback( + () => menuRef.current?.querySelector('.bubble') as HTMLElement | undefined, + ); + const getLayout = useLastCallback(() => ({ withPortal: true })); + return (
= ({ onClose={handleClose} onCloseAnimationEnd={onHide} onMouseEnterBackdrop={onMouseEnterBackdrop} + {...(withPortal && menuAnchor ? { + anchor: menuAnchor, + getTriggerElement, + getRootElement, + getMenuElement, + getLayout, + } : undefined)} > {children}