From 1af1f33c2d18c071d317a6a767ba99d628c2dc89 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jul 2026 18:47:54 +0200 Subject: [PATCH] fix(DatePicker): disable the Today button when today's date is disabled --- js/src/date-range-picker.js | 5 +++++ js/tests/unit/date-range-picker.spec.js | 29 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/js/src/date-range-picker.js b/js/src/date-range-picker.js index 27153a5d1..d8330e325 100644 --- a/js/src/date-range-picker.js +++ b/js/src/date-range-picker.js @@ -882,6 +882,11 @@ class DateRangePicker extends BaseComponent { todayButtonEl.classList.add(...this._getButtonClasses(this._config.todayButtonClasses)) todayButtonEl.type = 'button' todayButtonEl.textContent = this._config.todayButton + + if (isDateDisabled(new Date(), this._config.minDate, this._config.maxDate, this._config.disabledDates)) { + todayButtonEl.disabled = true + } + todayButtonEl.addEventListener('click', () => { const date = new Date() this._calendarDate = date diff --git a/js/tests/unit/date-range-picker.spec.js b/js/tests/unit/date-range-picker.spec.js index 626f87d28..2a8e69513 100644 --- a/js/tests/unit/date-range-picker.spec.js +++ b/js/tests/unit/date-range-picker.spec.js @@ -832,6 +832,35 @@ describe('DateRangePicker', () => { expect(dateRangePicker._endDate.toDateString()).toBe(today.toDateString()) }) + it('should disable today button when today is a disabled date', () => { + fixtureEl.innerHTML = '
' + const div = fixtureEl.querySelector('div') + const yesterday = new Date() + yesterday.setDate(yesterday.getDate() - 1) + const dateRangePicker = new DateRangePicker(div, { // eslint-disable-line no-unused-vars + footer: true, + todayButton: 'Today', + maxDate: yesterday + }) + + const footer = div.querySelector('.date-picker-footer') + const todayBtn = Array.from(footer.querySelectorAll('button')).find(b => b.innerHTML === 'Today') + expect(todayBtn.disabled).toBeTrue() + }) + + it('should not disable today button when today is selectable', () => { + fixtureEl.innerHTML = '
' + const div = fixtureEl.querySelector('div') + const dateRangePicker = new DateRangePicker(div, { // eslint-disable-line no-unused-vars + footer: true, + todayButton: 'Today' + }) + + const footer = div.querySelector('.date-picker-footer') + const todayBtn = Array.from(footer.querySelectorAll('button')).find(b => b.innerHTML === 'Today') + expect(todayBtn.disabled).toBeFalse() + }) + it('should not set end date on today click when range is false', () => { fixtureEl.innerHTML = '
' const div = fixtureEl.querySelector('div')