From 3deb35fcad1f95c75cadc8efa2213ae3d21be3c3 Mon Sep 17 00:00:00 2001 From: Oleksandr Fediashov Date: Tue, 4 Sep 2018 13:48:04 +0300 Subject: [PATCH] fix(Dropdown): override onChange in DropdownSearchInput Signed-off-by: Oleksandr Fediashov --- src/modules/Dropdown/Dropdown.js | 9 ++++++- test/specs/modules/Dropdown/Dropdown-test.js | 27 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/modules/Dropdown/Dropdown.js b/src/modules/Dropdown/Dropdown.js index def550be39..e9e195c09b 100644 --- a/src/modules/Dropdown/Dropdown.js +++ b/src/modules/Dropdown/Dropdown.js @@ -1066,6 +1066,13 @@ export default class Dropdown extends Component { return _.isNil(tabIndex) ? 0 : tabIndex } + handleSearchInputOverrides = predefinedProps => ({ + onChange: (e, inputProps) => { + _.invoke(predefinedProps, 'onChange', e, inputProps) + this.handleSearchChange(e, inputProps) + }, + }) + // ---------------------------------------- // Behavior // ---------------------------------------- @@ -1195,11 +1202,11 @@ export default class Dropdown extends Component { return DropdownSearchInput.create(searchInput, { defaultProps: { inputRef: this.handleSearchRef, - onChange: this.handleSearchChange, style: { width: this.computeSearchInputWidth() }, tabIndex: this.computeSearchInputTabIndex(), value: searchQuery, }, + overrideProps: this.handleSearchInputOverrides, }) } diff --git a/test/specs/modules/Dropdown/Dropdown-test.js b/test/specs/modules/Dropdown/Dropdown-test.js index f4f0ab9efd..27a801663e 100644 --- a/test/specs/modules/Dropdown/Dropdown-test.js +++ b/test/specs/modules/Dropdown/Dropdown-test.js @@ -2029,6 +2029,33 @@ describe('Dropdown', () => { }) }) + describe('searchInput', () => { + it('overrides onChange handler', () => { + const onInputChange = sandbox.spy() + const onSearchChange = sandbox.spy() + + wrapperShallow( + , + ) + + wrapper + .find(DropdownSearchInput) + .shallow() + .simulate('change', { + stopPropagation: _.noop, + target: { value: faker.hacker.noun() }, + }) + + onInputChange.should.have.been.calledOnce() + onSearchChange.should.have.been.calledOnce() + }) + }) + describe('no results message', () => { it('is shown when a search yields no results', () => { const search = wrapperMount().find(