diff --git a/src/Select.js b/src/Select.js index bb4c2688b8..ff27da46b2 100644 --- a/src/Select.js +++ b/src/Select.js @@ -41,6 +41,7 @@ var Select = React.createClass({ onBlur: React.PropTypes.func, // onBlur handler: function(event) {} onChange: React.PropTypes.func, // onChange handler: function(newValue) {} onFocus: React.PropTypes.func, // onFocus handler: function(event) {} + onInputChange: React.PropTypes.func, // onInputChange handler: function(inputValue) {} onOptionLabelClick: React.PropTypes.func, // onCLick handler for value labels: function (value, event) {} optionComponent: React.PropTypes.func, // option component to render in dropdown optionRenderer: React.PropTypes.func, // optionRenderer: function(option) {} @@ -77,6 +78,7 @@ var Select = React.createClass({ newOptionCreator: undefined, noResultsText: 'No results found', onChange: undefined, + onInputChange: undefined, onOptionLabelClick: undefined, optionComponent: Option, options: undefined, @@ -486,6 +488,10 @@ var Select = React.createClass({ // the latest value before setState() has completed. this._optionsFilterString = event.target.value; + if (this.props.onInputChange) { + this.props.onInputChange(event.target.value); + } + if (this.props.asyncOptions) { this.setState({ isLoading: true, diff --git a/test/Select-test.js b/test/Select-test.js index a070a122ac..98a8d99b4d 100644 --- a/test/Select-test.js +++ b/test/Select-test.js @@ -45,7 +45,7 @@ class PropsWrapper extends React.Component { } describe('Select', function() { - var options, onChange; + var options, onChange, onInputChange; var instance, wrapper; var searchInputNode; @@ -53,6 +53,10 @@ describe('Select', function() { return React.findDOMNode(instance).querySelector('.Select-control'); } + function enterSingleCharacter() { + TestUtils.Simulate.keyDown(searchInputNode, { keyCode: 65, key: 'a' }); + } + function pressEnterToAccept() { TestUtils.Simulate.keyDown(searchInputNode, { keyCode: 13, key: 'Enter' }); } @@ -107,10 +111,12 @@ describe('Select', function() { var createControl = function(props) { onChange = sinon.spy(); + onInputChange = sinon.spy(); // Render an instance of the component instance = TestUtils.renderIntoDocument(