diff --git a/lib/Autocomplete.js b/lib/Autocomplete.js index fe479517..63faaa8d 100644 --- a/lib/Autocomplete.js +++ b/lib/Autocomplete.js @@ -293,6 +293,8 @@ let Autocomplete = React.createClass({ handleInputClick () { if (this.state.isOpen === false) this.setState({ isOpen: true }) + else if (this.state.highlightedIndex !== null) + this.selectItemFromMouse(this.getFilteredItems()[this.state.highlightedIndex]) }, render () { diff --git a/lib/__tests__/Autocomplete-test.js b/lib/__tests__/Autocomplete-test.js index 0ed62408..9f94291e 100644 --- a/lib/__tests__/Autocomplete-test.js +++ b/lib/__tests__/Autocomplete-test.js @@ -222,6 +222,27 @@ describe('Autocomplete kewDown->Escape event handlers', () => { }); +describe('Autocomplete click event handlers', () => { + + var autocompleteWrapper = mount(AutocompleteComponentJSX({})); + var autocompleteInputWrapper = autocompleteWrapper.find('input'); + + it('should update input value from selected menu item and close the menu', () => { + autocompleteWrapper.setState({ isOpen: true }); + autocompleteInputWrapper.simulate('focus'); + autocompleteInputWrapper.simulate('change', { target: { value: 'Ar' } }); + + // simulate keyUp of last key, triggering autocomplete suggestion + selection of the suggestion in the menu + autocompleteInputWrapper.simulate('keyUp', { key : 'r', keyCode: 82, which: 82 }); + + // Click inside input, updating state.value with the selected Autocomplete suggestion + autocompleteInputWrapper.simulate('click'); + expect(autocompleteWrapper.state('value')).to.equal('Arizona'); + expect(autocompleteWrapper.state('isOpen')).to.be.false; + }); + +}); + // Component method unit tests describe('Autocomplete#renderMenu', () => {