diff --git a/src/PickerPanel.tsx b/src/PickerPanel.tsx index 3c7d503b7..27e17feaf 100644 --- a/src/PickerPanel.tsx +++ b/src/PickerPanel.tsx @@ -459,11 +459,17 @@ function PickerPanel(props: PickerPanelProps) { let todayNode: React.ReactNode; if (showToday && mergedMode === 'date' && picker === 'date' && !showTime) { + const now = generateConfig.getNow(); + const todayCls = `${prefixCls}-today-btn`; + const disabled = disabledDate && disabledDate(now); todayNode = ( { - triggerSelect(generateConfig.getNow(), 'mouse', true); + if (!disabled) { + triggerSelect(now, 'mouse', true); + } }} > {locale.today} diff --git a/tests/picker.spec.tsx b/tests/picker.spec.tsx index 1d97c30d2..9b5a481c7 100644 --- a/tests/picker.spec.tsx +++ b/tests/picker.spec.tsx @@ -467,6 +467,19 @@ describe('Picker.Basic', () => { expect(isSame(onSelect.mock.calls[0][0], '1990-09-03')).toBeTruthy(); }); + it('disabled when in disabledDate', () => { + const onSelect = jest.fn(); + const wrapper = mount( + true} showToday />, + ); + wrapper.openPicker(); + expect( + wrapper.find('.rc-picker-today-btn').hasClass('rc-picker-today-btn-disabled'), + ).toBeTruthy(); + wrapper.find('.rc-picker-today-btn').simulate('click'); + expect(onSelect).not.toHaveBeenCalled(); + }); + ['decade', 'year', 'quarter', 'month', 'week'].forEach(name => { it(`not works on ${name}`, () => { const wrapper = mount();