Skip to content

Commit 3d35e45

Browse files
committed
Merge branch 'master' of github.com:ParadeTo/react-date-range
2 parents 8f7e987 + 5077c14 commit 3d35e45

File tree

10 files changed

+260
-47
lines changed

10 files changed

+260
-47
lines changed

demo/build.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin;
44
var path = require('path');
55
var DefinePlugin = webpack.DefinePlugin;
66
var WebpackDevServer = require("webpack-dev-server");
7-
var NODE_ENV = process.env.NODE_ENV || 'production';
7+
var NODE_ENV = process.env.NODE_ENV.trim() || 'production';
88

99
var config = {
1010
entry : {

demo/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
"scripts": {
77
"build": "node build.js",
88
"start-dev": "NODE_ENV=development npm run build",
9-
"build-prod": "NODE_ENV=production npm run build"
9+
"start-dev-windows": "set NODE_ENV=development & npm run build",
10+
"build-prod": "NODE_ENV=production npm run build",
11+
"build-prod-windows": "set NODE_ENV=production & npm run build"
1012
},
1113
"keywords": [],
1214
"author": "Burak Can <[email protected]>",
1315
"dependencies": {
16+
"moment": "^2.17.0",
1417
"normalize.css": "^3.0.3",
1518
"react": "^0.14.0",
1619
"react-dom": "^0.14.0"

demo/src/components/Main.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { Component } from 'react';
2+
import moment from 'moment';
23
import { defaultRanges, Calendar, DateRange } from '../../../lib';
34
import Section from 'components/Section';
45

@@ -100,6 +101,23 @@ export default class Main extends Component {
100101
/>
101102
</Section>
102103

104+
<Section title='Date Picker, chinese.'>
105+
<div>
106+
<input
107+
type='text'
108+
readOnly
109+
value={ datePicker && datePicker.format(format).toString() }
110+
/>
111+
</div>
112+
<Calendar
113+
disableDaysBeforeToday={true}
114+
lang={'jp'}
115+
date={ now => { return now } }
116+
onInit={ this.handleChange.bind(this, 'datePicker') }
117+
onChange={ this.handleChange.bind(this, 'datePicker') }
118+
/>
119+
</Section>
120+
103121
<Section title='Date Picker (Monday First)'>
104122
<div>
105123
<input
@@ -193,6 +211,34 @@ export default class Main extends Component {
193211
}}
194212
/>
195213
</Section>
214+
215+
<Section title='Mobile Datepicker'>
216+
<div>
217+
<input
218+
type='text'
219+
readOnly
220+
value={ rangePicker['startDate'] && rangePicker['startDate'].format(format).toString() }
221+
/>
222+
<input
223+
type='text'
224+
readOnly
225+
value={ rangePicker['endDate'] && rangePicker['endDate'].format(format).toString() }
226+
/>
227+
</div>
228+
<div className={styles['Mobile-Container']}>
229+
<DateRange
230+
startDate={ now => {return now.add(1,'month')}}
231+
endDate={ now => {return now.add(1,'month').add(3,'days')}}
232+
shownDate={moment()}
233+
offsetPositive={true}
234+
disableDaysBeforeToday={true}
235+
showMonthArrow={false}
236+
calendars={4}
237+
onInit={ this.handleChange.bind(this, 'rangePicker') }
238+
onChange={ this.handleChange.bind(this, 'rangePicker') }
239+
/>
240+
</div>
241+
</Section>
196242
</main>
197243
)
198244
}

demo/src/styles/main.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,10 @@
4747
border-radius: 2px;
4848
font-size: 1.2rem;
4949
}
50+
51+
:local(.Mobile-Container) {
52+
height: 500px;
53+
overflow-y: scroll;
54+
width: 296px;
55+
margin: 0 auto;
56+
}

lib/Calendar.js

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ var _DayCellJs = require('./DayCell.js');
3232

3333
var _DayCellJs2 = _interopRequireDefault(_DayCellJs);
3434

35+
var _LangDicJs = require('./LangDic.js');
36+
37+
var _LangDicJs2 = _interopRequireDefault(_LangDicJs);
38+
3539
var _stylesJs = require('./styles.js');
3640

3741
var _stylesJs2 = _interopRequireDefault(_stylesJs);
@@ -69,11 +73,12 @@ var Calendar = (function (_Component) {
6973
var theme = props.theme;
7074
var offset = props.offset;
7175
var firstDayOfWeek = props.firstDayOfWeek;
76+
var shownDate = props.shownDate;
7277

7378
var date = (0, _utilsParseInputJs2['default'])(props.date, format, 'startOf');
7479
var state = {
7580
date: date,
76-
shownDate: (range && range['endDate'] || date).clone().add(offset, 'months'),
81+
shownDate: (shownDate || range && range['endDate'] || date).clone().add(offset, 'months'),
7782
firstDayOfWeek: firstDayOfWeek || _moment2['default'].localeData().firstDayOfWeek()
7883
};
7984

@@ -149,19 +154,24 @@ var Calendar = (function (_Component) {
149154
var month = _moment2['default'].months(shownDate.month());
150155
var year = shownDate.year();
151156
var styles = this.styles;
152-
var onlyClasses = this.props.onlyClasses;
157+
var _props4 = this.props;
158+
var onlyClasses = _props4.onlyClasses;
159+
var lang = _props4.lang;
160+
var showMonthArrow = _props4.showMonthArrow;
161+
162+
month = lang ? _LangDicJs2['default'][lang][month.toLowerCase()] : month;
153163

154164
return _react2['default'].createElement(
155165
'div',
156166
{ style: onlyClasses ? undefined : styles['MonthAndYear'], className: classes.monthAndYearWrapper },
157-
_react2['default'].createElement(
167+
showMonthArrow ? _react2['default'].createElement(
158168
'button',
159169
{
160170
style: onlyClasses ? undefined : _extends({}, styles['MonthButton'], { float: 'left' }),
161171
className: classes.prevButton,
162172
onClick: this.changeMonth.bind(this, -1) },
163173
_react2['default'].createElement('i', { style: onlyClasses ? undefined : _extends({}, styles['MonthArrow'], styles['MonthArrowPrev']) })
164-
),
174+
) : null,
165175
_react2['default'].createElement(
166176
'span',
167177
null,
@@ -181,14 +191,14 @@ var Calendar = (function (_Component) {
181191
year
182192
)
183193
),
184-
_react2['default'].createElement(
194+
showMonthArrow ? _react2['default'].createElement(
185195
'button',
186196
{
187197
style: onlyClasses ? undefined : _extends({}, styles['MonthButton'], { float: 'right' }),
188198
className: classes.nextButton,
189199
onClick: this.changeMonth.bind(this, +1) },
190200
_react2['default'].createElement('i', { style: onlyClasses ? undefined : _extends({}, styles['MonthArrow'], styles['MonthArrowNext']) })
191-
)
201+
) : null
192202
);
193203
}
194204
}, {
@@ -197,11 +207,13 @@ var Calendar = (function (_Component) {
197207
var dow = this.state.firstDayOfWeek;
198208
var weekdays = [];
199209
var styles = this.styles;
200-
var onlyClasses = this.props.onlyClasses;
210+
var _props5 = this.props;
211+
var onlyClasses = _props5.onlyClasses;
212+
var lang = _props5.lang;
201213

202214
for (var i = dow; i < 7 + dow; i++) {
203215
var day = _moment2['default'].weekdaysMin(i);
204-
216+
day = lang ? _LangDicJs2['default'][lang][day.toLowerCase()] : day;
205217
weekdays.push(_react2['default'].createElement(
206218
'span',
207219
{ style: onlyClasses ? undefined : styles['Weekday'], className: classes.weekDay, key: day },
@@ -218,12 +230,13 @@ var Calendar = (function (_Component) {
218230

219231
// TODO: Split this logic into smaller chunks
220232
var styles = this.styles;
221-
var _props4 = this.props;
222-
var range = _props4.range;
223-
var minDate = _props4.minDate;
224-
var maxDate = _props4.maxDate;
225-
var format = _props4.format;
226-
var onlyClasses = _props4.onlyClasses;
233+
var _props6 = this.props;
234+
var range = _props6.range;
235+
var minDate = _props6.minDate;
236+
var maxDate = _props6.maxDate;
237+
var format = _props6.format;
238+
var onlyClasses = _props6.onlyClasses;
239+
var disableDaysBeforeToday = _props6.disableDaysBeforeToday;
227240

228241
var shownDate = this.getShownDate();
229242
var _state = this.state;
@@ -255,7 +268,13 @@ var Calendar = (function (_Component) {
255268
// Current month's days
256269
for (var i = 1; i <= dayCount; i++) {
257270
var dayMoment = shownDate.clone().date(i);
258-
days.push({ dayMoment: dayMoment });
271+
// set days before today to isPassive
272+
var _today = (0, _moment2['default'])();
273+
if (disableDaysBeforeToday && Number(dayMoment.diff(_today, "days")) <= -1) {
274+
days.push({ dayMoment: dayMoment, isPassive: true });
275+
} else {
276+
days.push({ dayMoment: dayMoment });
277+
}
259278
}
260279

261280
// Next month's days
@@ -298,9 +317,9 @@ var Calendar = (function (_Component) {
298317
key: 'render',
299318
value: function render() {
300319
var styles = this.styles;
301-
var _props5 = this.props;
302-
var onlyClasses = _props5.onlyClasses;
303-
var classNames = _props5.classNames;
320+
var _props7 = this.props;
321+
var onlyClasses = _props7.onlyClasses;
322+
var classNames = _props7.classNames;
304323

305324
var classes = _extends({}, _stylesJs.defaultClasses, classNames);
306325

@@ -332,11 +351,16 @@ var Calendar = (function (_Component) {
332351
Calendar.defaultProps = {
333352
format: 'DD/MM/YYYY',
334353
theme: {},
354+
showMonthArrow: true,
355+
disableDaysBeforeToday: false,
335356
onlyClasses: false,
336357
classNames: {}
337358
};
338359

339360
Calendar.propTypes = {
361+
showMonthArrow: _react.PropTypes.bool,
362+
disableDaysBeforeToday: _react.PropTypes.bool,
363+
lang: _react.PropTypes.string,
340364
sets: _react.PropTypes.string,
341365
range: _react.PropTypes.shape({
342366
startDate: _react.PropTypes.object,

lib/DateRange.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,11 @@ var DateRange = (function (_Component) {
173173
var maxDate = _props.maxDate;
174174
var classNames = _props.classNames;
175175
var onlyClasses = _props.onlyClasses;
176+
var lang = _props.lang;
177+
var disableDaysBeforeToday = _props.disableDaysBeforeToday;
178+
var offsetPositive = _props.offsetPositive;
179+
var shownDate = _props.shownDate;
180+
var showMonthArrow = _props.showMonthArrow;
176181
var _state = this.state;
177182
var range = _state.range;
178183
var link = _state.link;
@@ -193,10 +198,15 @@ var DateRange = (function (_Component) {
193198
classNames: classes }),
194199
(function () {
195200
var _calendars = [];
201+
var _method = offsetPositive ? 'unshift' : 'push';
196202
for (var i = Number(calendars) - 1; i >= 0; i--) {
197-
_calendars.push(_react2['default'].createElement(_CalendarJs2['default'], {
203+
_calendars[_method](_react2['default'].createElement(_CalendarJs2['default'], {
204+
showMonthArrow: showMonthArrow,
205+
shownDate: shownDate,
206+
disableDaysBeforeToday: disableDaysBeforeToday,
207+
lang: lang,
198208
key: i,
199-
offset: -i,
209+
offset: offsetPositive ? i : -i,
200210
link: linkedCalendars && link,
201211
linkCB: _this.handleLinkChange.bind(_this),
202212
range: range,
@@ -224,6 +234,7 @@ DateRange.defaultProps = {
224234
format: 'DD/MM/YYYY',
225235
calendars: 2,
226236
onlyClasses: false,
237+
offsetPositive: false,
227238
classNames: {}
228239
};
229240

@@ -242,6 +253,7 @@ DateRange.propTypes = {
242253
onInit: _react.PropTypes.func,
243254
onChange: _react.PropTypes.func,
244255
onlyClasses: _react.PropTypes.bool,
256+
offsetPositive: _react.PropTypes.bool,
245257
classNames: _react.PropTypes.object
246258
};
247259

lib/LangDic.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, '__esModule', {
4+
value: true
5+
});
6+
exports['default'] = {
7+
'cn': { // chinese
8+
'january': '一月',
9+
'february': '二月',
10+
'march': '三月',
11+
'april': '四月',
12+
'may': '五月',
13+
'june': '六月',
14+
'july': '七月',
15+
'august': '八月',
16+
'september': '九月',
17+
'october': '十月',
18+
'november': '十一月',
19+
'december': '十二月',
20+
'su': '日',
21+
'mo': '一',
22+
'tu': '二',
23+
'we': '三',
24+
'th': '四',
25+
'fr': '五',
26+
'sa': '六'
27+
},
28+
'jp': { // japanese
29+
'january': 'むつき',
30+
'february': 'きさらぎ',
31+
'march': 'やよい',
32+
'april': 'うづき',
33+
'may': 'さつき',
34+
'june': 'みなづき',
35+
'july': 'ふみづき',
36+
'august': 'はづき',
37+
'september': 'ながつき',
38+
'october': 'かんなづき',
39+
'november': 'しもつき',
40+
'december': 'しわす',
41+
'su': '日',
42+
'mo': '月',
43+
'tu': '火',
44+
'we': '水',
45+
'th': '木',
46+
'fr': '金',
47+
'sa': '土'
48+
}
49+
};
50+
module.exports = exports['default'];

0 commit comments

Comments
 (0)