22import cls from 'classnames' ;
33import React from 'react' ;
44import Step from './Step' ;
5+ import { StepsContext , type StepsContextProps } from './Context' ;
6+ import type StepIcon from './StepIcon' ;
57
68export type Status = 'error' | 'process' | 'finish' | 'wait' ;
79
10+ const EmptyObject = { } ;
11+
812export type SemanticName =
913 | 'root'
1014 | 'item'
@@ -65,7 +69,14 @@ export interface StepsProps {
6569 onChange ?: ( current : number ) => void ;
6670
6771 // render
68- iconRender ?: ( info : RenderInfo ) => React . ReactNode ;
72+ iconRender ?: (
73+ originNode : React . ReactElement ,
74+ info : RenderInfo & {
75+ components : {
76+ icon : typeof StepIcon ;
77+ } ;
78+ } ,
79+ ) => React . ReactNode ;
6980 itemRender ?: ( originNode : React . ReactElement , info : RenderInfo ) => React . ReactNode ;
7081 itemWrapperRender ?: ( originNode : React . ReactElement ) => React . ReactNode ;
7182}
@@ -76,8 +87,8 @@ export default function Steps(props: StepsProps) {
7687 prefixCls = 'rc-steps' ,
7788 style,
7889 className,
79- classNames = { } ,
80- styles = { } ,
90+ classNames = EmptyObject as NonNullable < StepsProps [ 'classNames' ] > ,
91+ styles = EmptyObject as NonNullable < StepsProps [ 'styles' ] > ,
8192 rootClassName,
8293
8394 // layout
@@ -143,6 +154,16 @@ export default function Steps(props: StepsProps) {
143154 }
144155 } ;
145156
157+ // ============================ contexts ============================
158+ const stepIconContext = React . useMemo < StepsContextProps > (
159+ ( ) => ( {
160+ prefixCls,
161+ classNames,
162+ styles,
163+ } ) ,
164+ [ prefixCls , classNames , styles ] ,
165+ ) ;
166+
146167 // ============================= render =============================
147168 const renderStep = ( item : StepItem , index : number ) => {
148169 const stepIndex = initial + index ;
@@ -186,7 +207,9 @@ export default function Steps(props: StepsProps) {
186207 } }
187208 { ...restProps }
188209 >
189- { mergedItems . map < React . ReactNode > ( renderStep ) }
210+ < StepsContext . Provider value = { stepIconContext } >
211+ { mergedItems . map < React . ReactNode > ( renderStep ) }
212+ </ StepsContext . Provider >
190213 </ div >
191214 ) ;
192215}
0 commit comments