Guest User

Untitled

a guest
Nov 22nd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. import React, { PureComponent } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { FormField } from 'react-form';
  4. import Select from 'react-select';
  5. import 'react-select/dist/react-select.css';
  6.  
  7. // WIP custom message component
  8. const Message = ({ color, message }) => (
  9. <div style={{ color }}>
  10. <small>{JSON.stringify(message)}</small>
  11. </div>
  12. );
  13.  
  14. class Autocomplete extends PureComponent {
  15. constructor(props) {
  16. super(props);
  17.  
  18. this.handleChange = this.handleChange.bind(this);
  19. this.handleBlur = this.handleBlur.bind(this);
  20. }
  21.  
  22. handleChange(selected) {
  23. const { fieldApi: { setValue } } = this.props;
  24. setValue(selected);
  25. }
  26.  
  27. handleBlur() {
  28. this.props.fieldApi.setTouched();
  29. }
  30.  
  31. render() {
  32. const {
  33. getOptions,
  34. placeholder,
  35. fieldApi: {
  36. getError,
  37. getWarning,
  38. getSuccess,
  39. getFieldName,
  40. getValue
  41. },
  42. ...rest
  43. } = this.props;
  44.  
  45. const error = getError();
  46. const warning = getWarning();
  47. const success = getSuccess();
  48.  
  49. return (
  50. <div>
  51. <Select.Async
  52. name={getFieldName()}
  53. multi
  54. value={getValue()}
  55. onChange={this.handleChange}
  56. onBlur={this.handleBlur}
  57. loadOptions={getOptions}
  58. placeholder={placeholder}
  59. {...rest}
  60. />
  61. {error && <Message color="red" message={error} />}
  62. {!error && warning && <Message color="orange" message={warning} />}
  63. {!error && !warning && success && <Message color="green" message={success} />}
  64. </div>
  65. );
  66. }
  67. }
  68.  
  69. Autocomplete.propTypes = {
  70. getOptions: PropTypes.func.isRequired,
  71. placeholder: PropTypes.string,
  72. fieldApi: PropTypes.object.isRequired
  73. };
  74.  
  75. Autocomplete.defaultProps = {
  76. placeholder: undefined
  77. };
  78.  
  79. export default FormField(Autocomplete);
Add Comment
Please, Sign In to add comment