UNPKG

react-select

Version:

A Select control built with and for ReactJS

65 lines (61 loc) 1.81 kB
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;