Skip to content

Commit

Permalink
fix: search with enter not trigger correct change params (#253)
Browse files Browse the repository at this point in the history
* fix: search with enter should give correct value

* test: update test case
  • Loading branch information
zombieJ authored Mar 8, 2022
1 parent ac0dcf6 commit 8b2f678
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
16 changes: 14 additions & 2 deletions src/OptionList/useKeyboard.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import * as React from 'react';
import type { RefOptionListProps } from 'rc-select/lib/OptionList';
import { useBaseProps } from 'rc-select';
import KeyCode from 'rc-util/lib/KeyCode';
import type { DefaultOptionType, InternalFieldNames, SingleValueType } from '../Cascader';
import { useBaseProps } from 'rc-select';
import { SEARCH_MARK } from '../hooks/useSearchOptions';

export default (
ref: React.Ref<RefOptionListProps>,
Expand Down Expand Up @@ -151,7 +152,18 @@ export default (
// >>> Select
case KeyCode.ENTER: {
if (validActiveValueCells.length) {
onKeyBoardSelect(validActiveValueCells, lastActiveOptions[lastActiveIndex]);
const option = lastActiveOptions[lastActiveIndex];

// Search option should revert back of origin options
const originOptions: DefaultOptionType[] = option?.[SEARCH_MARK] || [];
if (originOptions.length) {
onKeyBoardSelect(
originOptions.map(opt => opt[fieldNames.value]),
originOptions[originOptions.length - 1],
);
} else {
onKeyBoardSelect(validActiveValueCells, lastActiveOptions[lastActiveIndex]);
}
}
break;
}
Expand Down
23 changes: 22 additions & 1 deletion tests/keyboard.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import { addressOptions } from './demoOptions';
describe('Cascader.Keyboard', () => {
let wrapper;
let selectedValue;
let selectedOptions;
let menus;
const onChange = value => {
const onChange = (value, options) => {
selectedValue = value;
selectedOptions = options;
};

beforeEach(() => {
Expand All @@ -18,6 +20,7 @@ describe('Cascader.Keyboard', () => {

afterEach(() => {
selectedValue = null;
selectedOptions = null;
menus = null;
});

Expand Down Expand Up @@ -73,6 +76,24 @@ describe('Cascader.Keyboard', () => {
wrapper.find('input').simulate('keyDown', { which: KeyCode.ENTER });
expect(wrapper.isOpen()).toBeFalsy();
expect(selectedValue).toEqual(['zj', 'hangzhou', 'yuhang']);
expect(selectedOptions).toEqual([
addressOptions[1],
addressOptions[1].children[0],
addressOptions[1].children[0].children[0],
]);
});

it('enter on search', () => {
wrapper.find('input').simulate('change', { target: { value: '余杭' } });
wrapper.find('input').simulate('keyDown', { which: KeyCode.DOWN });
wrapper.find('input').simulate('keyDown', { which: KeyCode.ENTER });

expect(selectedValue).toEqual(['zj', 'hangzhou', 'yuhang']);
expect(selectedOptions).toEqual([
addressOptions[1],
addressOptions[1].children[0],
addressOptions[1].children[0].children[0],
]);
});

it('rtl', () => {
Expand Down

1 comment on commit 8b2f678

@vercel
Copy link

@vercel vercel bot commented on 8b2f678 Mar 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.