import { Collapse } from '@material-ui/core'; import { Box } from '@/components/Box'; import { useStyles } from './test-complex-styles'; import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import usePersistState from '../../../hooks/usePersistState'; import { Link } from 'react-router-dom'; import { cn } from '@/lib/utils'; import ButtonShort from '../ButtonShort'; import ArrowIcon from '../../icons/arrow.svg?react'; import { Typography } from '@/components/ui/typography'; import useIsMobile from '../../hooks/useIsMobile'; import { memo, useEffect, useState } from 'react'; import { Aside } from '../../../services/aside'; import { useSelector } from 'react-redux'; const colors = ['86, 187, 98', '113, 92, 239', '239, 92, 189', '239, 196, 92', '92, 142, 239']; type ContentNavigationProps = { currentChild: Aside.Nav | undefined; }; const ContentNavigation = memo(({ currentChild }: ContentNavigationProps) => { const classes = useStyles(); const [short, setShort] = usePersistState(false, 'menuChildSideBarShort'); const toggleShort = () => { setShort((short: boolean) => !short); }; const isMobile = useIsMobile(); const project = useSelector((state) => state.ui.selectedProject?.uid); const menuItems = currentChild?.items; const [activeIndex, setActiveIndex] = useState(null); useEffect(() => { if (menuItems) { const initialIndex = menuItems.findIndex((item) => item.active); setActiveIndex(initialIndex ?? null); } }, [menuItems]); if (!menuItems || isMobile) return null; const handleTopLevelClick = (index: number) => { setActiveIndex(activeIndex === index ? null : index); }; const handleKeyDown = (event: React.KeyboardEvent, index: number) => { if (event.key === 'Enter') { event.preventDefault(); handleTopLevelClick(index); } }; const renderNavItem = (navItem: Aside.Nav, parentIndex: number) => { const commonProps = { className: cn( classes.item, { [classes.itemShort]: short, [classes.itemActive]: activeIndex === parentIndex && !navItem.items }, `menu-item-child-parent-${navItem.slug}` ), onKeyDown: (event: React.KeyboardEvent) => handleKeyDown(event, parentIndex), tabIndex: 0, role: 'tab', children: <> {navItem.title} {navItem.items && } }; return navItem.items ?
handleTopLevelClick(parentIndex)} /> : ; }; const renderSubItems = (navItems: Aside.Nav, parentIndex: number) => {navItems.items!.map((item) => {item.title} {short ? {item.title} : '' } )} ; const renderTooltipTitle = (navItem: Aside.Nav) => { if (!short) return ''; if (navItem.items) { return ( {navItem.title} {navItem.items.map((item) => {item.title} )} ); } return ( {navItem.title} ); }; return ( {menuItems?.map?.((navItem, parentIndex) => {renderNavItem(navItem, parentIndex)} {renderTooltipTitle(navItem)} {navItem.items && renderSubItems(navItem, parentIndex)} )} ); }); ContentNavigation.displayName = 'ContentNavigation'; export default ContentNavigation;