Skip to content

Commit 0fefb75

Browse files
author
刘欢
committed
feat: add props to itemRender
1 parent 8ee5eef commit 0fefb75

File tree

1 file changed

+33
-24
lines changed

1 file changed

+33
-24
lines changed

src/index.tsx

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export interface SegmentedProps<ValueType = SegmentedValue>
4444
name?: string;
4545
classNames?: Partial<Record<SemanticName, string>>;
4646
styles?: Partial<Record<SemanticName, React.CSSProperties>>;
47-
itemRender?: (node: React.ReactNode) => React.ReactNode;
47+
itemRender?: (node: React.ReactNode, itemInfo: ItemInfo) => React.ReactNode;
4848
}
4949

5050
function getValidTitle(option: SegmentedLabeledOption) {
@@ -75,7 +75,7 @@ function normalizeOptions(options: SegmentedOptions): SegmentedLabeledOption[] {
7575
});
7676
}
7777

78-
const InternalSegmentedOption: React.FC<{
78+
interface ItemInfo {
7979
prefixCls: string;
8080
className?: string;
8181
style?: React.CSSProperties;
@@ -87,7 +87,6 @@ const InternalSegmentedOption: React.FC<{
8787
title?: string;
8888
value: SegmentedRawOption;
8989
name?: string;
90-
itemRender?: (node: React.ReactNode) => React.ReactNode;
9190
onChange: (
9291
e: React.ChangeEvent<HTMLInputElement>,
9392
value: SegmentedRawOption,
@@ -97,26 +96,33 @@ const InternalSegmentedOption: React.FC<{
9796
onKeyDown: (e: React.KeyboardEvent) => void;
9897
onKeyUp: (e: React.KeyboardEvent) => void;
9998
onMouseDown: () => void;
100-
}> = ({
101-
prefixCls,
102-
className,
103-
style,
104-
styles,
105-
classNames: segmentedClassNames,
106-
disabled,
107-
checked,
108-
label,
109-
title,
110-
value,
111-
name,
112-
itemRender = (node: React.ReactNode) => node,
113-
onChange,
114-
onFocus,
115-
onBlur,
116-
onKeyDown,
117-
onKeyUp,
118-
onMouseDown,
119-
}) => {
99+
}
100+
101+
const InternalSegmentedOption: React.FC<
102+
{
103+
itemRender?: (node: React.ReactNode, itemInfo: ItemInfo) => React.ReactNode;
104+
} & ItemInfo
105+
> = (props) => {
106+
const {
107+
prefixCls,
108+
className,
109+
style,
110+
styles,
111+
classNames: segmentedClassNames,
112+
disabled,
113+
checked,
114+
label,
115+
title,
116+
value,
117+
name,
118+
itemRender = (node: React.ReactNode) => node,
119+
onChange,
120+
onFocus,
121+
onBlur,
122+
onKeyDown,
123+
onKeyUp,
124+
onMouseDown,
125+
} = props;
120126
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
121127
if (disabled) {
122128
return;
@@ -157,7 +163,10 @@ const InternalSegmentedOption: React.FC<{
157163
</div>
158164
</label>
159165
);
160-
return itemRender(ItemContent);
166+
167+
const renderProps = { ...props };
168+
delete renderProps.itemRender;
169+
return itemRender(ItemContent, renderProps);
161170
};
162171

163172
const Segmented = React.forwardRef<HTMLDivElement, SegmentedProps>(

0 commit comments

Comments
 (0)