@@ -2,25 +2,30 @@ import { Box, IconProps, Stack, Step, StepConnector, StepLabel, Stepper } from '
2
2
import { stepConnectorClasses } from '@mui/material/StepConnector' ;
3
3
import { StepIconProps } from '@mui/material/StepIcon' ;
4
4
import { styled } from '@mui/system' ;
5
- import React , { useState } from 'react' ;
5
+ import React , { useMemo , useState } from 'react' ;
6
6
7
7
interface ColorlibStepIconPropsI extends StepIconProps {
8
8
icons : React . ComponentType < IconProps > [ ] ;
9
9
}
10
10
11
11
interface StepI {
12
12
label : string ;
13
- component : React . ComponentType < CustomizedStepperPropsI > ;
13
+ component : React . ComponentType ;
14
14
icon : React . ComponentType < IconProps > ;
15
15
}
16
16
17
17
interface UseStepperOptionsI {
18
18
steps : StepI [ ] ;
19
19
}
20
20
21
- // type SharedData = unknown;
22
-
23
21
interface CustomizedStepperPropsI {
22
+ activeStep : number ;
23
+ stepLabels : string [ ] ;
24
+ children : React . ReactNode ;
25
+ icons : React . ComponentType < IconProps > [ ] ;
26
+ }
27
+
28
+ interface UseStepperI {
24
29
steps : StepI [ ] ;
25
30
activeStep : number ;
26
31
setActiveStep : React . Dispatch < React . SetStateAction < number > > ;
@@ -29,8 +34,9 @@ interface CustomizedStepperPropsI {
29
34
goToStep : ( step : number ) => void ;
30
35
canGoBack : boolean ;
31
36
canGoForward : boolean ;
32
- // sharedData: SharedData;
33
- // setSharedData: React.Dispatch<React.SetStateAction<null>>;
37
+ stepLabels : string [ ] ;
38
+ icons : React . ComponentType < IconProps > [ ] ;
39
+ activeStepComponent : React . ComponentType ;
34
40
}
35
41
36
42
const ColorlibConnector = styled ( StepConnector ) ( ( ) => ( {
@@ -100,38 +106,33 @@ function ColorlibStepIcon(props: ColorlibStepIconPropsI) {
100
106
}
101
107
102
108
const CustomizedStepper : React . FC < CustomizedStepperPropsI > = ( {
103
- steps ,
109
+ stepLabels ,
104
110
activeStep,
105
- ...otherProps
111
+ children,
112
+ icons
106
113
} ) => {
107
- const icons = steps . map ( ( step ) => step . icon ) ;
108
- const ActiveComponent = steps [ activeStep ] . component ;
109
-
110
114
return (
111
115
< Stack spacing = { 2 } >
112
116
< Stack direction = "row" justifyContent = "center" >
113
117
< Stepper alternativeLabel activeStep = { activeStep } connector = { < ColorlibConnector /> } >
114
- { steps . map ( ( step ) => (
115
- < Step key = { step . label } >
118
+ { stepLabels . map ( ( label ) => (
119
+ < Step key = { label } >
116
120
< StepLabel
117
121
StepIconComponent = { ( props ) => < ColorlibStepIcon { ...props } icons = { icons } /> }
118
122
>
119
- { step . label }
123
+ { label }
120
124
</ StepLabel >
121
125
</ Step >
122
126
) ) }
123
127
</ Stepper >
124
128
</ Stack >
125
- < StepContentWrapper >
126
- < ActiveComponent activeStep = { activeStep } { ...otherProps } steps = { steps } />
127
- </ StepContentWrapper >
129
+ < StepContentWrapper > { children } </ StepContentWrapper >
128
130
</ Stack >
129
131
) ;
130
132
} ;
131
133
132
- export const useStepper = ( { steps } : UseStepperOptionsI ) : CustomizedStepperPropsI => {
134
+ export const useStepper = ( { steps } : UseStepperOptionsI ) : UseStepperI => {
133
135
const [ activeStep , setActiveStep ] = useState ( 0 ) ;
134
- // const [sharedData, setSharedData] = useState({});
135
136
136
137
const handleNext = ( ) => {
137
138
if ( activeStep === steps . length - 1 ) {
@@ -158,17 +159,23 @@ export const useStepper = ({ steps }: UseStepperOptionsI): CustomizedStepperProp
158
159
const canGoBack = activeStep > 0 ;
159
160
const canGoForward = activeStep < steps . length - 1 ;
160
161
162
+ const icons = useMemo ( ( ) => steps . map ( ( step ) => step . icon ) , [ steps ] ) ;
163
+ const stepLabels = useMemo ( ( ) => steps . map ( ( step ) => step . label ) , [ steps ] ) ;
164
+
165
+ const activeStepComponent = steps [ activeStep ] . component ;
166
+
161
167
return {
162
168
activeStep,
163
169
setActiveStep,
164
- // sharedData,
165
- // setSharedData,
166
170
handleNext,
167
171
goBack,
168
172
goToStep,
169
173
steps,
170
174
canGoBack,
171
- canGoForward
175
+ stepLabels,
176
+ icons,
177
+ canGoForward,
178
+ activeStepComponent
172
179
} ;
173
180
} ;
174
181
0 commit comments