From 45c7163b58f11a36a7e64e86492b3ae022140951 Mon Sep 17 00:00:00 2001 From: donley <344919627@qq.com> Date: Sat, 8 May 2021 15:09:19 +0800 Subject: [PATCH] fix: mode='month' a-date-picker disabledDate prop is invalid (#3988) * fix: mode='month' a-date-picker disabledDate prop is invalid * chore: code-factory errors * chore: remove example codes * fix: the date-picker disabledDate is invalid when mode is year --- components/date-picker/style/YearPanel.less | 8 ++++++++ components/vc-calendar/src/Calendar.jsx | 1 + .../vc-calendar/src/calendar/CalendarHeader.jsx | 1 + components/vc-calendar/src/year/YearPanel.jsx | 13 +++++++++++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/components/date-picker/style/YearPanel.less b/components/date-picker/style/YearPanel.less index b9efca73c..a533638c0 100644 --- a/components/date-picker/style/YearPanel.less +++ b/components/date-picker/style/YearPanel.less @@ -46,6 +46,14 @@ .@{calendar-prefix-cls}-year-panel-cell { text-align: center; + &-disabled .@{calendar-prefix-cls}-year-panel-year { + &, + &:hover { + color: @disabled-color; + background: @disabled-bg; + cursor: not-allowed; + } + } } .@{calendar-prefix-cls}-year-panel-year { diff --git a/components/vc-calendar/src/Calendar.jsx b/components/vc-calendar/src/Calendar.jsx index a35888ed2..0769c849f 100644 --- a/components/vc-calendar/src/Calendar.jsx +++ b/components/vc-calendar/src/Calendar.jsx @@ -325,6 +325,7 @@ const Calendar = { locale={locale} mode={sMode} value={sValue} + disabledMonth={disabledDate} onValueChange={this.setValue} onPanelChange={this.onPanelChange} renderFooter={renderFooter} diff --git a/components/vc-calendar/src/calendar/CalendarHeader.jsx b/components/vc-calendar/src/calendar/CalendarHeader.jsx index 871203192..81e941a64 100644 --- a/components/vc-calendar/src/calendar/CalendarHeader.jsx +++ b/components/vc-calendar/src/calendar/CalendarHeader.jsx @@ -179,6 +179,7 @@ const CalendarHeader = { onSelect={this.onYearSelect} onDecadePanelShow={this.showDecadePanel} renderFooter={renderFooter} + disabledDate={disabledMonth} /> ); } diff --git a/components/vc-calendar/src/year/YearPanel.jsx b/components/vc-calendar/src/year/YearPanel.jsx index 0ca3931bf..19efaa3c0 100644 --- a/components/vc-calendar/src/year/YearPanel.jsx +++ b/components/vc-calendar/src/year/YearPanel.jsx @@ -28,6 +28,7 @@ export default { defaultValue: PropTypes.object, locale: PropTypes.object, renderFooter: PropTypes.func, + disabledDate: PropTypes.func, }, data() { this.nextDecade = goYear.bind(this, 10); @@ -67,18 +68,26 @@ export default { }, render() { - const { sValue: value, locale, renderFooter } = this; + const { sValue: value, locale, renderFooter, $props } = this; const decadePanelShow = getListeners(this).decadePanelShow || noop; const years = this.years(); const currentYear = value.year(); const startYear = parseInt(currentYear / 10, 10) * 10; const endYear = startYear + 9; const prefixCls = `${this.rootPrefixCls}-year-panel`; + const { disabledDate } = $props; const yeasEls = years.map((row, index) => { const tds = row.map(yearData => { + let disabled = false; + if (disabledDate) { + const testValue = value.clone(); + testValue.year(yearData.year); + disabled = disabledDate(testValue); + } const classNameMap = { [`${prefixCls}-cell`]: 1, + [`${prefixCls}-cell-disabled`]: disabled, [`${prefixCls}-selected-cell`]: yearData.year === currentYear, [`${prefixCls}-last-decade-cell`]: yearData.year < startYear, [`${prefixCls}-next-decade-cell`]: yearData.year > endYear, @@ -96,7 +105,7 @@ export default { role="gridcell" title={yearData.title} key={yearData.content} - onClick={clickHandler} + onClick={disabled ? noop : clickHandler} class={classNameMap} > {yearData.content}