Skip to content

Commit c5a3383

Browse files
keenubeemartijnrusschen
authored andcommitted
Added prop to show previous month (Hacker0x01#1913)
1 parent d89a406 commit c5a3383

File tree

5 files changed

+36
-1
lines changed

5 files changed

+36
-1
lines changed

docs-site/src/components/Examples/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import FixedCalendar from "../../examples/fixedCalendar";
5050
import WeekNumbers from "../../examples/weekNumbers";
5151
import CustomInput from "../../examples/customInput";
5252
import MultiMonth from "../../examples/multiMonth";
53+
import MultiMonthPrevious from "../../examples/multiMonthPrevious";
5354
import MultiMonthDropdown from "../../examples/multiMonthDropdown";
5455
import MultiMonthInline from "../../examples/multiMonthInline";
5556
import Children from "../../examples/children";
@@ -263,6 +264,10 @@ export default class exampleComponents extends React.Component {
263264
title: "Multiple months",
264265
component: MultiMonth
265266
},
267+
{
268+
title: "Show previous months",
269+
component: MultiMonthPrevious
270+
},
266271
{
267272
title: "Multiple months with year dropdown",
268273
component: MultiMonthDropdown
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
() => {
2+
const [startDate, setStartDate] = useState(new Date());
3+
return (
4+
<DatePicker
5+
selected={startDate}
6+
showPreviousMonths
7+
onChange={date => setStartDate(date)}
8+
monthsShown={2}
9+
/>
10+
);
11+
};

src/calendar.jsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export default class Calendar extends React.Component {
106106
selectsEnd: PropTypes.bool,
107107
selectsStart: PropTypes.bool,
108108
showMonthDropdown: PropTypes.bool,
109+
showPreviousMonths: PropTypes.bool,
109110
showMonthYearDropdown: PropTypes.bool,
110111
showWeekNumbers: PropTypes.bool,
111112
showYearDropdown: PropTypes.bool,
@@ -605,9 +606,13 @@ export default class Calendar extends React.Component {
605606
}
606607

607608
var monthList = [];
609+
var monthsToSubtract = this.props.showPreviousMonths
610+
? this.props.monthsShown - 1
611+
: 0;
612+
var fromMonthDate = subMonths(this.state.date, monthsToSubtract);
608613
for (var i = 0; i < this.props.monthsShown; ++i) {
609614
var monthsToAdd = i - this.props.monthSelectedIn;
610-
var monthDate = addMonths(this.state.date, monthsToAdd);
615+
var monthDate = addMonths(fromMonthDate, monthsToAdd);
611616
var monthKey = `month-${i}`;
612617
monthList.push(
613618
<div

src/index.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ export default class DatePicker extends React.Component {
128128
selectsEnd: PropTypes.bool,
129129
selectsStart: PropTypes.bool,
130130
showMonthDropdown: PropTypes.bool,
131+
showPreviousMonths: PropTypes.bool,
131132
showMonthYearDropdown: PropTypes.bool,
132133
showWeekNumbers: PropTypes.bool,
133134
showYearDropdown: PropTypes.bool,
@@ -198,6 +199,7 @@ export default class DatePicker extends React.Component {
198199
shouldCloseOnSelect: true,
199200
showTimeSelect: false,
200201
showTimeInput: false,
202+
showPreviousMonths: false,
201203
showMonthYearPicker: false,
202204
showQuarterYearPicker: false,
203205
strictParsing: false,
@@ -654,6 +656,7 @@ export default class DatePicker extends React.Component {
654656
inline={this.props.inline}
655657
peekNextMonth={this.props.peekNextMonth}
656658
showMonthDropdown={this.props.showMonthDropdown}
659+
showPreviousMonths={this.props.showPreviousMonths}
657660
useShortMonthInDropdown={this.props.useShortMonthInDropdown}
658661
showMonthYearDropdown={this.props.showMonthYearDropdown}
659662
showWeekNumbers={this.props.showWeekNumbers}

test/multi_month_test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from "react";
22
import Calendar from "../src/calendar";
33
import Month from "../src/month";
44
import YearDropdown from "../src/year_dropdown";
5+
import * as utils from "../src/date_utils";
56
import { shallow } from "enzyme";
67

78
describe("Multi month calendar", function() {
@@ -31,4 +32,14 @@ describe("Multi month calendar", function() {
3132
var datepickers = calendar.find(YearDropdown);
3233
expect(datepickers).to.have.length(1);
3334
});
35+
36+
it("should render previous months", () => {
37+
var calendar = getCalendar({ monthsShown: 2, showPreviousMonths: true });
38+
var monthDate = calendar
39+
.find(Month)
40+
.first()
41+
.prop("day");
42+
var previousMonth = utils.subMonths(utils.newDate(), 1);
43+
expect(utils.isSameMonth(previousMonth, monthDate)).to.be.true;
44+
});
3445
});

0 commit comments

Comments
 (0)