From 2167ec9d391eb2af31ab1b1b6ed3130efc7dbb7f Mon Sep 17 00:00:00 2001 From: JX-Zhuang Date: Fri, 14 Jan 2022 11:49:49 +0800 Subject: [PATCH] Fix:Range onClick event not working --- src/RangePicker.tsx | 17 +++++++++++++++-- tests/range.spec.tsx | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/RangePicker.tsx b/src/RangePicker.tsx index 49f898ff8..b32bd7099 100644 --- a/src/RangePicker.tsx +++ b/src/RangePicker.tsx @@ -103,8 +103,11 @@ export type RangePickerSharedProps = { onPanelChange?: (values: RangeValue, modes: [PanelMode, PanelMode]) => void; onFocus?: React.FocusEventHandler; onBlur?: React.FocusEventHandler; + onMouseDown?: React.MouseEventHandler; + onMouseUp?: React.MouseEventHandler; onMouseEnter?: React.MouseEventHandler; onMouseLeave?: React.MouseEventHandler; + onClick?: React.MouseEventHandler; onOk?: (dates: RangeValue) => void; direction?: 'ltr' | 'rtl'; autoComplete?: string; @@ -210,8 +213,11 @@ function InnerRangePicker(props: RangePickerProps) { onCalendarChange, onFocus, onBlur, + onMouseDown, + onMouseUp, onMouseEnter, onMouseLeave, + onClick, onOk, onKeyDown, components, @@ -647,9 +653,12 @@ function InnerRangePicker(props: RangePickerProps) { }); // ========================== Click Picker ========================== - const onPickerClick = (e: MouseEvent) => { + const onPickerClick = (e: React.MouseEvent) => { // When click inside the picker & outside the picker's input elements // the panel should still be opened + if (onClick) { + onClick(e); + } if ( !mergedOpen && !startInputRef.current.contains(e.target as Node) && @@ -663,8 +672,11 @@ function InnerRangePicker(props: RangePickerProps) { } }; - const onPickerMouseDown = (e: MouseEvent) => { + const onPickerMouseDown = (e: React.MouseEvent) => { // shouldn't affect input elements if picker is active + if (onMouseDown) { + onMouseDown(e); + } if ( mergedOpen && (startFocused || endFocused) && @@ -1107,6 +1119,7 @@ function InnerRangePicker(props: RangePickerProps) { onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onMouseDown={onPickerMouseDown} + onMouseUp={onMouseUp} {...getDataOrAriaProps(props)} >
{ wrapper.keyDown(KeyCode.ENTER); expect(onCalendarChange).not.toHaveBeenCalled(); }); + + // https://github.com/ant-design/ant-design/issues/33662 + it('range picker should have onClick event', () => { + const handleClick = jest.fn(); + const wrapper = mount(); + wrapper.simulate('click'); + expect(handleClick).toHaveBeenCalled(); + }); + + it('range picker should have onMouseDown event', () => { + const handleMouseDown = jest.fn(); + const wrapper = mount(); + wrapper.simulate('mousedown'); + expect(handleMouseDown).toHaveBeenCalled(); + }); });