This commit is contained in:
2026-05-25 17:08:18 +08:00
parent df501f6151
commit f1259b71b5
9178 changed files with 1626125 additions and 0 deletions
@@ -0,0 +1,30 @@
import * as React from 'react';
import { useEvent } from '@rc-component/util';
export function isInside(elements, target) {
return elements.filter(element => element).some(element => element.contains(target) || element === target);
}
export default function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger) {
const onGlobalMouseDown = useEvent(event => {
// If trigger is customized, Trigger will take control of popupVisible
if (customizedTrigger) {
return;
}
let target = event.target;
if (target.shadowRoot && event.composed) {
target = event.composedPath()[0] || target;
}
if (event._ori_target) {
target = event._ori_target;
}
if (open &&
// Marked by SelectInput mouseDown event
!isInside(elements(), target)) {
// Should trigger close
triggerOpen(false);
}
});
React.useEffect(() => {
window.addEventListener('mousedown', onGlobalMouseDown);
return () => window.removeEventListener('mousedown', onGlobalMouseDown);
}, [onGlobalMouseDown]);
}