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(
);
@@ -122,11 +128,13 @@ describe('Select', function() {
var createControlWithWrapper = function (props) {
onChange = sinon.spy();
+ onInputChange = sinon.spy();
wrapper = TestUtils.renderIntoDocument(
);
@@ -193,6 +201,12 @@ describe('Select', function() {
expect(node, 'queried for', '.Select-option', 'to have length', 2);
});
+ it('should pass input value when entering text', function () {
+ typeSearchText('a');
+ enterSingleCharacter('a');
+ expect(onInputChange, 'was called with', 'a');
+ });
+
it('should filter case insensitively', function () {
typeSearchText('t');