Skip to content

Commit 854325f

Browse files
authored
fix: should hide when click outside stopPropagation button (#412)
1 parent 7ec282b commit 854325f

File tree

2 files changed

+41
-12
lines changed

2 files changed

+41
-12
lines changed

src/hooks/useWinClick.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,16 @@ export default function useWinClick(
6565

6666
const win = getWin(popupEle);
6767

68-
win.addEventListener('mousedown', onWinMouseDown);
69-
win.addEventListener('click', onWinClick);
70-
win.addEventListener('contextmenu', onWinClick);
68+
win.addEventListener('mousedown', onWinMouseDown, true);
69+
win.addEventListener('click', onWinClick, true);
70+
win.addEventListener('contextmenu', onWinClick, true);
7171

7272
// shadow root
7373
const targetShadowRoot = getShadowRoot(targetEle);
7474
if (targetShadowRoot) {
75-
targetShadowRoot.addEventListener('mousedown', onShadowMouseDown);
76-
targetShadowRoot.addEventListener('click', onShadowClick);
77-
targetShadowRoot.addEventListener('contextmenu', onShadowClick);
75+
targetShadowRoot.addEventListener('mousedown', onShadowMouseDown, true);
76+
targetShadowRoot.addEventListener('click', onShadowClick, true);
77+
targetShadowRoot.addEventListener('contextmenu', onShadowClick, true);
7878
}
7979

8080
// Warning if target and popup not in same root
@@ -89,14 +89,22 @@ export default function useWinClick(
8989
}
9090

9191
return () => {
92-
win.removeEventListener('mousedown', onWinMouseDown);
93-
win.removeEventListener('click', onWinClick);
94-
win.removeEventListener('contextmenu', onWinClick);
92+
win.removeEventListener('mousedown', onWinMouseDown, true);
93+
win.removeEventListener('click', onWinClick, true);
94+
win.removeEventListener('contextmenu', onWinClick, true);
9595

9696
if (targetShadowRoot) {
97-
targetShadowRoot.removeEventListener('mousedown', onShadowMouseDown);
98-
targetShadowRoot.removeEventListener('click', onShadowClick);
99-
targetShadowRoot.removeEventListener('contextmenu', onShadowClick);
97+
targetShadowRoot.removeEventListener(
98+
'mousedown',
99+
onShadowMouseDown,
100+
true,
101+
);
102+
targetShadowRoot.removeEventListener('click', onShadowClick, true);
103+
targetShadowRoot.removeEventListener(
104+
'contextmenu',
105+
onShadowClick,
106+
true,
107+
);
100108
}
101109
};
102110
}

tests/basic.test.jsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,27 @@ describe('Trigger.Basic', () => {
10651065
expect(document.querySelector('.rc-trigger-popup')).toBeTruthy();
10661066
expect(document.querySelector('.rc-trigger-popup-hidden')).toBeFalsy();
10671067
});
1068+
1069+
it('should hide when click outside stopPropagation button', async () => {
1070+
const Demo = () => {
1071+
return (
1072+
<>
1073+
<button onClick={(e) => e.stopPropagation()} />
1074+
<Trigger action="click" popup={<strong>trigger</strong>}>
1075+
<div className="target" />
1076+
</Trigger>
1077+
</>
1078+
);
1079+
};
1080+
1081+
const { container } = render(<Demo />);
1082+
1083+
fireEvent.click(container.querySelector('.target'));
1084+
await awaitFakeTimer();
1085+
expect(document.querySelector('.rc-trigger-popup')).toBeTruthy();
1086+
fireEvent.click(container.querySelector('button'));
1087+
expect(document.querySelector('.rc-trigger-popup-hidden')).toBeTruthy();
1088+
});
10681089
});
10691090

10701091
it('not trigger open when hover hidden popup node', () => {

0 commit comments

Comments
 (0)