import React from 'react'; import { Page, PageSidebar, Nav, MenuContent, MenuItem, MenuList, DrilldownMenu, Menu, PageSection } from '@patternfly/react-core'; import DashboardHeader from '@patternfly/react-core/src/demos/examples/DashboardHeader'; interface MenuHeights { [menuId: string]: number; } function getNavLayer(menuId: string): number { switch (menuId) { case 'rootMenu': return 1; case 'subMenu-1': return 2; case 'subMenu-2': return 3; } } const subMenuTwo: JSX.Element = ( SubMenu 1 - Item 1 SubMenu 2 - Item 1 SubMenu 2 - Item 2 SubMenu 2 - Item 3 ); const subMenuOne: JSX.Element = ( Item 1 SubMenu 1 - Item 1 SubMenu 1 - Item 2 SubMenu 1 - Item 3 ); export const NavDrilldown: React.FunctionComponent = () => { const [menuDrilledIn, setMenuDrilledIn] = React.useState([]); const [drilldownPath, setDrilldownPath] = React.useState([]); const [menuHeights, setMenuHeights] = React.useState({}); const [activeMenuId, setActiveMenuId] = React.useState('rootMenu'); const navLayer = getNavLayer(activeMenuId); const onDrillIn = (fromItemId: string, toItemId: string, itemId: string) => { setMenuDrilledIn(prevMenuDrilledIn => [...prevMenuDrilledIn, fromItemId]); setDrilldownPath(prevDrilldownPath => [...prevDrilldownPath, itemId]); setActiveMenuId(toItemId); }; const onDrillOut = (toItemId: string, _itemId: string) => { setMenuDrilledIn(prevMenuDrilledIn => prevMenuDrilledIn.slice(0, prevMenuDrilledIn.length - 1)); setDrilldownPath(prevDrilldownPath => prevDrilldownPath.slice(0, prevDrilldownPath.length - 1)); setActiveMenuId(toItemId); }; const onGetMenuHeight = (menuId: string, height: number) => { if (!menuHeights[menuId] && menuId !== 'rootMenu') { setMenuHeights(prevMenuHeights => ({ ...prevMenuHeights, [menuId]: height })); } }; const sidebar = ( Item 1 Item 2 Item 3 } /> ); return ( } sidebar={sidebar}> Nav Layer: {navLayer} ); };