Skip to content

Commit 91eb896

Browse files
authored
fix: gen func instead (#398)
1 parent 728d7e9 commit 91eb896

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

src/hooks/useWinClick.ts

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,35 +36,43 @@ export default function useWinClick(
3636
// Click to hide is special action since click popup element should not hide
3737
React.useEffect(() => {
3838
if (clickToHide && popupEle && (!mask || maskClosable)) {
39-
let clickInside = false;
39+
const genClickEvents = () => {
40+
let clickInside = false;
4041

41-
// User may mouseDown inside and drag out of popup and mouse up
42-
// Record here to prevent close
43-
const onWindowMouseDown = ({ target }: MouseEvent) => {
44-
clickInside = inPopupOrChild(target);
45-
};
42+
// User may mouseDown inside and drag out of popup and mouse up
43+
// Record here to prevent close
44+
const onWindowMouseDown = ({ target }: MouseEvent) => {
45+
clickInside = inPopupOrChild(target);
46+
};
4647

47-
const onWindowClick = ({ target }: MouseEvent) => {
48-
if (
49-
!lockRef.current &&
50-
openRef.current &&
51-
!clickInside &&
52-
!inPopupOrChild(target)
53-
) {
54-
triggerOpen(false);
55-
}
48+
const onWindowClick = ({ target }: MouseEvent) => {
49+
if (
50+
!lockRef.current &&
51+
openRef.current &&
52+
!clickInside &&
53+
!inPopupOrChild(target)
54+
) {
55+
triggerOpen(false);
56+
}
57+
};
58+
59+
return [onWindowMouseDown, onWindowClick];
5660
};
5761

62+
// Events
63+
const [onWinMouseDown, onWinClick] = genClickEvents();
64+
const [onShadowMouseDown, onShadowClick] = genClickEvents();
65+
5866
const win = getWin(popupEle);
5967

60-
win.addEventListener('mousedown', onWindowMouseDown);
61-
win.addEventListener('click', onWindowClick);
68+
win.addEventListener('mousedown', onWinMouseDown);
69+
win.addEventListener('click', onWinClick);
6270

6371
// shadow root
6472
const targetShadowRoot = getShadowRoot(targetEle);
6573
if (targetShadowRoot) {
66-
targetShadowRoot.addEventListener('mousedown', onWindowMouseDown);
67-
targetShadowRoot.addEventListener('click', onWindowClick);
74+
targetShadowRoot.addEventListener('mousedown', onShadowMouseDown);
75+
targetShadowRoot.addEventListener('click', onShadowClick);
6876
}
6977

7078
// Warning if target and popup not in same root
@@ -79,12 +87,12 @@ export default function useWinClick(
7987
}
8088

8189
return () => {
82-
win.removeEventListener('mousedown', onWindowMouseDown);
83-
win.removeEventListener('click', onWindowClick);
90+
win.removeEventListener('mousedown', onWinMouseDown);
91+
win.removeEventListener('click', onWinClick);
8492

8593
if (targetShadowRoot) {
86-
targetShadowRoot.removeEventListener('mousedown', onWindowMouseDown);
87-
targetShadowRoot.removeEventListener('click', onWindowClick);
94+
targetShadowRoot.removeEventListener('mousedown', onShadowMouseDown);
95+
targetShadowRoot.removeEventListener('click', onShadowClick);
8896
}
8997
};
9098
}

0 commit comments

Comments
 (0)