diff --git a/src/components/TopNavClient.tsx b/src/components/TopNavClient.tsx index 82a92f62e83809..63bcd4a65e6026 100644 --- a/src/components/TopNavClient.tsx +++ b/src/components/TopNavClient.tsx @@ -2,34 +2,26 @@ import Link from 'next/link'; import {usePathname, useRouter} from 'next/navigation'; import {useEffect, useRef, useState} from 'react'; -import ReactDOM from 'react-dom'; import {usePlatforms} from 'sentry-docs/hooks/usePlatforms'; import {Platform} from 'sentry-docs/types'; import {isLocalStorageAvailable} from 'sentry-docs/utils'; import {mainSectionsWithDropdowns} from './navigationData'; -import {PlatformSelector} from './platformSelector'; -import platformSelectorStyles from './platformSelector/style.module.scss'; const mainSections = mainSectionsWithDropdowns; // Helper hook for dropdown positioning -// Returns both absolute (for portals) and fixed (for inline) coordinates function useDropdownPosition(triggerRef, open) { const [position, setPosition] = useState<{ - top: number; - left: number; - width: number; - fixedTop: number; fixedLeft: number; + fixedTop: number; + width: number; } | null>(null); useEffect(() => { function updatePosition() { if (triggerRef.current && open) { const rect = triggerRef.current.getBoundingClientRect(); setPosition({ - top: rect.bottom + window.scrollY, - left: rect.left + window.scrollX, width: rect.width, fixedTop: rect.bottom, fixedLeft: rect.left, @@ -53,10 +45,6 @@ const NO_PLATFORMS: Platform[] = []; export default function TopNavClient() { const platforms = usePlatforms().platforms ?? NO_PLATFORMS; - const [platformDropdownOpen, setPlatformDropdownOpen] = useState(false); - const [platformDropdownByClick, setPlatformDropdownByClick] = useState(false); - const platformBtnRef = useRef(null); - const platformDropdownRef = useRef(null); const pathname = usePathname(); const router = useRouter(); @@ -118,7 +106,6 @@ export default function TopNavClient() { const closeTimers = useRef<{ concepts?: NodeJS.Timeout; more?: NodeJS.Timeout; - sdks?: NodeJS.Timeout; }>({}); const [conceptsDropdownOpen, setConceptsDropdownOpen] = useState(false); const [moreDropdownOpen, setMoreDropdownOpen] = useState(false); @@ -133,15 +120,6 @@ export default function TopNavClient() { // Close dropdowns on outside click if opened by click useEffect(() => { function handleClick(e: MouseEvent) { - if (platformDropdownOpen && platformDropdownByClick) { - if ( - !platformBtnRef.current?.contains(e.target as Node) && - !platformDropdownRef.current?.contains(e.target as Node) - ) { - setPlatformDropdownOpen(false); - setPlatformDropdownByClick(false); - } - } if (conceptsDropdownOpen) { if ( !conceptsBtnRef.current?.contains(e.target as Node) && @@ -169,11 +147,6 @@ export default function TopNavClient() { setMoreDropdownOpen(false); moreBtnRef.current?.focus(); } - if (platformDropdownOpen) { - setPlatformDropdownOpen(false); - setPlatformDropdownByClick(false); - platformBtnRef.current?.focus(); - } } } document.addEventListener('mousedown', handleClick); @@ -182,12 +155,7 @@ export default function TopNavClient() { document.removeEventListener('mousedown', handleClick); document.removeEventListener('keydown', handleKeyDown); }; - }, [ - platformDropdownOpen, - platformDropdownByClick, - conceptsDropdownOpen, - moreDropdownOpen, - ]); + }, [conceptsDropdownOpen, moreDropdownOpen]); useEffect(() => { function updateScrollState() { @@ -215,8 +183,7 @@ export default function TopNavClient() { } } - // For each dropdown, use the hook and portal rendering - const sdksPosition = useDropdownPosition(platformBtnRef, platformDropdownOpen); + // Position the dropdowns below their buttons const conceptsPosition = useDropdownPosition(conceptsBtnRef, conceptsDropdownOpen); const morePosition = useDropdownPosition(moreBtnRef, moreDropdownOpen); @@ -295,7 +262,6 @@ export default function TopNavClient() { clearTimeout(closeTimers.current.concepts); setConceptsDropdownOpen(true); setMoreDropdownOpen(false); - setPlatformDropdownOpen(false); }} onMouseLeave={() => { closeTimers.current.concepts = setTimeout(() => { @@ -380,7 +346,6 @@ export default function TopNavClient() { clearTimeout(closeTimers.current.more); setMoreDropdownOpen(true); setConceptsDropdownOpen(false); - setPlatformDropdownOpen(false); }} onMouseLeave={() => { closeTimers.current.more = setTimeout(() => { @@ -487,128 +452,6 @@ export default function TopNavClient() { - {/* Portal-based dropdowns */} - {platformDropdownOpen && - sdksPosition && - ReactDOM.createPortal( -
e.stopPropagation()} - onMouseEnter={() => { - clearTimeout(closeTimers.current.sdks); - }} - onMouseLeave={() => { - closeTimers.current.sdks = setTimeout(() => { - setPlatformDropdownOpen(false); - setPlatformDropdownByClick(false); - }, 150); - }} - > - - -
, - document.body - )}