Skip to content

Commit c48a086

Browse files
Merge pull request #5687 from qburst/issue-5644/enhancement/renderCustomHeader
✨ Add a support for `visibleYearsRange` in the `renderCustomHeader` of the YearPicker
2 parents 752675e + b104d69 commit c48a086

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

src/calendar.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ export interface ReactDatePickerCustomHeaderProps {
101101
nextMonthButtonDisabled: boolean;
102102
prevYearButtonDisabled: boolean;
103103
nextYearButtonDisabled: boolean;
104+
visibleYearsRange?: {
105+
startYear: number;
106+
endYear: number;
107+
};
104108
}
105109

106110
type CalendarProps = React.PropsWithChildren<
@@ -860,6 +864,20 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
860864
return null;
861865
}
862866

867+
const { showYearPicker, yearItemNumber } = this.props;
868+
869+
let visibleYearsRange;
870+
if (showYearPicker) {
871+
const { startPeriod: startYear, endPeriod: endYear } = getYearsPeriod(
872+
monthDate,
873+
yearItemNumber,
874+
);
875+
visibleYearsRange = {
876+
startYear,
877+
endYear,
878+
};
879+
}
880+
863881
const prevMonthButtonDisabled = monthDisabledBefore(
864882
this.state.date,
865883
this.props,
@@ -892,6 +910,7 @@ export default class Calendar extends Component<CalendarProps, CalendarState> {
892910
>
893911
{this.props.renderCustomHeader?.({
894912
...this.state,
913+
...(showYearPicker && { visibleYearsRange }),
895914
customHeaderCount: i,
896915
monthDate,
897916
changeMonth: this.changeMonth,

src/test/calendar_test.test.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ describe("Calendar", () => {
550550
const renderCustomHeader = (params: ReactDatePickerCustomHeaderProps) => {
551551
const {
552552
date,
553+
visibleYearsRange,
553554
changeYear,
554555
changeMonth,
555556
decreaseMonth,
@@ -560,6 +561,11 @@ describe("Calendar", () => {
560561

561562
return (
562563
<div className="custom-header">
564+
{visibleYearsRange && (
565+
<h6 className="visible-years-range">
566+
{visibleYearsRange.startYear} to {visibleYearsRange.endYear}
567+
</h6>
568+
)}
563569
<button
564570
className="prevMonth"
565571
onClick={decreaseMonth}
@@ -694,6 +700,31 @@ describe("Calendar", () => {
694700
).toHaveLength(1);
695701
});
696702

703+
it("should render custom header with visible year range for YearPicker", () => {
704+
const { calendar } = getCalendar({
705+
renderCustomHeader,
706+
showYearPicker: true,
707+
});
708+
709+
expect(
710+
calendar.querySelector(
711+
".react-datepicker__header--custom .visible-years-range",
712+
),
713+
).not.toBeNull();
714+
});
715+
716+
it("should not render visible year range for non-YearPicker views", () => {
717+
const { calendar } = getCalendar({
718+
renderCustomHeader,
719+
});
720+
721+
expect(
722+
calendar.querySelector(
723+
".react-datepicker__header--custom .visible-years-range",
724+
),
725+
).toBeNull();
726+
});
727+
697728
it("should not render day names with renderCustomHeader & showMonthYearPicker", () => {
698729
const { calendar } = getCalendar({
699730
renderCustomHeader,

0 commit comments

Comments
 (0)