Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. import React, { PropTypes } from 'react';
  2. import Select from 'react-select';
  3. import 'react-select/dist/react-select.css';
  4.  
  5. RFReactSelect.defaultProps = {
  6. multi: false
  7. };
  8.  
  9. RFReactSelect.propTypes = {
  10. input: PropTypes.shape({
  11. name: PropTypes.string.isRequired,
  12. value: PropTypes.string.isRequired,
  13. onBlur: PropTypes.func.isRequired,
  14. onFocus: PropTypes.func.isRequired,
  15. }).isRequired,
  16. options: PropTypes.array.isRequired,
  17. multi: PropTypes.bool
  18. };
  19.  
  20. export default function RFReactSelect({ input: { name, value, onBlur, onChange, onFocus }, options, multi }) {
  21. const transformedValue = transformValue(value, options, multi);
  22. return (
  23. <Select
  24. valueKey="value"
  25. name={name}
  26. value={transformedValue}
  27. multi={multi}
  28. options={options}
  29. onChange={multi
  30. ? multiChangeHandler(onChange)
  31. : singleChangeHandler(onChange)
  32. }
  33. onBlur={() => onBlur(value)}
  34. onFocus={onFocus}
  35. />
  36. );
  37. }
  38.  
  39. function singleChangeHandler(func) {
  40. return function handleSingleChange(value) {
  41. func(value ? value.value : '');
  42. };
  43. }
  44.  
  45. function multiChangeHandler(func) {
  46. return function handleMultiHandler(values) {
  47. func(values.map(value => value.value));
  48. };
  49. }
  50.  
  51. function transformValue(value, options, multi) {
  52. if (multi && typeof value === 'string') return [];
  53.  
  54. const filteredOptions = options.filter(option => {
  55. return multi
  56. ? value.indexOf(option.value) !== -1
  57. : option.value === value;
  58. });
  59.  
  60. return multi ? filteredOptions : filteredOptions[0];
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement