Skip to content

Commit 529377d

Browse files
committed
feat: support onActive
1 parent faa487c commit 529377d

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

docs/examples/combobox.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ class Combobox extends React.Component {
1818
console.log('Ref:', this.textareaRef);
1919
}
2020

21+
onActive = (value) => {
22+
console.log('onActive', value);
23+
};
24+
2125
onChange = (value, option) => {
2226
console.log('onChange', value, option);
2327
this.setState({
@@ -83,6 +87,7 @@ class Combobox extends React.Component {
8387
value={value}
8488
mode="combobox"
8589
onChange={this.onChange}
90+
onActive={this.onActive}
8691
filterOption={(inputValue, option) => {
8792
if (!inputValue) {
8893
return true;

src/Select.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export interface SelectProps<ValueType = any, OptionType extends BaseOptionType
127127
// >>> Select
128128
onSelect?: SelectHandler<ArrayElementType<ValueType>, OptionType>;
129129
onDeselect?: SelectHandler<ArrayElementType<ValueType>, OptionType>;
130+
onActive?: (value: ValueType) => void;
130131

131132
// >>> Options
132133
/**
@@ -185,6 +186,7 @@ const Select = React.forwardRef<BaseSelectRef, SelectProps<any, DefaultOptionTyp
185186
// Select
186187
onSelect,
187188
onDeselect,
189+
onActive,
188190
popupMatchSelectWidth = true,
189191

190192
// Options
@@ -500,8 +502,10 @@ const Select = React.forwardRef<BaseSelectRef, SelectProps<any, DefaultOptionTyp
500502
if (backfill && mode === 'combobox' && active !== null && source === 'keyboard') {
501503
setActiveValue(String(active));
502504
}
505+
506+
onActive?.(active);
503507
},
504-
[backfill, mode],
508+
[backfill, mode, onActive],
505509
);
506510

507511
// ========================= OptionList =========================

tests/Accessibility.test.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ describe('Select.Accessibility', () => {
2323

2424
// https://github.com/ant-design/ant-design/issues/31850
2525
it('active index should keep', () => {
26+
const onActive = jest.fn();
27+
2628
const { container } = render(
2729
<Select
2830
showSearch
@@ -40,6 +42,7 @@ describe('Select.Accessibility', () => {
4042
value: 'light',
4143
},
4244
]}
45+
onActive={onActive}
4346
/>,
4447
);
4548

@@ -52,13 +55,18 @@ describe('Select.Accessibility', () => {
5255
document.querySelector('.rc-select-item-option-active .rc-select-item-option-content')
5356
.textContent,
5457
).toEqual('Bamboo');
58+
expect(onActive).toHaveBeenCalledWith('bamboo');
5559

5660
keyDown(container.querySelector('input')!, KeyCode.ENTER);
5761
expectOpen(container, false);
5862

5963
// Next Match
6064
fireEvent.change(container.querySelector('input')!, { target: { value: '' } });
65+
expect(onActive).toHaveBeenCalledWith('bamboo');
66+
fireEvent.change(container.querySelector('input')!, { target: { value: 'not exist' } });
67+
expect(onActive).toHaveBeenCalledWith(null);
6168
fireEvent.change(container.querySelector('input')!, { target: { value: 'g' } });
69+
expect(onActive).toHaveBeenCalledWith('light');
6270
jest.runAllTimers();
6371

6472
expectOpen(container);

0 commit comments

Comments
 (0)