Guest User

Untitled

a guest
Jun 20th, 2018
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. import * as React from "react";
  2. import { hot } from "react-hot-loader";
  3. import trim from "lib/trim";
  4. import "./dropdown.scss";
  5.  
  6. interface IDropdownProps
  7. extends React.DetailedHTMLProps<
  8. React.SelectHTMLAttributes<HTMLSelectElement>,
  9. HTMLSelectElement
  10. > {
  11. list: Array<string | number>;
  12. label?: string;
  13. role?: "primary" | "accent" | "error" | "warning" | "success" | "info" ;
  14. outline?: boolean;
  15. action?(): any;
  16. }
  17.  
  18. interface IDropdownState {
  19. value: number | string;
  20. }
  21.  
  22. class Dropdown extends React.PureComponent<IDropdownProps, IDropdownState> {
  23. constructor(props) {
  24. super(props);
  25.  
  26. this.state = { value: "" }
  27. }
  28. onChange(e) {
  29. this.setState({
  30. value: e.target.value
  31. })
  32. e.preventDefault();
  33. e.stopPropagation();
  34. this.props.action();
  35. }
  36. render() {
  37. return (
  38. <div
  39. className={trim(`dropdown
  40. dropdown--${this.props.outline ? "outline--" : ""}${this.props.role || "default"}
  41. ${this.props.disabled ? "dropdown--disabled" : ""}
  42. `)}
  43. >
  44. {this.props.label ? <label>{this.props.label}</label> : "no label" }
  45. <select
  46. disabled={this.props.disabled}
  47. value={this.state.value}
  48. onChange={this.onChange.bind(this)}
  49. >
  50. {this.props.list.map(x => {
  51. return <option value={x} key={x} >{x}</option>
  52. })}
  53. </select>
  54. </div>
  55.  
  56. )
  57. }
  58. }
  59.  
  60. export default hot(module)(Dropdown);
Add Comment
Please, Sign In to add comment