Skip to content

Commit 7476c9b

Browse files
committed
fix: prevent extra props from being passed to selected item display
1 parent b04dc0f commit 7476c9b

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

src/SelectInput/Content/SingleContent.tsx

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const SingleContent = React.forwardRef<HTMLInputElement, SharedContentProps>(
3131

3232
// Extract option props, excluding label and value, and handle className/style merging
3333
const optionProps = React.useMemo(() => {
34-
let restProps: React.HTMLAttributes<HTMLDivElement> = {
34+
const restProps: React.HTMLAttributes<HTMLDivElement> = {
3535
className: `${prefixCls}-content-value`,
3636
style: {
3737
visibility: mergedSearchValue ? 'hidden' : 'visible',
@@ -41,15 +41,12 @@ const SingleContent = React.forwardRef<HTMLInputElement, SharedContentProps>(
4141
if (displayValue && selectContext?.flattenOptions) {
4242
const option = selectContext.flattenOptions.find((opt) => opt.value === displayValue.value);
4343
if (option?.data) {
44-
const { label, value, className, style, key, ...rest } = option.data;
45-
46-
restProps = {
47-
...restProps,
48-
...rest,
44+
const { className, style } = option.data;
45+
Object.assign(restProps, {
4946
title: getTitle(option.data),
5047
className: clsx(restProps.className, className),
5148
style: { ...restProps.style, ...style },
52-
};
49+
});
5350
}
5451
}
5552

tests/Select.test.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2843,4 +2843,32 @@ describe('Select.Basic', () => {
28432843
expect(select).toHaveClass('rc-select-focused');
28442844
});
28452845
});
2846+
2847+
it('should not pass extra props to the selected item display', () => {
2848+
const { container } = render(
2849+
<Select
2850+
value="1"
2851+
open
2852+
options={[
2853+
{
2854+
value: '1',
2855+
label: 'One',
2856+
className: 'my-option-class',
2857+
style: { color: 'red' },
2858+
title: 'my-title',
2859+
['xxx' as any]: 'should-not-be-here',
2860+
},
2861+
]}
2862+
/>,
2863+
);
2864+
2865+
const selectedItem = container.querySelector('.rc-select-content-value');
2866+
2867+
expect(selectedItem).toBeTruthy();
2868+
expect(selectedItem).toHaveClass('my-option-class');
2869+
expect(selectedItem).toHaveStyle({ color: 'red' });
2870+
expect(selectedItem).toHaveAttribute('title', 'my-title');
2871+
2872+
expect(selectedItem).not.toHaveAttribute('xxx');
2873+
});
28462874
});

0 commit comments

Comments
 (0)