import * as React from 'react'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/Wizard/wizard'; import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon'; import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon'; import { WizardStep } from './Wizard'; import { WizardBody } from './WizardBody'; export interface WizardToggleProps { /** Function that returns the WizardNav component */ nav: (isWizardNavOpen: boolean) => React.ReactElement; /** The wizard steps */ steps: WizardStep[]; /** The currently active WizardStep */ activeStep: WizardStep; /** The WizardFooter */ children?: React.ReactNode; /** Set to true to remove body padding */ hasNoBodyPadding: boolean; /** If the nav is open */ isNavOpen: boolean; /** Callback function for when the nav is toggled */ onNavToggle: (isOpen: boolean) => void; /** The button's aria-label */ 'aria-label'?: string; /** Adds an accessible name to the wizard body by passing the the id of one or more elements. * The aria-labelledby will only be applied when the body content overflows and renders a scrollbar. */ mainAriaLabelledBy?: string; /** Adds an accessible name to the wizard body when the body content overflows and renders * a scrollbar. */ mainAriaLabel?: string; /** If the wizard is in-page */ isInPage?: boolean; /** Flag indicating the wizard has a drawer for at least one of the wizard steps */ hasDrawer?: boolean; /** Flag indicating the wizard drawer is expanded */ isDrawerExpanded?: boolean; /** Callback function for when the drawer is toggled */ onExpandDrawer?: () => void; } export const WizardToggle: React.FunctionComponent = ({ isNavOpen, onNavToggle, nav, steps, activeStep, children, hasNoBodyPadding = false, 'aria-label': ariaLabel = 'Wizard Toggle', mainAriaLabelledBy = null, mainAriaLabel = null, isInPage = true, hasDrawer, isDrawerExpanded, onExpandDrawer }: WizardToggleProps) => { let activeStepIndex; let activeStepName; let activeStepSubName; for (let i = 0; i < steps.length; i++) { if ((activeStep.id && steps[i].id === activeStep.id) || steps[i].name === activeStep.name) { activeStepIndex = i + 1; activeStepName = steps[i].name; break; } else if (steps[i].steps) { for (const step of steps[i].steps) { if ((activeStep.id && step.id === activeStep.id) || step.name === activeStep.name) { activeStepIndex = i + 1; activeStepName = steps[i].name; activeStepSubName = step.name; break; } } } } return (
{nav(isNavOpen)} {hasDrawer && !isDrawerExpanded && activeStep.drawerToggleButton} {activeStep.component}
{children}
); }; WizardToggle.displayName = 'WizardToggle';