Switch between years and months
This example shows how to use the captionElement
prop to change the calendar’s caption. For example, we can use this prop to add a form to switch between months and years.
Code
import React from 'react';
import DayPicker from 'react-day-picker';
import 'react-day-picker/lib/style.css';
const currentYear = new Date().getFullYear();
const fromMonth = new Date(currentYear, 0);
const toMonth = new Date(currentYear + 10, 11);
function YearMonthForm({ date, localeUtils, onChange }) {
const months = localeUtils.getMonths();
const years = [];
for (let i = fromMonth.getFullYear(); i <= toMonth.getFullYear(); i += 1) {
years.push(i);
}
const handleChange = function handleChange(e) {
const { year, month } = e.target.form;
onChange(new Date(year.value, month.value));
};
return (
<form className="DayPicker-Caption">
<select name="month" onChange={handleChange} value={date.getMonth()}>
{months.map((month, i) => (
<option key={month} value={i}>
{month}
</option>
))}
</select>
<select name="year" onChange={handleChange} value={date.getFullYear()}>
{years.map(year => (
<option key={year} value={year}>
{year}
</option>
))}
</select>
</form>
);
}
export default class Example extends React.Component {
constructor(props) {
super(props);
this.handleYearMonthChange = this.handleYearMonthChange.bind(this);
this.state = {
month: fromMonth,
};
}
handleYearMonthChange(month) {
this.setState({ month });
}
render() {
return (
<div className="YearNavigation">
<DayPicker
month={this.state.month}
fromMonth={fromMonth}
toMonth={toMonth}
captionElement={({ date, localeUtils }) => (
<YearMonthForm
date={date}
localeUtils={localeUtils}
onChange={this.handleYearMonthChange}
/>
)}
/>
</div>
);
}
}