1 | var React = require("react");
|
2 | var PropTypes = React.PropTypes;
|
3 | var PureRenderMixin = React.addons.PureRenderMixin;
|
4 |
|
5 | var Dropdown = React.createClass({
|
6 |
|
7 | propTypes: {
|
8 | options: PropTypes.arrayOf(PropTypes.shape({
|
9 | value: PropTypes.any.isRequired,
|
10 | content: PropTypes.node
|
11 | })).isRequired,
|
12 | onChange: PropTypes.func.isRequired,
|
13 | className: PropTypes.string
|
14 | },
|
15 |
|
16 | _handleSelect: function(e) {
|
17 | var val = e.target.value;
|
18 | this.props.onChange(val);
|
19 | },
|
20 |
|
21 | render: function() {
|
22 | var dropdownOptions = this.props.options.map(function(option, i) {
|
23 | return <DropdownOption
|
24 | value={option.value}
|
25 | content={option.content}
|
26 | key={i}
|
27 | />;
|
28 | });
|
29 | return (
|
30 | <div
|
31 | className={["cb-dropdown", this.props.className].join(" ")}
|
32 | >
|
33 | <select
|
34 | className="cb-dropdown-select"
|
35 | onChange={this._handleSelect}
|
36 | key={this.props.id}
|
37 | value={this.props.value}
|
38 | >
|
39 | {dropdownOptions}
|
40 | </select>
|
41 | </div>
|
42 | )
|
43 | }
|
44 | });
|
45 |
|
46 | var DropdownOption = React.createClass({
|
47 |
|
48 | mixins: [ PureRenderMixin ],
|
49 |
|
50 | render: function() {
|
51 | return <option value={this.props.value}>{this.props.content}</option>;
|
52 | }
|
53 | });
|
54 |
|
55 | module.exports = Dropdown;
|
56 |
|
\ | No newline at end of file |