react-select
Version:
A Select control built with and for ReactJS
65 lines (61 loc) • 1.81 kB
JavaScript
import React from 'react';
import Select from 'react-select';
import fetch from 'isomorphic-fetch';
const GithubUsers = React.createClass({
displayName: 'GithubUsers',
propTypes: {
label: React.PropTypes.string,
},
getInitialState () {
return {
multi: true
};
},
onChange (value) {
this.setState({
value: value,
});
},
switchToMulti () {
this.setState({
multi: true,
value: [this.state.value],
});
},
switchToSingle () {
this.setState({
multi: false,
value: this.state.value ? this.state.value[0] : null
});
},
getUsers (input) {
return fetch(`https://api.github.com/search/users?q=${input}`)
.then((response) => response.json())
.then((json) => {
return { options: json.items };
});
},
gotoUser (value, event) {
window.open(value.html_url);
},
render () {
return (
<div className="section">
<h3 className="section-heading">{this.props.label}</h3>
<Select.Async multi={this.state.multi} value={this.state.value} onChange={this.onChange} onValueClick={this.gotoUser} valueKey="id" labelKey="login" loadOptions={this.getUsers} minimumInput={1} backspaceRemoves={false} />
<div className="checkbox-list">
<label className="checkbox">
<input type="radio" className="checkbox-control" checked={this.state.multi} onChange={this.switchToMulti}/>
<span className="checkbox-label">Multiselect</span>
</label>
<label className="checkbox">
<input type="radio" className="checkbox-control" checked={!this.state.multi} onChange={this.switchToSingle}/>
<span className="checkbox-label">Single Value</span>
</label>
</div>
<div className="hint">This example uses fetch.js for showing Async options with Promises</div>
</div>
);
}
});
module.exports = GithubUsers;