MCPcopy Create free account
hub / github.com/react-component/select / useSelectTriggerControl

Function useSelectTriggerControl

src/hooks/useSelectTriggerControl.ts:3–43  ·  view source on GitHub ↗
(
  elements: () => (HTMLElement | undefined)[],
  open: boolean,
  triggerOpen: (open: boolean) => void,
  customizedTrigger: boolean,
)

Source from the content-addressed store, hash-verified

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

Callers 1

index.tsxFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…