Skip to content

Commit b876296

Browse files
author
刘欢
committed
feat: pass optionData to SegmentedOption
1 parent b2e481b commit b876296

1 file changed

Lines changed: 52 additions & 40 deletions

File tree

src/index.tsx

Lines changed: 52 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

174170
const 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

Comments
 (0)