Skip to content

Commit 74aba2b

Browse files
committed
address feedback
1 parent 0ffa3fd commit 74aba2b

File tree

4 files changed

+22
-74
lines changed

4 files changed

+22
-74
lines changed

packages/react-core/src/next/components/Wizard/WizardContext.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from 'react';
22

33
import { isCustomWizardFooter, WizardControlStep, WizardFooterType } from './types';
44
import { getActiveStep } from './utils';
5-
import { useGetMergedSteps } from './hooks/useGetMergedSteps';
65
import { WizardFooter, WizardFooterProps } from './WizardFooter';
76

87
export interface WizardContextProps {
@@ -30,8 +29,6 @@ export interface WizardContextProps {
3029
getStep: (stepId: number | string) => WizardControlStep;
3130
/** Set step by ID */
3231
setStep: (step: Pick<WizardControlStep, 'id'> & Partial<WizardControlStep>) => void;
33-
/** Set multiple steps */
34-
setSteps: React.Dispatch<React.SetStateAction<WizardControlStep[]>>;
3532
}
3633

3734
export const WizardContext = React.createContext({} as WizardContextProps);
@@ -65,7 +62,19 @@ export const WizardContextProvider: React.FunctionComponent<WizardContextProvide
6562
const [currentFooter, setCurrentFooter] = React.useState(
6663
typeof initialFooter !== 'function' ? initialFooter : undefined
6764
);
68-
const mergedSteps = useGetMergedSteps(initialSteps, steps);
65+
const mergedSteps = React.useMemo(
66+
() =>
67+
steps.map((currentStepProps, index) => {
68+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
69+
const { isVisited, ...initialStepProps } = initialSteps[index];
70+
71+
return {
72+
...currentStepProps,
73+
...initialStepProps
74+
};
75+
}),
76+
[initialSteps, steps]
77+
);
6978
const activeStep = getActiveStep(mergedSteps, activeStepIndex);
7079

7180
const goToNextStep = React.useCallback(() => onNext(mergedSteps), [onNext, mergedSteps]);
@@ -121,7 +130,6 @@ export const WizardContextProvider: React.FunctionComponent<WizardContextProvide
121130
onClose,
122131
getStep,
123132
setStep,
124-
setSteps,
125133
setFooter: setCurrentFooter,
126134
onNext: goToNextStep,
127135
onBack: goToPrevStep,

packages/react-core/src/next/components/Wizard/WizardNavInternal.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ export const WizardNavInternal = ({ nav, isStepVisitRequired, isNavExpanded }: W
2929

3030
return (
3131
<WizardNav {...wizardNavProps}>
32-
{steps.map(step => {
32+
{steps.map((step, stepIndex) => {
33+
const hasVisitedNextStep = steps.some(step => step.index > stepIndex + 1 && step.isVisited);
34+
const isStepDisabled = step.isDisabled || (isStepVisitRequired && !step.isVisited && !hasVisitedNextStep);
3335
const customStepNavItem = isCustomWizardNavItem(step.navItem) && (
3436
<React.Fragment key={step.id}>
3537
{typeof step.navItem === 'function' ? step.navItem(step, activeStep, steps, goToStepByIndex) : step.navItem}
@@ -42,6 +44,9 @@ export const WizardNavInternal = ({ nav, isStepVisitRequired, isNavExpanded }: W
4244

4345
const subNavItems = step.subStepIds?.map((subStepId, subStepIndex) => {
4446
const subStep = steps.find(step => step.id === subStepId);
47+
const hasVisitedNextStep = steps.some(step => step.index > subStep.index && step.isVisited);
48+
const isSubStepDisabled =
49+
subStep.isDisabled || (isStepVisitRequired && !subStep.isVisited && !hasVisitedNextStep);
4550
const customSubStepNavItem = isCustomWizardNavItem(subStep.navItem) && (
4651
<React.Fragment key={subStep.id}>
4752
{typeof subStep.navItem === 'function'
@@ -72,7 +77,7 @@ export const WizardNavInternal = ({ nav, isStepVisitRequired, isNavExpanded }: W
7277
id={subStep.id}
7378
content={subStep.name}
7479
isCurrent={activeStep?.id === subStep.id}
75-
isDisabled={subStep.isDisabled || (isStepVisitRequired && !subStep.isVisited)}
80+
isDisabled={isSubStepDisabled}
7681
isVisited={subStep.isVisited}
7782
stepIndex={subStep.index}
7883
onNavItemClick={goToStepByIndex}
@@ -117,7 +122,7 @@ export const WizardNavInternal = ({ nav, isStepVisitRequired, isNavExpanded }: W
117122
id={step.id}
118123
content={step.name}
119124
isCurrent={activeStep?.id === step.id}
120-
isDisabled={step.isDisabled || (isStepVisitRequired && !step.isVisited)}
125+
isDisabled={isStepDisabled}
121126
isVisited={step.isVisited}
122127
stepIndex={step.index}
123128
onNavItemClick={goToStepByIndex}

packages/react-core/src/next/components/Wizard/WizardStep.tsx

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@ export interface WizardStepProps {
3333
}
3434

3535
export const WizardStep = ({ children, steps: _subSteps, ...props }: WizardStepProps) => {
36-
const { activeStep, steps, setStep, setSteps } = useWizardContext();
36+
const { activeStep, setStep } = useWizardContext();
3737
const { id, name, body, isDisabled, isHidden, navItem, footer, status } = props;
38-
const isHiddenRef = React.useRef(isHidden);
3938

4039
// Update step in context when props change or when the step is active has yet to be marked as visited.
4140
React.useEffect(() => {
@@ -52,28 +51,6 @@ export const WizardStep = ({ children, steps: _subSteps, ...props }: WizardStepP
5251
});
5352
}, [body, footer, id, isDisabled, isHidden, name, navItem, status, activeStep?.id, activeStep?.isVisited, setStep]);
5453

55-
// If the step was previously hidden and not visited yet, when it is shown,
56-
// all steps beyond it should be disabled to ensure it is visited.
57-
React.useEffect(() => {
58-
if (isHiddenRef.current && !isHidden) {
59-
const currentStep = steps.find(step => step.id === id);
60-
61-
setSteps(prevSteps =>
62-
prevSteps.map(prevStep => {
63-
if (prevStep.index > currentStep.index && prevStep.isVisited && !currentStep.isVisited) {
64-
return { ...prevStep, isVisited: false };
65-
}
66-
67-
return prevStep;
68-
})
69-
);
70-
}
71-
72-
if (isHiddenRef.current !== isHidden) {
73-
isHiddenRef.current = isHidden;
74-
}
75-
}, [id, isHidden, setSteps, steps]);
76-
7754
return <>{children}</>;
7855
};
7956

packages/react-core/src/next/components/Wizard/hooks/useGetMergedSteps.tsx

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)