From 684467dea2847902c525f541c7eeab99279adfd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=BA=84=E5=A6=AE?= <32158203+wongest@users.noreply.github.com> Date: Tue, 25 Jul 2023 11:52:42 +0800 Subject: [PATCH] fix: should not action when RangePicker set disabled (#659) --- src/RangePicker.tsx | 1 + src/hooks/useRangeOpen.ts | 3 ++- tests/range.spec.tsx | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/RangePicker.tsx b/src/RangePicker.tsx index d77ce27d9..38f9b8db3 100644 --- a/src/RangePicker.tsx +++ b/src/RangePicker.tsx @@ -354,6 +354,7 @@ function InnerRangePicker(props: RangePickerProps) { endInputRef, getValue(selectedValue, 0), getValue(selectedValue, 1), + mergedDisabled, onOpenChange, ); diff --git a/src/hooks/useRangeOpen.ts b/src/hooks/useRangeOpen.ts index 2fc7ca7bb..78ddee6f0 100644 --- a/src/hooks/useRangeOpen.ts +++ b/src/hooks/useRangeOpen.ts @@ -33,6 +33,7 @@ export default function useRangeOpen( endInputRef: React.RefObject, startSelectedValue: any, endSelectedValue: any, + disabled: [boolean, boolean], onOpenChange?: (open: boolean) => void, ): [ open: boolean, @@ -93,7 +94,7 @@ export default function useRangeOpen( setNextActiveIndex(null); // Focus back - if (nextActiveIndex !== null) { + if (nextActiveIndex !== null && !disabled[nextActiveIndex]) { raf(() => { const ref = [startInputRef, endInputRef][nextActiveIndex]; ref.current?.focus(); diff --git a/tests/range.spec.tsx b/tests/range.spec.tsx index 3ebcb0c44..11ca11940 100644 --- a/tests/range.spec.tsx +++ b/tests/range.spec.tsx @@ -262,6 +262,26 @@ describe('Picker.Range', () => { expect(baseElement.querySelector('.rc-picker-dropdown-hidden')).toBeTruthy(); }); + it('should close panel when finish first choose with showTime = true and disabled = [false, true]', () => { + const { baseElement } = render(); + expect(baseElement.querySelectorAll('.rc-picker-input')).toHaveLength(2); + fireEvent.click(baseElement.querySelectorAll('.rc-picker-input')[0]); + expect(baseElement.querySelector('.rc-picker-dropdown-hidden')).toBeFalsy(); + fireEvent.click(baseElement.querySelector('.rc-picker-cell-inner')); + fireEvent.click(baseElement.querySelector('.rc-picker-ok button')); + expect(baseElement.querySelector('.rc-picker-dropdown-hidden')).toBeTruthy(); + }); + + it('should close panel when finish second choose with showTime = true and disabled = [true, false]', () => { + const { baseElement } = render(); + expect(baseElement.querySelectorAll('.rc-picker-input')).toHaveLength(2); + fireEvent.click(baseElement.querySelectorAll('.rc-picker-input')[1]); + expect(baseElement.querySelector('.rc-picker-dropdown-hidden')).toBeFalsy(); + fireEvent.click(baseElement.querySelector('.rc-picker-cell-range-start .rc-picker-cell-inner')); + fireEvent.click(baseElement.querySelector('.rc-picker-ok button')); + expect(baseElement.querySelector('.rc-picker-dropdown-hidden')).toBeTruthy(); + }); + it('panel can not be clicked with open and disabled', () => { const onChange = jest.fn(); const { baseElement } = render();