blob: 75a456955387a33dcd6931548898c376ffa25fa7 [file] [log] [blame]
var Bacon = require('baconjs').Bacon;
var SearchBar = React.createClass({
propTypes: {
initialValue: React.PropTypes.string.isRequired,
placeHolderText: React.PropTypes.string.isRequired,
onUserInput: React.PropTypes.func.isRequired
},
getInitialState: function() {
return { textValue: this.props.initialValue }
},
handleChange: function(event) {
this.setState({ textValue: event.target.value });
},
componentDidMount: function() {
var self = this,
delay = 200, // in ms
inputElem = React.findDOMNode(this.refs.filterTextInput);
// Convert keydown events to stream
var text = Bacon.fromEvent(inputElem, 'keydown')
.debounce(delay)
.map(function(event) {
return event.target.value;
})
.skipDuplicates();
var textObservable = text.flatMapLatest(function(query) {
return Bacon.once(query);
});
textObservable.onValue(function(val) {
self.props.onUserInput(val);
});
},
render: function() {
return (
<div className="contentwrap">
<div id="search">
<input
className="searchBox"
type="search"
autoComplete="off"
placeholder={this.props.placeHolderText}
value={this.state.textValue}
onChange={this.handleChange}
ref="filterTextInput"
/>
</div>
</div>
);
}
});
module.exports = SearchBar;