useSelectTriggerControl.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import * as React from 'react';
  2. export default function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger) {
  3. var propsRef = React.useRef(null);
  4. propsRef.current = {
  5. open: open,
  6. triggerOpen: triggerOpen,
  7. customizedTrigger: customizedTrigger
  8. };
  9. React.useEffect(function () {
  10. function onGlobalMouseDown(event) {
  11. var _propsRef$current;
  12. // If trigger is customized, Trigger will take control of popupVisible
  13. if ((_propsRef$current = propsRef.current) !== null && _propsRef$current !== void 0 && _propsRef$current.customizedTrigger) {
  14. return;
  15. }
  16. var target = event.target;
  17. if (target.shadowRoot && event.composed) {
  18. target = event.composedPath()[0] || target;
  19. }
  20. if (propsRef.current.open && elements().filter(function (element) {
  21. return element;
  22. }).every(function (element) {
  23. return !element.contains(target) && element !== target;
  24. })) {
  25. // Should trigger close
  26. propsRef.current.triggerOpen(false);
  27. }
  28. }
  29. window.addEventListener('mousedown', onGlobalMouseDown);
  30. return function () {
  31. return window.removeEventListener('mousedown', onGlobalMouseDown);
  32. };
  33. }, []);
  34. }