Skip to content

Commit 127e5b0

Browse files
authored
feat: Add onPopupClick event (#299)
* feat: Add onPopupClick * test: test case
1 parent 619ea92 commit 127e5b0

File tree

5 files changed

+27
-0
lines changed

5 files changed

+27
-0
lines changed

src/Popup/MobilePopupInner.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const MobilePopupInner = React.forwardRef<PopupInnerRef, MobilePopupInnerProps>(
2121
popupMotion = {},
2222
popupRender,
2323
} = {},
24+
onClick,
2425
} = props;
2526
const elementRef = React.useRef<HTMLDivElement>();
2627

@@ -67,6 +68,7 @@ const MobilePopupInner = React.forwardRef<PopupInnerRef, MobilePopupInnerProps>(
6768
<div
6869
ref={motionRef}
6970
className={mergedClassName}
71+
onClick={onClick}
7072
style={{
7173
...motionStyle,
7274
...mergedStyle,

src/Popup/PopupInner.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface PopupInnerProps {
5050
onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
5151
onMouseDown?: React.MouseEventHandler<HTMLDivElement>;
5252
onTouchStart?: React.TouchEventHandler<HTMLDivElement>;
53+
onClick?: React.MouseEventHandler<HTMLDivElement>;
5354
}
5455

5556
export interface PopupInnerRef {
@@ -82,6 +83,7 @@ const PopupInner = React.forwardRef<PopupInnerRef, PopupInnerProps>(
8283
onMouseLeave,
8384
onMouseDown,
8485
onTouchStart,
86+
onClick,
8587
} = props;
8688

8789
const alignRef = useRef<RefAlign>();
@@ -251,6 +253,7 @@ const PopupInner = React.forwardRef<PopupInnerRef, PopupInnerProps>(
251253
onMouseLeave={onMouseLeave}
252254
onMouseDownCapture={onMouseDown}
253255
onTouchStartCapture={onTouchStart}
256+
onClick={onClick}
254257
style={{
255258
...motionStyle,
256259
...mergedStyle,

src/Popup/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export interface PopupProps {
2929
onMouseLeave?: React.MouseEventHandler<HTMLElement>;
3030
onMouseDown?: React.MouseEventHandler<HTMLElement>;
3131
onTouchStart?: React.TouchEventHandler<HTMLElement>;
32+
onClick?: React.MouseEventHandler<HTMLDivElement>;
3233
stretch?: StretchType;
3334
children?: React.ReactNode;
3435
point?: Point;

src/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export interface TriggerProps {
5959
hideAction?: ActionType[];
6060
getPopupClassNameFromAlign?: (align: AlignType) => string;
6161
onPopupVisibleChange?: (visible: boolean) => void;
62+
onPopupClick?: React.MouseEventHandler<HTMLDivElement>;
6263
afterPopupVisibleChange?: (visible: boolean) => void;
6364
popup: React.ReactNode | (() => React.ReactNode);
6465
popupStyle?: React.CSSProperties;
@@ -516,6 +517,7 @@ export function generateTrigger(
516517
alignPoint,
517518
mobile,
518519
forceRender,
520+
onPopupClick,
519521
} = this.props;
520522
const { popupVisible, point } = this.state;
521523

@@ -557,6 +559,7 @@ export function generateTrigger(
557559
motion={popupMotion}
558560
mobile={mobile}
559561
forceRender={forceRender}
562+
onClick={onPopupClick}
560563
>
561564
{typeof popup === 'function' ? popup() : popup}
562565
</Popup>

tests/basic.test.jsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,4 +839,22 @@ describe('Trigger.Basic', () => {
839839
trigger(container, '.target');
840840
expect(document.querySelector('.rc-trigger-popup')).toBeTruthy();
841841
});
842+
843+
it('onPopupClick', () => {
844+
const onPopupClick = jest.fn();
845+
846+
render(
847+
<Trigger
848+
popupVisible
849+
popup={<strong>trigger</strong>}
850+
onPopupClick={onPopupClick}
851+
>
852+
<div />
853+
</Trigger>,
854+
);
855+
856+
fireEvent.click(document.querySelector('strong'));
857+
858+
expect(onPopupClick).toHaveBeenCalled();
859+
});
842860
});

0 commit comments

Comments
 (0)