useSelectTriggerControl.js 890 B

123456789101112131415161718192021
  1. import { onBeforeUnmount, onMounted } from 'vue';
  2. export default function useSelectTriggerControl(refs, open, triggerOpen) {
  3. function onGlobalMouseDown(event) {
  4. var _a, _b, _c;
  5. let target = event.target;
  6. if (target.shadowRoot && event.composed) {
  7. target = event.composedPath()[0] || target;
  8. }
  9. const elements = [(_a = refs[0]) === null || _a === void 0 ? void 0 : _a.value, (_c = (_b = refs[1]) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.getPopupElement()];
  10. if (open.value && elements.every(element => element && !element.contains(target) && element !== target)) {
  11. // Should trigger close
  12. triggerOpen(false);
  13. }
  14. }
  15. onMounted(() => {
  16. window.addEventListener('mousedown', onGlobalMouseDown);
  17. });
  18. onBeforeUnmount(() => {
  19. window.removeEventListener('mousedown', onGlobalMouseDown);
  20. });
  21. }