diff --git a/src/BaseSelect/index.tsx b/src/BaseSelect/index.tsx index 811ad01f..8a535d1f 100644 --- a/src/BaseSelect/index.tsx +++ b/src/BaseSelect/index.tsx @@ -435,7 +435,7 @@ const BaseSelect = React.forwardRef((props, ref) if (onSearch && mergedSearchValue !== newSearchText) { onSearch(newSearchText, { - source: fromTyping ? 'typing' : mergedShowSearch ? 'blur' : 'effect', + source: fromTyping ? 'typing' : 'effect', }); } @@ -455,7 +455,7 @@ const BaseSelect = React.forwardRef((props, ref) // Close will clean up single mode search text React.useEffect(() => { - if (!mergedOpen && !multiple && mode !== 'combobox') { + if (!mergedOpen && !multiple && mode && mode !== 'combobox') { onInternalSearch('', false, false); } }, [mergedOpen]); @@ -603,7 +603,7 @@ const BaseSelect = React.forwardRef((props, ref) // `tags` mode should move `searchValue` into values if (mode === 'tags') { onSearch(mergedSearchValue, { source: 'submit' }); - } else if (mode === 'multiple') { + } else if (!mode || mode === 'multiple') { // `multiple` mode only clean the search value but not trigger event onSearch('', { source: 'blur', diff --git a/tests/BaseSelect.test.tsx b/tests/BaseSelect.test.tsx index d0642e17..9f0a9cc7 100644 --- a/tests/BaseSelect.test.tsx +++ b/tests/BaseSelect.test.tsx @@ -125,7 +125,7 @@ describe('BaseSelect', () => { }); describe("Testing BaseSelect component's onContainerBlur params", () => { - it('mode with null, onContainerBlur params is blur', () => { + it('mode with null, onBlur source is blur', () => { const onSearch = jest.fn(); const { container } = render( { onDisplayValuesChange={() => {}} searchValue="1" showSearch - open onSearch={onSearch} OptionList={OptionList} emptyOptions @@ -148,7 +147,7 @@ describe('BaseSelect', () => { expect(onSearch).toHaveBeenCalledWith('', { source: 'blur' }); }); - it('mode with multiple, onContainerBlur params is blur', () => { + it('mode with multiple, onBlur source is blur', () => { const onSearch = jest.fn(); const { container } = render( { onDisplayValuesChange={() => {}} searchValue="1" showSearch - open onSearch={onSearch} OptionList={OptionList} emptyOptions diff --git a/tests/Select.test.tsx b/tests/Select.test.tsx index 9e69e02a..bc77cd96 100644 --- a/tests/Select.test.tsx +++ b/tests/Select.test.tsx @@ -595,6 +595,13 @@ describe('Select.Basic', () => { selectItem(container); expect(handleSearch).toHaveBeenCalledTimes(1); + // Should not trigger onBlur + fireEvent.change(container.querySelector('input'), { target: { value: '3' } }); + expect(handleSearch).toHaveBeenCalledTimes(2); + fireEvent.blur(container.querySelector('input')); + jest.runAllTimers(); + expect(handleSearch).toHaveBeenCalledTimes(2); + jest.useRealTimers(); });