From a18513c31f49a40dbde7693c80ef4cc4ad86faa2 Mon Sep 17 00:00:00 2001 From: afc163 Date: Thu, 6 Jul 2023 15:21:19 +0800 Subject: [PATCH] fix: Cascader should not clear search input when press left/right key (#416) close https://github.com/ant-design/ant-design/issues/43401 --- examples/adjust-overflow.tsx | 2 +- src/OptionList/useKeyboard.ts | 10 ++++++++-- tests/keyboard.spec.tsx | 13 +++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/examples/adjust-overflow.tsx b/examples/adjust-overflow.tsx index 7e789ff8..8108611d 100644 --- a/examples/adjust-overflow.tsx +++ b/examples/adjust-overflow.tsx @@ -121,7 +121,7 @@ const placements = { function Demo() { return ( -
+


diff --git a/src/OptionList/useKeyboard.ts b/src/OptionList/useKeyboard.ts index 19070baf..5eb852b9 100644 --- a/src/OptionList/useKeyboard.ts +++ b/src/OptionList/useKeyboard.ts @@ -1,7 +1,7 @@ -import * as React from 'react'; -import type { RefOptionListProps } from 'rc-select/lib/OptionList'; import { useBaseProps } from 'rc-select'; +import type { RefOptionListProps } from 'rc-select/lib/OptionList'; import KeyCode from 'rc-util/lib/KeyCode'; +import * as React from 'react'; import type { DefaultOptionType, InternalFieldNames, SingleValueType } from '../Cascader'; import { SEARCH_MARK } from '../hooks/useSearchOptions'; @@ -125,6 +125,9 @@ export default ( } case KeyCode.LEFT: { + if (searchValue) { + break; + } if (rtl) { nextColumn(); } else { @@ -134,6 +137,9 @@ export default ( } case KeyCode.RIGHT: { + if (searchValue) { + break; + } if (rtl) { prevColumn(); } else { diff --git a/tests/keyboard.spec.tsx b/tests/keyboard.spec.tsx index 08e47ad6..450b2ab4 100644 --- a/tests/keyboard.spec.tsx +++ b/tests/keyboard.spec.tsx @@ -227,6 +227,19 @@ describe('Cascader.Keyboard', () => { ).toHaveLength(0); }); + it('should not switch column when press left/right key in search input', () => { + wrapper = mount(); + wrapper.find('input').simulate('change', { + target: { + value: '123', + }, + }); + wrapper.find('input').simulate('keyDown', { which: KeyCode.LEFT }); + expect(wrapper.isOpen()).toBeTruthy(); + wrapper.find('input').simulate('keyDown', { which: KeyCode.RIGHT }); + expect(wrapper.isOpen()).toBeTruthy(); + }); + // TODO: This is strange that we need check on this it.skip('should not handle keyDown events when children specify the onKeyDown', () => { wrapper = mount(