import React from 'react'; import { Menu, MenuContent, MenuList, MenuItem, Divider, DrilldownMenu, Breadcrumb, BreadcrumbItem, BreadcrumbHeading, MenuBreadcrumb, Dropdown, DropdownItem, BadgeToggle, Checkbox } from '@patternfly/react-core'; import StorageDomainIcon from '@patternfly/react-icons/dist/esm/icons/storage-domain-icon'; import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon'; import LayerGroupIcon from '@patternfly/react-icons/dist/esm/icons/layer-group-icon'; import AngleLeftIcon from '@patternfly/react-icons/dist/esm/icons/angle-left-icon'; import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; export const MenuWithDrilldownBreadcrumbs: React.FunctionComponent = () => { const [menuDrilledIn, setMenuDrilledIn] = React.useState([]); const [drilldownPath, setDrilldownPath] = React.useState([]); const [menuHeights, setMenuHeights] = React.useState({}); const [activeMenu, setActiveMenu] = React.useState('breadcrumbs-rootMenu'); const [breadcrumb, setBreadcrumb] = React.useState(); const [withMaxMenuHeight, setWithMaxMenuHeight] = React.useState(false); const onToggle = (isOpen: boolean, key: string) => { switch (key) { case 'app': setBreadcrumb(appGroupingBreadcrumb(isOpen)); break; case 'label': setBreadcrumb(labelsBreadcrumb(isOpen)); break; default: break; } }; const onToggleMaxMenuHeight = (checked: boolean) => { setWithMaxMenuHeight(checked); }; const drillOut = (toMenuId: string, fromPathId: string, _breadcrumb: JSX.Element | null) => { const indexOfMenuId = menuDrilledIn.indexOf(toMenuId); const menuDrilledInSansLast = menuDrilledIn.slice(0, indexOfMenuId); const indexOfMenuIdPath = drilldownPath.indexOf(fromPathId); const pathSansLast = drilldownPath.slice(0, indexOfMenuIdPath); setMenuDrilledIn(menuDrilledInSansLast); setDrilldownPath(pathSansLast); setActiveMenu(toMenuId); }; const setHeight = (menuId: string, height: number) => { if (menuHeights[menuId] === undefined || (menuId !== 'breadcrumbs-rootMenu' && menuHeights[menuId] !== height)) { setMenuHeights({ ...menuHeights, [menuId]: height }); } }; const drillIn = (fromMenuId: string, toMenuId: string, pathId: string) => { setMenuDrilledIn([...menuDrilledIn, fromMenuId]); setDrilldownPath([...drilldownPath, pathId]); setActiveMenu(toMenuId); }; const startRolloutBreadcrumb = ( drillOut('breadcrumbs-rootMenu', 'group:start_rollout', null)}> Root Start rollout ); const appGroupingBreadcrumb = (isOpen: boolean) => ( drillOut('breadcrumbs-rootMenu', 'group:start_rollout', null)}> Root onToggle(open, 'app')}> 1 } isOpen={isOpen} dropdownItems={[ } onClick={() => drillOut('breadcrumbs-drilldownMenuStart', 'group:app_grouping_start', startRolloutBreadcrumb) } > Start rollout ]} /> Application Grouping ); const labelsBreadcrumb = (isOpen: boolean) => ( drillOut('breadcrumbs-rootMenu', 'group:start_rollout', null)}> Root onToggle(open, 'label')}> 1 } isOpen={isOpen} dropdownItems={[ } onClick={() => drillOut('breadcrumbs-drilldownMenuStart', 'group:labels_start', startRolloutBreadcrumb)} > Start rollout ]} /> Labels ); const pauseRolloutsBreadcrumb = ( drillOut('breadcrumbs-rootMenu', 'group:pause_rollout', null)}> Root Pause rollouts ); const pauseRolloutsAppGrpBreadcrumb = ( drillOut('breadcrumbs-rootMenu', 'group:pause_rollout', null)}> Root drillOut('breadcrumbs-drilldownMenuPause', 'group:app_grouping', pauseRolloutsBreadcrumb)} > Pause rollouts Application Grouping ); const pauseRolloutsLabelsBreadcrumb = ( drillOut('breadcrumbs-rootMenu', 'group:pause_rollout', null)}> Root drillOut('breadcrumbs-drilldownMenuPause', 'group:labels', pauseRolloutsBreadcrumb)} > Pause rollouts Labels ); const addStorageBreadcrumb = ( drillOut('breadcrumbs-rootMenu', 'group:storage', null)}> Root Add storage ); return ( <>
drillOut} onGetMenuHeight={setHeight} > {breadcrumb && ( <> {breadcrumb} )} setBreadcrumb(startRolloutBreadcrumb)} drilldownMenu={ setBreadcrumb(appGroupingBreadcrumb(false))} drilldownMenu={ Group A Group B Group C Group D Group E Group F Group G } > Application grouping Count setBreadcrumb(labelsBreadcrumb(false))} drilldownMenu={ Label 1 Label 2 Label 3 } > Labels Annotations } > Start rollout setBreadcrumb(pauseRolloutsBreadcrumb)} drilldownMenu={ setBreadcrumb(pauseRolloutsAppGrpBreadcrumb)} drilldownMenu={ Group A Group B Group C } > Application grouping Count setBreadcrumb(pauseRolloutsLabelsBreadcrumb)} drilldownMenu={ Label 1 Label 2 Label 3 } > Labels Annotations } > Pause rollouts } direction="down" onClick={() => setBreadcrumb(addStorageBreadcrumb)} drilldownMenu={ } itemId="git"> From git } itemId="container"> Container image } itemId="docker"> Docker file } > Add storage Edit Delete deployment config ); };