Skip to content

Commit 44b8159

Browse files
charliearliemartijnrusschen
authored andcommitted
Added setOpen as prop to week select function (Hacker0x01#1434)
* Added setOpen as prop to week select function * Added default shouldCloseOnSelect prop to Week component * Added test for setOpen function * Added another test for cases we do not want the picker to close * Moved sinon declaration * Removed afterEach hook
1 parent 27b1507 commit 44b8159

File tree

5 files changed

+79
-2
lines changed

5 files changed

+79
-2
lines changed

src/calendar.jsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ export default class Calendar extends React.Component {
109109
weekLabel: PropTypes.string,
110110
yearDropdownItemNumber: PropTypes.number,
111111
setOpen: PropTypes.func,
112+
shouldCloseOnSelect: PropTypes.bool,
112113
useShortMonthInDropdown: PropTypes.bool,
113114
showDisabledMonthNavigation: PropTypes.bool,
114115
previousMonthButtonLabel: PropTypes.string,
@@ -128,6 +129,15 @@ export default class Calendar extends React.Component {
128129
};
129130
}
130131

132+
static get defaultProps() {
133+
return {
134+
onDropdownFocus: () => {},
135+
monthsShown: 1,
136+
forceShowMonthNavigation: false,
137+
timeCaption: "Time"
138+
};
139+
}
140+
131141
constructor(props) {
132142
super(props);
133143
this.state = {
@@ -599,6 +609,8 @@ export default class Calendar extends React.Component {
599609
endDate={this.props.endDate}
600610
peekNextMonth={this.props.peekNextMonth}
601611
utcOffset={this.props.utcOffset}
612+
setOpen={this.props.setOpen}
613+
shouldCloseOnSelect={this.props.shouldCloseOnSelect}
602614
renderDayContents={this.props.renderDayContents}
603615
disabledKeyboardNavigation={this.props.disabledKeyboardNavigation}
604616
/>

src/index.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@ export default class DatePicker extends React.Component {
590590
locale={this.props.locale}
591591
adjustDateOnChange={this.props.adjustDateOnChange}
592592
setOpen={this.setOpen}
593+
shouldCloseOnSelect={this.props.shouldCloseOnSelect}
593594
dateFormat={this.props.dateFormatCalendar}
594595
useWeekdaysShort={this.props.useWeekdaysShort}
595596
formatWeekDay={this.props.formatWeekDay}

src/month.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export default class Month extends React.Component {
3333
selectsStart: PropTypes.bool,
3434
showWeekNumbers: PropTypes.bool,
3535
startDate: PropTypes.object,
36+
setOpen: PropTypes.func,
37+
shouldCloseOnSelect: PropTypes.bool,
3638
utcOffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
3739
renderDayContents: PropTypes.func
3840
};
@@ -99,6 +101,8 @@ export default class Month extends React.Component {
99101
endDate={this.props.endDate}
100102
dayClassName={this.props.dayClassName}
101103
utcOffset={this.props.utcOffset}
104+
setOpen={this.props.setOpen}
105+
shouldCloseOnSelect={this.props.shouldCloseOnSelect}
102106
disabledKeyboardNavigation={this.props.disabledKeyboardNavigation}
103107
renderDayContents={this.props.renderDayContents}
104108
/>

src/week.jsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import WeekNumber from "./week_number";
55
import * as utils from "./date_utils";
66

77
export default class Week extends React.Component {
8+
static get defaultProps() {
9+
return {
10+
shouldCloseOnSelect: true
11+
};
12+
}
813
static propTypes = {
914
disabledKeyboardNavigation: PropTypes.bool,
1015
day: PropTypes.object.isRequired,
@@ -29,6 +34,8 @@ export default class Week extends React.Component {
2934
selectsStart: PropTypes.bool,
3035
showWeekNumber: PropTypes.bool,
3136
startDate: PropTypes.object,
37+
setOpen: PropTypes.func,
38+
shouldCloseOnSelect: PropTypes.bool,
3239
utcOffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
3340
renderDayContents: PropTypes.func
3441
};
@@ -49,6 +56,9 @@ export default class Week extends React.Component {
4956
if (typeof this.props.onWeekSelect === "function") {
5057
this.props.onWeekSelect(day, weekNumber, event);
5158
}
59+
if (this.props.shouldCloseOnSelect) {
60+
this.props.setOpen(false);
61+
}
5262
};
5363

5464
formatWeekNumber = startOfWeek => {

test/week_test.js

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Week from "../src/week";
33
import WeekNumber from "../src/week_number";
44
import Day from "../src/day";
55
import { shallow } from "enzyme";
6+
import sinon from "sinon";
67
import * as utils from "../src/date_utils";
78

89
describe("Week", () => {
@@ -63,14 +64,58 @@ describe("Week", () => {
6364
}
6465

6566
const weekStart = utils.newDate("2015-12-20");
67+
const setOpenSpy = sinon.spy();
6668
const week = shallow(
67-
<Week day={weekStart} showWeekNumber onWeekSelect={onWeekClick} />
69+
<Week
70+
day={weekStart}
71+
showWeekNumber
72+
onWeekSelect={onWeekClick}
73+
setOpen={setOpenSpy}
74+
/>
6875
);
6976
const weekNumberElement = week.find(WeekNumber);
7077
weekNumberElement.simulate("click");
7178
expect(utils.equals(firstDayReceived, weekStart)).to.be.true;
7279
});
7380

81+
it("should call the provided onWeekSelect function and call the setopen function", () => {
82+
const weekStart = utils.newDate("2015-12-20");
83+
const setOpenSpy = sinon.spy();
84+
85+
const week = shallow(
86+
<Week
87+
day={weekStart}
88+
showWeekNumber
89+
shouldCloseOnSelect
90+
onWeekSelect={() => {}}
91+
setOpen={setOpenSpy}
92+
/>
93+
);
94+
95+
const weekNumberElement = week.find(WeekNumber);
96+
weekNumberElement.simulate("click");
97+
sinon.assert.calledOnce(setOpenSpy);
98+
});
99+
100+
it("should call the provided onWeekSelect function and not call the setopen function when 'shouldCloseOnSelect' is false", () => {
101+
const weekStart = utils.newDate("2015-12-20");
102+
const setOpenSpy = sinon.spy();
103+
104+
const week = shallow(
105+
<Week
106+
day={weekStart}
107+
showWeekNumber
108+
shouldCloseOnSelect={false}
109+
onWeekSelect={() => {}}
110+
setOpen={setOpenSpy}
111+
/>
112+
);
113+
114+
const weekNumberElement = week.find(WeekNumber);
115+
weekNumberElement.simulate("click");
116+
sinon.assert.notCalled(setOpenSpy);
117+
});
118+
74119
it("should call the provided onWeekSelect function and pass the week number", () => {
75120
let weekNumberReceived = null;
76121

@@ -81,7 +126,12 @@ describe("Week", () => {
81126
const weekStart = utils.newDate("2015-12-20");
82127
const realWeekNumber = utils.getWeek(weekStart);
83128
const week = shallow(
84-
<Week day={weekStart} showWeekNumber onWeekSelect={onWeekClick} />
129+
<Week
130+
day={weekStart}
131+
showWeekNumber
132+
shouldCloseOnSelect={false}
133+
onWeekSelect={onWeekClick}
134+
/>
85135
);
86136
const weekNumberElement = week.find(WeekNumber);
87137
weekNumberElement.simulate("click");

0 commit comments

Comments
 (0)