Skip to content

Commit a98fabf

Browse files
committed
Show days in range
1 parent 7c01251 commit a98fabf

File tree

8 files changed

+50
-7
lines changed

8 files changed

+50
-7
lines changed

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"react": "< 0.13",
2626
"moment": "2.8.2",
2727
"tether": "0.6.5",
28-
"react-onclickoutside": "0.2.1"
28+
"react-onclickoutside": "0.2.1",
29+
"moment-range": "~1.0.6"
2930
},
3031
"ignore": [
3132
"**/.*",

example.html

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<script src="https://cdn.jsdelivr.net/momentjs/2.9.0/moment.min.js"></script>
44
<script src="https://cdn.jsdelivr.net/react/0.12.2/react-with-addons.js"></script>
55
<script src="https://cdn.jsdelivr.net/tether/0.6.5/tether.min.js"></script>
6+
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/1.0.5/moment-range.min.js"></script>
67
<script type="text/javascript" src="react-datepicker.js"></script>
78
<link rel="stylesheet" type="text/css" href="react-datepicker.css">
89
</head>
@@ -33,7 +34,7 @@ <h1>ReactJS DatePicker Example</h1>
3334

3435
getInitialState: function() {
3536
return {
36-
start_date: moment(),
37+
start_date: moment().subtract(10, 'days'),
3738
end_date: moment(),
3839
new_date: null,
3940
bound_date: null
@@ -71,25 +72,43 @@ <h1>ReactJS DatePicker Example</h1>
7172
selected: this.state.start_date,
7273
onChange: this.handleStartDateChange
7374
}),
75+
7476
DatePickerFactory({
7577
key: 'example2',
7678
selected: this.state.end_date,
7779
dateFormat: "YYYY/MM/DD",
7880
onChange: this.handleEndDateChange
7981
}),
82+
8083
DatePickerFactory({
8184
key: 'example3',
8285
selected: this.state.new_date,
8386
onChange: this.handleNewDateChange,
8487
placeholderText: 'Click to select a date'
8588
}),
89+
8690
DatePickerFactory({
8791
key: 'example4',
8892
selected: this.state.bound_date,
8993
onChange: this.handleBoundDateChange,
9094
minDate: moment(),
9195
maxDate: moment().add(5, 'days'),
9296
placeholderText: 'Select a date between today and 5 days in the future'
97+
}),
98+
99+
DatePickerFactory({
100+
key: 'example5',
101+
selected: this.state.start_date,
102+
onChange: this.handleStartDateChange,
103+
startDate: this.state.start_date,
104+
endDate: this.state.end_date
105+
}),
106+
DatePickerFactory({
107+
key: 'example6',
108+
selected: this.state.end_date,
109+
onChange: this.handleEndDateChange,
110+
startDate: this.state.start_date,
111+
endDate: this.state.end_date
93112
})
94113
]);
95114
}

react-datepicker.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,12 @@
113113
.datepicker__day--today {
114114
font-weight: bold;
115115
}
116-
.datepicker__day--selected {
116+
.datepicker__day--selected, .datepicker__day--in-range {
117117
border-radius: 4px;
118118
background-color: #216ba5;
119119
color: #fff;
120120
}
121-
.datepicker__day--selected:hover {
121+
.datepicker__day--selected:hover, .datepicker__day--in-range:hover {
122122
background-color: #1d5d90;
123123
}
124124
.datepicker__day--disabled {

react-datepicker.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,17 +140,25 @@ var Calendar = React.createClass({displayName: "Calendar",
140140
},
141141

142142
renderDay: function(day, key) {
143+
// Initiatie variables for disabling days
143144
var minDate = new DateUtil(this.props.minDate).safeClone(),
144145
maxDate = new DateUtil(this.props.maxDate).safeClone(),
145146
disabled = day.isBefore(minDate) || day.isAfter(maxDate);
146147

148+
// Initiatie variables for displaying days in range
149+
var startDate = moment(this.props.startDate).startOf('day').subtract(1, 'seconds'),
150+
endDate = moment(this.props.endDate.startOf('day')).add(1, 'seconds'),
151+
range = moment().range(startDate, endDate),
152+
inRange = range.contains(day.moment());
153+
147154
return (
148155
React.createElement(Day, {
149156
key: key,
150157
day: day,
151158
date: this.state.date,
152159
onClick: this.handleDayClick.bind(this, day),
153160
selected: new DateUtil(this.props.selected),
161+
inRange: inRange,
154162
disabled: disabled})
155163
);
156164
},
@@ -343,7 +351,9 @@ var DatePicker = React.createClass({displayName: "DatePicker",
343351
onSelect: this.handleSelect,
344352
hideCalendar: this.hideCalendar,
345353
minDate: this.props.minDate,
346-
maxDate: this.props.maxDate})
354+
maxDate: this.props.maxDate,
355+
startDate: this.props.startDate,
356+
endDate: this.props.endDate})
347357
)
348358
);
349359
}
@@ -386,6 +396,7 @@ var Day = React.createClass({displayName: "Day",
386396
classes = React.addons.classSet({
387397
'datepicker__day': true,
388398
'datepicker__day--disabled': this.props.disabled,
399+
'datepicker__day--in-range': this.props.inRange,
389400
'datepicker__day--selected': this.props.day.sameDay(this.props.selected),
390401
'datepicker__day--this-month': this.props.day.sameMonth(this.props.date),
391402
'datepicker__day--today': this.props.day.sameDay(moment())

src/calendar.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,25 @@ var Calendar = React.createClass({
5858
},
5959

6060
renderDay: function(day, key) {
61+
// Initiatie variables for disabling days
6162
var minDate = new DateUtil(this.props.minDate).safeClone(),
6263
maxDate = new DateUtil(this.props.maxDate).safeClone(),
6364
disabled = day.isBefore(minDate) || day.isAfter(maxDate);
6465

66+
// Initiatie variables for displaying days in range
67+
var startDate = moment(this.props.startDate).startOf('day').subtract(1, 'seconds'),
68+
endDate = moment(this.props.endDate.startOf('day')).add(1, 'seconds'),
69+
range = moment().range(startDate, endDate),
70+
inRange = range.contains(day.moment());
71+
6572
return (
6673
<Day
6774
key={key}
6875
day={day}
6976
date={this.state.date}
7077
onClick={this.handleDayClick.bind(this, day)}
7178
selected={new DateUtil(this.props.selected)}
79+
inRange={inRange}
7280
disabled={disabled} />
7381
);
7482
},

src/datepicker.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ var DatePicker = React.createClass({
5353
onSelect={this.handleSelect}
5454
hideCalendar={this.hideCalendar}
5555
minDate={this.props.minDate}
56-
maxDate={this.props.maxDate} />
56+
maxDate={this.props.maxDate}
57+
startDate={this.props.startDate}
58+
endDate={this.props.endDate} />
5759
</Popover>
5860
);
5961
}

src/day.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var Day = React.createClass({
1111
classes = React.addons.classSet({
1212
'datepicker__day': true,
1313
'datepicker__day--disabled': this.props.disabled,
14+
'datepicker__day--in-range': this.props.inRange,
1415
'datepicker__day--selected': this.props.day.sameDay(this.props.selected),
1516
'datepicker__day--this-month': this.props.day.sameMonth(this.props.date),
1617
'datepicker__day--today': this.props.day.sameDay(moment())

src/stylesheets/datepicker.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@
103103
font-weight: bold;
104104
}
105105

106-
&--selected {
106+
&--selected,
107+
&--in-range {
107108
border-radius: $border-radius;
108109
background-color: $selected-color;
109110
color: #fff;

0 commit comments

Comments
 (0)