Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. const Select = ({ options }) => {
  2. const [opened, toggleOpen] = React.useState(false);
  3. const [clickOutsideFired, setOutsideFiredCount] = React.useState(0);
  4. const [selected, setSelectValue] = React.useState(null);
  5. const ref = React.useRef();
  6.  
  7. const onSelectHandler = (opt) => {
  8. setSelectValue(opt);
  9. toggleOpen(false);
  10. }
  11.  
  12. // Event is added as soon as dropdown is rendered
  13. // therefore always firing
  14. // We don't want this behavior!
  15. const onClickOutsideHandler = (ev) => {
  16. setOutsideFiredCount(clickOutsideFired+1);
  17. toggleOpen(false);
  18. }
  19.  
  20. useOnClickOutside(ref, onClickOutsideHandler);
  21.  
  22. const items = getOptions(options, onSelectHandler);
  23.  
  24. const selectedValue = selected ? selected.value : "Select ";
  25.  
  26. return (
  27. <div>
  28. <div>Click outside count: {clickOutsideFired}</div>
  29.  
  30. <br />
  31. <div ref={ref} className="select-wrapper">
  32. <div className="select" onClick={() => toggleOpen(true)}>
  33. <span>{selectedValue}</span>
  34. </div>
  35. {opened && (
  36. <div className="ul-wrapper">
  37. <ul>{items}</ul>
  38. </div>
  39. )}
  40. </div>
  41. </div>
  42. );
  43. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement