diff --git a/workspaces/redhat-resource-optimization/packages/app/src/components/Root/Root.tsx b/workspaces/redhat-resource-optimization/packages/app/src/components/Root/Root.tsx index fe53ae8d02..836c674c4a 100644 --- a/workspaces/redhat-resource-optimization/packages/app/src/components/Root/Root.tsx +++ b/workspaces/redhat-resource-optimization/packages/app/src/components/Root/Root.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React, { PropsWithChildren } from 'react'; +import React, { PropsWithChildren, useState } from 'react'; import { makeStyles } from '@material-ui/core'; import HomeIcon from '@material-ui/icons/Home'; import ExtensionIcon from '@material-ui/icons/Extension'; @@ -76,6 +76,49 @@ const Logo = (props: { isOpen?: boolean }) => { return logo; }; +const CollapsibleSubmenu = ({ + icon, + text, + children, +}: { + icon: React.ReactElement; + text: string; + children: React.ReactNode; +}) => { + const [isOpen, setIsOpen] = useState(false); + const { isOpen: sidebarOpen } = useSidebarOpenState(); + + return ( + <> +
setIsOpen(!isOpen)} + onKeyDown={e => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + setIsOpen(!isOpen); + } + }} + role="button" + tabIndex={0} + style={{ + display: 'flex', + alignItems: 'center', + cursor: 'pointer', + padding: '16px 16px', + userSelect: 'none', + }} + > + {icon} + {sidebarOpen && {text}} + {sidebarOpen && ( + {isOpen ? '▼' : '▶'} + )} +
+ {isOpen &&
{children}
} + + ); +}; + const SidebarLogo = () => { const classes = useSidebarLogoStyles(); const { isOpen } = useSidebarOpenState(); @@ -105,11 +148,16 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( {/* End global nav */} - + } + text="Cost management" + > + +