Simple date picker built for React and moment.js. See a demo.
npm install react-day-picker --save
This date picker works with modifiers, as in BEM-like syntax. You set the modifiers as functions returning true
or false
.
Modifiers give you a lot of freedom: for example, a selected
modifier could highlight a range of selected days, or a weekend
modifiers could format the weekend days.
You need to setup your own CSS. You can start from this css as example.
The following component implements the DayPicker and saves the selected day in its own state
.
It also adds the DayPicker-day--today
CSS modifier for today, and a DayPicker-day--selected
CSS modifier to the cell corresponding to the clicked/touched day.
var DayPicker = require('react-day-picker');
var moment = require('moment');
function isSameDay(a, b) {
return a.startOf('day').isSame(b.startOf('day'));
}
var MyDatePicker = React.createClass({
handleDayTouchTap(day, modifiers, event) {
this.setState({
selectedDay: day
});
},
render() {
var modifiers = {
today: function (day) {
// add the `today` modifier for the current day
return isSameDay(moment(), day);
},
selected: function (day) {
// add the `selected` modifier for the selected day
return this.state.selectedDay
&& isSameDay(this.state.selectedDay, day);
}
};
return (
<DayPicker modifiers={ modifiers }
onDayTouchTap={this.handleDayTouchTap} />
);
}
});
React.render(<MyDatePicker/>, document.body);
git clone https://github.com/gpbl/react-day-picker.git
cd react-day-picker
npm install
npm start
...then open http://localhost:8080.
<DayPicker
initialMonth={Object}
numberOfMonths={Number}
enableOutsideDays={Boolean}
modifiers={Object}
onDayClick={Function}
onDayTouchTap={Function}
onDayMouseEnter={Function}
onDayMouseLeave={Function}
onPrevMonthClick={Function}
onNextMonthClick={Function}
/>
A moment()
object with the first month to display in the calendar.
An integer value indicating the number of months to display in the calendar
- The object's keys are the modifier's name – applied to each day, following a BEM-like syntax:
DayPicker-day--<modifier>
- The key's values are functions evaluated for each day. When they returns
true
, the modifier is applied, and eventually passed to theonDayTouchTap
payload.
For example, the following modifiers will add the CSS class DayPicker-day--disabled
to the days of the past:
modifiers = {
disabled: function (day) {
return day.diff(moment(), 'day') < 0;
}
}
<DayPicker modifiers={modifiers} />
Show the days outside the shown month.
Use one of these attributes to add an event handler when the user touches/clicks a day.
day <Object>
the touched day (a moment object)modifiers <Array>
array of modifiers for the touched day, e.g.['disabled', 'today']
event <SyntheticEvent>
the original touch event
To make the touch tap events working, you must inject react-tap-event-plugin client side.
Use this attribute to add an handler when the mouse enters/leaves a day element.
month <Object>
the current month (a moment object)event <SyntheticEvent>
the click event
Use this attribute to add an handler when the user switch to the previous/next month.
Show month
(Moment object).