@@ -86,6 +86,7 @@ const InternalSegmentedOption: React.FC<{
8686 style ?: React . CSSProperties ;
8787 classNames ?: Partial < Record < SemanticName , string > > ;
8888 styles ?: Partial < Record < SemanticName , React . CSSProperties > > ;
89+ data : SegmentedLabeledOption ;
8990 disabled ?: boolean ;
9091 checked : boolean ;
9192 label : React . ReactNode ;
@@ -108,6 +109,7 @@ const InternalSegmentedOption: React.FC<{
108109 style,
109110 styles,
110111 classNames : segmentedClassNames ,
112+ data,
111113 disabled,
112114 checked,
113115 label,
@@ -162,13 +164,7 @@ const InternalSegmentedOption: React.FC<{
162164 </ div >
163165 </ label >
164166 ) ;
165- const itemInfo : SegmentedLabeledOption = {
166- label,
167- title,
168- value,
169- disabled,
170- } ;
171- return itemRender ( itemContent , { item : itemInfo } ) ;
167+ return itemRender ( itemContent , { item : data } ) ;
172168} ;
173169
174170const Segmented = React . forwardRef < HTMLDivElement , SegmentedProps > (
@@ -273,6 +269,54 @@ const Segmented = React.forwardRef<HTMLDivElement, SegmentedProps>(
273269 break ;
274270 }
275271 } ;
272+
273+ const renderOption = ( segmentedOption : SegmentedLabeledOption ) => {
274+ const {
275+ label,
276+ value : optionValue ,
277+ disabled : optionDisabled ,
278+ title,
279+ } = segmentedOption ;
280+ const optionData : SegmentedLabeledOption = {
281+ label,
282+ value : optionValue ,
283+ disabled : optionDisabled ,
284+ title,
285+ } ;
286+ return (
287+ < InternalSegmentedOption
288+ { ...segmentedOption }
289+ name = { name }
290+ data = { optionData }
291+ itemRender = { itemRender }
292+ key = { optionValue }
293+ prefixCls = { prefixCls }
294+ className = { classNames (
295+ segmentedOption . className ,
296+ `${ prefixCls } -item` ,
297+ segmentedClassNames ?. item ,
298+ {
299+ [ `${ prefixCls } -item-selected` ] :
300+ optionValue === rawValue && ! thumbShow ,
301+ [ `${ prefixCls } -item-focused` ] :
302+ isFocused && isKeyboard && optionValue === rawValue ,
303+ } ,
304+ ) }
305+ style = { styles ?. item }
306+ classNames = { segmentedClassNames }
307+ styles = { styles }
308+ checked = { optionValue === rawValue }
309+ onChange = { handleChange }
310+ onFocus = { handleFocus }
311+ onBlur = { handleBlur }
312+ onKeyDown = { handleKeyDown }
313+ onKeyUp = { handleKeyUp }
314+ onMouseDown = { handleMouseDown }
315+ disabled = { ! ! disabled || ! ! optionDisabled }
316+ />
317+ ) ;
318+ } ;
319+
276320 return (
277321 < div
278322 role = "radiogroup"
@@ -309,39 +353,7 @@ const Segmented = React.forwardRef<HTMLDivElement, SegmentedProps>(
309353 setThumbShow ( false ) ;
310354 } }
311355 />
312- { segmentedOptions . map ( ( segmentedOption ) => (
313- < InternalSegmentedOption
314- { ...segmentedOption }
315- name = { name }
316- itemRender = { itemRender }
317- key = { segmentedOption . value }
318- prefixCls = { prefixCls }
319- className = { classNames (
320- segmentedOption . className ,
321- `${ prefixCls } -item` ,
322- segmentedClassNames ?. item ,
323- {
324- [ `${ prefixCls } -item-selected` ] :
325- segmentedOption . value === rawValue && ! thumbShow ,
326- [ `${ prefixCls } -item-focused` ] :
327- isFocused &&
328- isKeyboard &&
329- segmentedOption . value === rawValue ,
330- } ,
331- ) }
332- style = { styles ?. item }
333- classNames = { segmentedClassNames }
334- styles = { styles }
335- checked = { segmentedOption . value === rawValue }
336- onChange = { handleChange }
337- onFocus = { handleFocus }
338- onBlur = { handleBlur }
339- onKeyDown = { handleKeyDown }
340- onKeyUp = { handleKeyUp }
341- onMouseDown = { handleMouseDown }
342- disabled = { ! ! disabled || ! ! segmentedOption . disabled }
343- />
344- ) ) }
356+ { segmentedOptions . map ( renderOption ) }
345357 </ div >
346358 </ div >
347359 ) ;
0 commit comments