Skip to content

Commit f252168

Browse files
authored
Merge branch 'master' into dropdown-to-popup
2 parents dc4a7d4 + fa18f57 commit f252168

File tree

5 files changed

+38
-4
lines changed

5 files changed

+38
-4
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"@rc-component/trigger": "^2.1.1",
5454
"classnames": "2.x",
5555
"rc-motion": "^2.0.1",
56-
"rc-overflow": "^1.3.1",
56+
"rc-overflow": "^1.4.0",
5757
"rc-util": "^5.16.1",
5858
"rc-virtual-list": "^3.5.2"
5959
},
@@ -63,7 +63,7 @@
6363
"@testing-library/react": "^15.0.6",
6464
"@types/jest": "^29.5.12",
6565
"@types/react": "^18.2.45",
66-
"@types/react-dom": "^18.2.18",
66+
"@types/react-dom": "^19.0.1",
6767
"babel-jest": "^29.6.1",
6868
"cross-env": "^7.0.0",
6969
"dumi": "^2.2.13",

src/BaseSelect/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export type CustomTagProps = {
6868
onClose: (event?: React.MouseEvent<HTMLElement, MouseEvent>) => void;
6969
closable: boolean;
7070
isMaxTag: boolean;
71+
index: number;
7172
};
7273

7374
export interface BaseSelectRef {

src/Selector/MultipleSelector.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ const SelectSelector: React.FC<SelectorProps> = (props) => {
131131
closable?: boolean,
132132
onClose?: React.MouseEventHandler,
133133
isMaxTag?: boolean,
134+
info?: { index: number },
134135
) => {
135136
const onMouseDown = (e: React.MouseEvent) => {
136137
onPreventMouseDown(e);
@@ -141,6 +142,7 @@ const SelectSelector: React.FC<SelectorProps> = (props) => {
141142
{tagRender({
142143
label: content,
143144
value,
145+
index: info?.index,
144146
disabled: itemDisabled,
145147
closable,
146148
onClose,
@@ -150,7 +152,7 @@ const SelectSelector: React.FC<SelectorProps> = (props) => {
150152
);
151153
};
152154

153-
const renderItem = (valueItem: DisplayValueType) => {
155+
const renderItem = (valueItem: DisplayValueType, info: { index: number }) => {
154156
const { disabled: itemDisabled, label, value } = valueItem;
155157
const closable = !disabled && !itemDisabled;
156158

@@ -173,7 +175,15 @@ const SelectSelector: React.FC<SelectorProps> = (props) => {
173175
};
174176

175177
return typeof tagRender === 'function'
176-
? customizeRenderSelector(value, displayLabel, itemDisabled, closable, onClose)
178+
? customizeRenderSelector(
179+
value,
180+
displayLabel,
181+
itemDisabled,
182+
closable,
183+
onClose,
184+
undefined,
185+
info,
186+
)
177187
: defaultRenderSelector(valueItem, displayLabel, itemDisabled, closable, onClose);
178188
};
179189

src/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface DisplayValueType {
1616
label?: React.ReactNode;
1717
title?: React.ReactNode;
1818
disabled?: boolean;
19+
index?: number;
1920
}
2021

2122
export type RenderNode = React.ReactNode | ((props: any) => React.ReactNode);

tests/Tags.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import removeSelectedTest from './shared/removeSelectedTest';
1414
import maxTagRenderTest from './shared/maxTagRenderTest';
1515
import throwOptionValue from './shared/throwOptionValue';
1616
import { injectRunAllTimers, findSelection, expectOpen, toggleOpen, keyDown } from './utils/common';
17+
import type { CustomTagProps } from '@/BaseSelect';
1718

1819
describe('Select.Tags', () => {
1920
injectRunAllTimers(jest);
@@ -301,6 +302,27 @@ describe('Select.Tags', () => {
301302
expectOpen(container, false);
302303
});
303304

305+
it('tagRender props have index', () => {
306+
const tagRender = (props: CustomTagProps) => {
307+
const { index: tagIndex, label } = props;
308+
return <div className={`${label}-${tagIndex}-test`}>{label}</div>;
309+
};
310+
const values = ['light', 'dark'];
311+
const { container } = render(
312+
<Select
313+
mode="tags"
314+
value={values}
315+
tagRender={tagRender}
316+
options={[{ value: 'light' }, { value: 'dark' }]}
317+
/>,
318+
);
319+
values.forEach((value, index) => {
320+
const expectedText = `.${value}-${index}-test`;
321+
const nodes = container.querySelectorAll(expectedText);
322+
expect(nodes).toHaveLength(1);
323+
});
324+
});
325+
304326
it('disabled', () => {
305327
const tagRender = jest.fn();
306328
render(

0 commit comments

Comments
 (0)