import React from 'react'; import { FormGroup, TextInput, Drawer, DrawerContent, Button, Flex, DrawerPanelContent, DrawerColorVariant, DrawerHead, DrawerActions, DrawerCloseButton, Checkbox } from '@patternfly/react-core'; import { Wizard, WizardStep, WizardBody, WizardFooter, useWizardContext, WizardHeader, WizardFooterWrapper, WizardNavStepFunction, WizardNavStepData } from '@patternfly/react-core/next'; const StepId = { StepOne: 'sink-step-1', StepTwo: 'sink-step-2', StepTwoSubOne: 'sink-step-2-1', StepTwoSubTwo: 'sink-step-2-2', StepThree: 'sink-step-3', StepFour: 'sink-step-4', ReviewStep: 'sink-review-step' }; interface SomeContextProps { isToggleStepChecked: boolean; errorMessage: string | undefined; setIsToggleStepChecked(isHidden: boolean): void; setErrorMessage(error: string | undefined): void; } type SomeContextRenderProps = Pick; interface SomeContextProviderProps { children: (context: SomeContextRenderProps) => React.ReactElement; } const SomeContext = React.createContext({} as SomeContextProps); const SomeContextProvider = ({ children }: SomeContextProviderProps) => { const [isToggleStepChecked, setIsToggleStepChecked] = React.useState(false); const [errorMessage, setErrorMessage] = React.useState(); return ( {children({ isToggleStepChecked, errorMessage })} ); }; const CustomWizardFooter = () => { const { activeStep, onNext, onBack, onClose } = useWizardContext(); return ( ); }; const StepContentWithDrawer = () => { const [isDrawerExpanded, setIsDrawerExpanded] = React.useState(false); return ( drawer content setIsDrawerExpanded(false)} /> } > {!isDrawerExpanded && ( )} ); }; const CustomStepThreeFooter = () => { const { onNext: goToNextStep, onBack, onClose } = useWizardContext(); const [isLoading, setIsLoading] = React.useState(false); async function onNext(goToStep: () => void) { setIsLoading(true); await new Promise(resolve => setTimeout(resolve, 2000)); setIsLoading(false); goToStep(); } return ( ); }; const StepContentWithActions = () => { const { isToggleStepChecked, errorMessage, setIsToggleStepChecked, setErrorMessage } = React.useContext(SomeContext); return ( <> setErrorMessage(checked ? 'Some error message' : undefined)} id="toggle-error-checkbox" name="Toggle Error Checkbox" /> setIsToggleStepChecked(checked)} id="toggle-hide-step-checkbox" name="Toggle Hide Step Checkbox" /> ); }; export const WizardKitchenSink: React.FunctionComponent = () => { const onNext: WizardNavStepFunction = (_currentStep: WizardNavStepData, _previousStep: WizardNavStepData) => {}; return ( {({ isToggleStepChecked, errorMessage }) => ( } footer={} onNext={onNext} isStepVisitRequired > , Substep 2 content ]} /> Custom item }} footer={} > Step 3 content w/ custom async footer Review step content )} ); };