From 5a7082aa9bf9cf704d085a1deb069ab7ae1015ad Mon Sep 17 00:00:00 2001 From: Kevin Chappell Date: Sun, 4 Jun 2017 04:02:26 +0100 Subject: [PATCH 1/2] Add rangeConstraint prop --- Calendar.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Calendar.js b/Calendar.js index 8eff679..6c52087 100644 --- a/Calendar.js +++ b/Calendar.js @@ -23,6 +23,7 @@ export default class Calendar extends Component { static propTypes = { i18n: PropTypes.string, format: PropTypes.string, + rangeConstraint: PropTypes.string, customI18n: PropTypes.object, color: PropTypes.object, minDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]), @@ -31,6 +32,7 @@ export default class Calendar extends Component { static defaultProps = { format: 'YYYY-MM-DD', i18n: 'en', + rangeConstraint: 'none', customI18n: {}, color: {} } @@ -153,7 +155,18 @@ export default class Calendar extends Component { startDate, endDate } = this.state; - if ((!startDate && !endDate) || day < startDate || (startDate && endDate)) { + if (this.props.rangeConstraint === 'week') { + let startDay = Moment(day).startOf('week') + let endDay = Moment(day).endOf('week') + this.setState({ + startDate: startDay, + endDate: endDay, + startDateText: this._i18n(startDay, 'date'), + startWeekdayText: this._i18n(startDay.isoWeekday(), 'weekday'), + endDateText: this._i18n(endDay, 'date'), + endWeekdayText: this._i18n(endDay.isoWeekday(), 'weekday') + }); + } else if ((!startDate && !endDate) || day < startDate || (startDate && endDate)) { this.setState({ startDate: day, endDate: null, From c916749bc5334cb0336bf07607ccfbd1ca2ab77f Mon Sep 17 00:00:00 2001 From: Kevin Chappell Date: Sun, 4 Jun 2017 11:40:09 +0100 Subject: [PATCH 2/2] Add test --- __tests__/Calendar.test.js | 20 ++++++++++++++++++++ package.json | 1 + 2 files changed, 21 insertions(+) diff --git a/__tests__/Calendar.test.js b/__tests__/Calendar.test.js index 0abc63f..5b05809 100644 --- a/__tests__/Calendar.test.js +++ b/__tests__/Calendar.test.js @@ -58,6 +58,26 @@ let invalidDateCalC = shallow( /> ); +let rangeConstraintWeekCal = shallow( + +); + +test('It constrains selection to full weeks', done => { + let instance = rangeConstraintWeekCal.instance(); + expect(rangeConstraintWeekCal.state('isModalVisible')).toEqual(false); + instance.componentDidMount(); + instance.open(); + instance._onChoose(Moment('20170607', 'YYYYMMDD')); + expect(rangeConstraintWeekCal.state('startDate').isSame(Moment('20170604', 'YYYYMMDD'))).toEqual(true); + expect(rangeConstraintWeekCal.state('startWeekdayText')).toEqual('Sunday'); + expect(rangeConstraintWeekCal.state('endWeekdayText')).toEqual('Saturday'); + expect(rangeConstraintWeekCal.state('endDate').isSame(Moment('20170610', 'YYYYMMDD').endOf('week'))).toEqual(true); + done(); +}); + test('It renders calendar correctly', done => { let instance = cal.instance(); expect(cal.state('isModalVisible')).toEqual(false); diff --git a/package.json b/package.json index b1c77f1..70afdc4 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "ios": "react-native run-ios", "android": "react-native run-android", "test": "jest", + "test:watch": "jest --watch", "coverage": "cat ./coverage/lcov.info | coveralls", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" },