import { NavLink, useLocation } from 'react-router-dom'; import { useState, ReactNode, MouseEvent } from 'react'; import { AppBar, Box, IconButton, Menu, MenuItem, Tab, Tabs, Toolbar, useMediaQuery, } from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; interface RouteItem { path: string; label: string; element: ReactNode; } interface NavbarProps { items?: RouteItem[]; } function Navbar({ items = [] }: NavbarProps) { const [anchorEl, setAnchorEl] = useState(null); const isMenuOpen = Boolean(anchorEl); const location = useLocation(); // Replicating the screen size logic from original component const isLargeScreen = useMediaQuery('(min-width:768px)'); const isMediumScreen = useMediaQuery('(min-width:480px)'); let visibleItemsCount: number; if (isLargeScreen) { visibleItemsCount = items.length; } else if (isMediumScreen) { visibleItemsCount = Math.min(3, items.length); } else { // Small screen visibleItemsCount = Math.min(2, items.length); } const visibleNavItems = items.slice(0, visibleItemsCount); const collapsedNavItems = items.slice(visibleItemsCount); const handleMenuOpen = (event: MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setAnchorEl(null); }; // Find the current active tab index for the Tabs value // Using startsWith to handle nested routes correctly. const activeTabIndex = visibleNavItems.findIndex((item) => location.pathname.startsWith(item.path), ); return ( {visibleNavItems.map((item) => ( ))} {collapsedNavItems.length > 0 && ( {collapsedNavItems.map((item) => ( {item.label} ))} )} ); } export default Navbar;