Skip to content

Commit c779293

Browse files
committed
fix: trigger open logic
1 parent e976903 commit c779293

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

docs/examples/portal.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ const PortalPopup = () =>
4444
style={popupBorderStyle}
4545
onMouseDown={(e) => {
4646
console.log('Portal Down', e);
47+
e.stopPropagation();
48+
e.preventDefault();
4749
}}
4850
>
4951
i am a portal element
@@ -84,6 +86,9 @@ const Test = () => {
8486
<PortalPopup />
8587
</div>
8688
}
89+
onPopupVisibleChange={(visible) => {
90+
console.log('visible change:', visible);
91+
}}
8792
>
8893
<button>Click Me</button>
8994
</Trigger>

src/Popup/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export interface PopupProps {
2020
onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
2121
onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
2222
onPointerEnter?: React.MouseEventHandler<HTMLDivElement>;
23+
onMouseDownCapture?: React.MouseEventHandler<HTMLDivElement>;
2324
zIndex?: number;
2425

2526
mask?: boolean;
@@ -105,6 +106,7 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
105106
onMouseEnter,
106107
onMouseLeave,
107108
onPointerEnter,
109+
onMouseDownCapture,
108110

109111
ready,
110112
offsetX,
@@ -255,6 +257,7 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
255257
onMouseLeave={onMouseLeave}
256258
onPointerEnter={onPointerEnter}
257259
onClick={onClick}
260+
onMouseDownCapture={onMouseDownCapture}
258261
>
259262
{arrow && (
260263
<Arrow

src/index.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,9 @@ export function generateTrigger(
381381
React.useState<VoidFunction>(null);
382382

383383
// =========================== Align ============================
384-
const [mousePos, setMousePos] = React.useState<[x: number, y: number] | null>(null);
384+
const [mousePos, setMousePos] = React.useState<
385+
[x: number, y: number] | null
386+
>(null);
385387

386388
const setMousePosByEvent = (
387389
event: Pick<React.MouseEvent, 'clientX' | 'clientY'>,
@@ -720,6 +722,14 @@ export function generateTrigger(
720722
fresh={fresh}
721723
// Click
722724
onClick={onPopupClick}
725+
onMouseDownCapture={() => {
726+
// Additional check for click to hide
727+
// Since `createPortal` will not included in the popup element
728+
// So we use capture to handle this
729+
if (clickToHide) {
730+
triggerOpen(true);
731+
}
732+
}}
723733
// Mask
724734
mask={mask}
725735
// Motion

0 commit comments

Comments
 (0)