Skip to content

Commit 45c7163

Browse files
authored
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
1 parent 3e617bd commit 45c7163

File tree

4 files changed

+21
-2
lines changed

4 files changed

+21
-2
lines changed

components/date-picker/style/YearPanel.less

+8
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@
4646

4747
.@{calendar-prefix-cls}-year-panel-cell {
4848
text-align: center;
49+
&-disabled .@{calendar-prefix-cls}-year-panel-year {
50+
&,
51+
&:hover {
52+
color: @disabled-color;
53+
background: @disabled-bg;
54+
cursor: not-allowed;
55+
}
56+
}
4957
}
5058

5159
.@{calendar-prefix-cls}-year-panel-year {

components/vc-calendar/src/Calendar.jsx

+1
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ const Calendar = {
325325
locale={locale}
326326
mode={sMode}
327327
value={sValue}
328+
disabledMonth={disabledDate}
328329
onValueChange={this.setValue}
329330
onPanelChange={this.onPanelChange}
330331
renderFooter={renderFooter}

components/vc-calendar/src/calendar/CalendarHeader.jsx

+1
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ const CalendarHeader = {
179179
onSelect={this.onYearSelect}
180180
onDecadePanelShow={this.showDecadePanel}
181181
renderFooter={renderFooter}
182+
disabledDate={disabledMonth}
182183
/>
183184
);
184185
}

components/vc-calendar/src/year/YearPanel.jsx

+11-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export default {
2828
defaultValue: PropTypes.object,
2929
locale: PropTypes.object,
3030
renderFooter: PropTypes.func,
31+
disabledDate: PropTypes.func,
3132
},
3233
data() {
3334
this.nextDecade = goYear.bind(this, 10);
@@ -67,18 +68,26 @@ export default {
6768
},
6869

6970
render() {
70-
const { sValue: value, locale, renderFooter } = this;
71+
const { sValue: value, locale, renderFooter, $props } = this;
7172
const decadePanelShow = getListeners(this).decadePanelShow || noop;
7273
const years = this.years();
7374
const currentYear = value.year();
7475
const startYear = parseInt(currentYear / 10, 10) * 10;
7576
const endYear = startYear + 9;
7677
const prefixCls = `${this.rootPrefixCls}-year-panel`;
78+
const { disabledDate } = $props;
7779

7880
const yeasEls = years.map((row, index) => {
7981
const tds = row.map(yearData => {
82+
let disabled = false;
83+
if (disabledDate) {
84+
const testValue = value.clone();
85+
testValue.year(yearData.year);
86+
disabled = disabledDate(testValue);
87+
}
8088
const classNameMap = {
8189
[`${prefixCls}-cell`]: 1,
90+
[`${prefixCls}-cell-disabled`]: disabled,
8291
[`${prefixCls}-selected-cell`]: yearData.year === currentYear,
8392
[`${prefixCls}-last-decade-cell`]: yearData.year < startYear,
8493
[`${prefixCls}-next-decade-cell`]: yearData.year > endYear,
@@ -96,7 +105,7 @@ export default {
96105
role="gridcell"
97106
title={yearData.title}
98107
key={yearData.content}
99-
onClick={clickHandler}
108+
onClick={disabled ? noop : clickHandler}
100109
class={classNameMap}
101110
>
102111
<a class={`${prefixCls}-year`}>{yearData.content}</a>

0 commit comments

Comments
 (0)