Skip to content
This repository was archived by the owner on May 19, 2025. It is now read-only.

Commit 7589bfb

Browse files
committed
navigation arrows now hide if they are in the middle of linked calendars
1 parent 201d582 commit 7589bfb

File tree

6 files changed

+56
-164
lines changed

6 files changed

+56
-164
lines changed

demo/src/components/Main.js

Lines changed: 6 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -49,144 +49,16 @@ export default class Main extends Component {
4949
</div>
5050

5151
<DateRange
52-
singleDate={ true }
53-
onInit={ this.handleChange.bind(this, 'rangePicker') }
54-
onChange={ this.handleChange.bind(this, 'rangePicker') }
55-
/>
56-
</Section>
57-
58-
<Section title='Range Picker (Linked Calendars)'>
59-
<div>
60-
<input
61-
type='text'
62-
readOnly
63-
value={ linked['startDate'] && linked['startDate'].format(format).toString() }
64-
/>
65-
<input
66-
type='text'
67-
readOnly
68-
value={ linked['endDate'] && linked['endDate'].format(format).toString() }
69-
/>
70-
</div>
71-
<DateRange
72-
startDate={ now => {
73-
return '9/10/2015';
74-
}}
75-
endDate={ now => {
76-
return '13/11/2015';
77-
}}
78-
linkedCalendars={ true }
79-
onInit={ this.handleChange.bind(this, 'linked') }
80-
onChange={ this.handleChange.bind(this, 'linked') }
81-
/>
82-
</Section>
83-
84-
<Section title='Date Picker'>
85-
<div>
86-
<input
87-
type='text'
88-
readOnly
89-
value={ datePicker && datePicker.format(format).toString() }
90-
/>
91-
</div>
92-
<Calendar
93-
date={ now => { return now.add(-4, 'days') } }
94-
onInit={ this.handleChange.bind(this, 'datePicker') }
95-
onChange={ this.handleChange.bind(this, 'datePicker') }
96-
/>
97-
</Section>
98-
99-
<Section title='Date Picker (Monday First)'>
100-
<div>
101-
<input
102-
type='text'
103-
readOnly
104-
value={ firstDayOfWeek && firstDayOfWeek.format(format).toString() }
105-
/>
106-
</div>
107-
<Calendar
108-
firstDayOfWeek={ 1 }
109-
date={ now => { return now.add(-4, 'days') } }
110-
onInit={ this.handleChange.bind(this, 'firstDayOfWeek') }
111-
onChange={ this.handleChange.bind(this, 'firstDayOfWeek') }
112-
/>
113-
</Section>
114-
115-
<Section title='Range Picker (Predefined Ranges)'>
116-
<div>
117-
<input
118-
type='text'
119-
readOnly
120-
value={ predefined['startDate'] && predefined['startDate'].format(format).toString() }
121-
/>
122-
<input
123-
type='text'
124-
readOnly
125-
value={ predefined['endDate'] && predefined['endDate'].format(format).toString() }
126-
/>
127-
</div>
128-
<DateRange
52+
pickSingleDate={ true }
12953
linkedCalendars={ true }
130-
ranges={ defaultRanges }
131-
onInit={ this.handleChange.bind(this, 'predefined') }
132-
onChange={ this.handleChange.bind(this, 'predefined') }
54+
calendars={ 3 }
13355
theme={{
134-
Calendar : { width: 200 },
135-
PredefinedRanges : { marginLeft: 10, marginTop: 10 }
136-
}}
137-
/>
138-
</Section>
139-
140-
<Section title='Theming'>
141-
<div />
142-
<DateRange
143-
linkedCalendars={ true }
144-
theme={{
145-
DateRange : {
146-
background : '#ffffff'
147-
},
148-
Calendar : {
149-
background : 'transparent',
150-
color : '#95a5a6',
151-
},
152-
MonthAndYear : {
153-
background : '#e74c3c',
154-
color : '#9e3024'
155-
},
156-
MonthButton : {
157-
background : '#c0392b'
158-
},
159-
MonthArrowPrev : {
160-
borderRightColor : '#d96659',
161-
},
162-
MonthArrowNext : {
163-
borderLeftColor : '#d96659',
164-
},
165-
Weekday : {
166-
background : '#e74c3c',
167-
color : '#9e3024'
168-
},
169-
Day : {
170-
transition : 'transform .1s ease, box-shadow .1s ease, background .1s ease'
171-
},
172-
DaySelected : {
173-
background : '#8e44ad'
174-
},
175-
DayActive : {
176-
background : '#8e44ad',
177-
boxShadow : 'none'
178-
},
179-
DayInRange : {
180-
background : '#9b59b6',
181-
color : '#fff'
182-
},
183-
DayHover : {
184-
background : '#ffffff',
185-
color : '#7f8c8d',
186-
transform : 'scale(1.1) translateY(-10%)',
187-
boxShadow : '0 2px 4px rgba(0, 0, 0, 0.4)'
56+
Calendar:{
57+
width:'193px',
18858
}
18959
}}
60+
onInit={ this.handleChange.bind(this, 'rangePicker') }
61+
onChange={ this.handleChange.bind(this, 'rangePicker') }
19062
/>
19163
</Section>
19264
</main>

demo/src/styles/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
}
3333

3434
:local(.Demo) {
35-
width: 560px;
35+
width: 581px;
3636
float: left;
3737
}
3838

lib/Calendar.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ var Calendar = (function (_Component) {
6969
var theme = props.theme;
7070
var offset = props.offset;
7171
var firstDayOfWeek = props.firstDayOfWeek;
72+
var index = props.index;
7273

7374
var date = (0, _utilsParseInputJs2['default'])(props.date, format);
7475
var state = {
7576
date: date,
77+
index: index,
7678
inputtedDate: props.date ? true : false,
7779
shownDate: (range && range['endDate'] || date).clone().add(offset, 'months'),
7880
firstDayOfWeek: firstDayOfWeek || _moment2['default'].localeData().firstDayOfWeek()
@@ -106,6 +108,7 @@ var Calendar = (function (_Component) {
106108
var _props2 = this.props;
107109
var link = _props2.link;
108110
var onChange = _props2.onChange;
111+
var offset = _props2.offset;
109112
var date = this.state.date;
110113

111114
onChange && onChange(newDate, Calendar);
@@ -139,12 +142,18 @@ var Calendar = (function (_Component) {
139142
var month = _moment2['default'].months(shownDate.month());
140143
var year = shownDate.year();
141144
var styles = this.styles;
142-
var onlyClasses = this.props.onlyClasses;
145+
var _props4 = this.props;
146+
var onlyClasses = _props4.onlyClasses;
147+
var firstIndex = _props4.firstIndex;
148+
var offset = _props4.offset;
149+
var pickSingleDate = _props4.pickSingleDate;
143150

151+
var start = -firstIndex === offset;
152+
var end = offset === 0;
144153
return _react2['default'].createElement(
145154
'div',
146155
{ style: onlyClasses ? undefined : styles['MonthAndYear'], className: classes.monthAndYearWrapper },
147-
_react2['default'].createElement(
156+
start && pickSingleDate && _react2['default'].createElement(
148157
'button',
149158
{
150159
style: onlyClasses ? undefined : _extends({}, styles['MonthButton'], { float: 'left' }),
@@ -171,7 +180,7 @@ var Calendar = (function (_Component) {
171180
year
172181
)
173182
),
174-
_react2['default'].createElement(
183+
end && pickSingleDate && _react2['default'].createElement(
175184
'button',
176185
{
177186
style: onlyClasses ? undefined : _extends({}, styles['MonthButton'], { float: 'right' }),
@@ -208,12 +217,12 @@ var Calendar = (function (_Component) {
208217

209218
// TODO: Split this logic into smaller chunks
210219
var styles = this.styles;
211-
var _props4 = this.props;
212-
var range = _props4.range;
213-
var minDate = _props4.minDate;
214-
var maxDate = _props4.maxDate;
215-
var format = _props4.format;
216-
var onlyClasses = _props4.onlyClasses;
220+
var _props5 = this.props;
221+
var range = _props5.range;
222+
var minDate = _props5.minDate;
223+
var maxDate = _props5.maxDate;
224+
var format = _props5.format;
225+
var onlyClasses = _props5.onlyClasses;
217226

218227
var shownDate = this.getShownDate();
219228
var _state = this.state;
@@ -289,9 +298,9 @@ var Calendar = (function (_Component) {
289298
key: 'render',
290299
value: function render() {
291300
var styles = this.styles;
292-
var _props5 = this.props;
293-
var onlyClasses = _props5.onlyClasses;
294-
var classNames = _props5.classNames;
301+
var _props6 = this.props;
302+
var onlyClasses = _props6.onlyClasses;
303+
var classNames = _props6.classNames;
295304

296305
var classes = _extends({}, _stylesJs.defaultClasses, classNames);
297306

lib/DateRange.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ var DateRange = (function (_Component) {
188188
var maxDate = _props2.maxDate;
189189
var classNames = _props2.classNames;
190190
var onlyClasses = _props2.onlyClasses;
191+
var pickSingleDate = _props2.pickSingleDate;
191192
var _state = this.state;
192193
var range = _state.range;
193194
var link = _state.link;
@@ -212,8 +213,10 @@ var DateRange = (function (_Component) {
212213
_calendars.push(_react2['default'].createElement(_CalendarJs2['default'], {
213214
key: i,
214215
offset: -i,
216+
firstIndex: calendars - 1,
215217
link: linkedCalendars && link,
216218
linkCB: _this.handleLinkChange.bind(_this),
219+
pickSingleDate: pickSingleDate,
217220
range: range,
218221
format: format,
219222
firstDayOfWeek: firstDayOfWeek,

src/Calendar.js

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ class Calendar extends Component {
3535
constructor(props, context) {
3636
super(props, context);
3737

38-
const { format, range, theme, offset, firstDayOfWeek } = props;
38+
const { format, range, theme, offset, firstDayOfWeek, index } = props;
3939
const date = parseInput(props.date, format)
4040
const state = {
4141
date,
42+
index: index,
4243
inputtedDate: props.date ? true : false,
4344
shownDate : (range && range['endDate'] || date).clone().add(offset, 'months'),
4445
firstDayOfWeek: (firstDayOfWeek || moment.localeData().firstDayOfWeek()),
@@ -61,7 +62,7 @@ class Calendar extends Component {
6162
}
6263

6364
handleSelect(newDate) {
64-
const { link, onChange } = this.props;
65+
const { link, onChange, offset } = this.props;
6566
const { date } = this.state;
6667

6768
onChange && onChange(newDate, Calendar);
@@ -91,27 +92,32 @@ class Calendar extends Component {
9192
const month = moment.months(shownDate.month());
9293
const year = shownDate.year();
9394
const { styles } = this;
94-
const { onlyClasses } = this.props;
95-
95+
const { onlyClasses, firstIndex, offset, pickSingleDate } = this.props;
96+
const start = -firstIndex === offset
97+
const end = offset === 0
9698
return (
9799
<div style={onlyClasses ? undefined : styles['MonthAndYear']} className={classes.monthAndYearWrapper}>
98-
<button
99-
style={onlyClasses ? undefined : { ...styles['MonthButton'], float : 'left' }}
100-
className={classes.prevButton}
101-
onClick={this.changeMonth.bind(this, -1)}>
102-
<i style={onlyClasses ? undefined : { ...styles['MonthArrow'], ...styles['MonthArrowPrev'] }}></i>
103-
</button>
100+
{ start && pickSingleDate &&
101+
<button
102+
style={onlyClasses ? undefined : { ...styles['MonthButton'], float : 'left' }}
103+
className={classes.prevButton}
104+
onClick={this.changeMonth.bind(this, -1)}>
105+
<i style={onlyClasses ? undefined : { ...styles['MonthArrow'], ...styles['MonthArrowPrev'] }}></i>
106+
</button>
107+
}
104108
<span>
105109
<span className={classes.month}>{month}</span>
106110
<span className={classes.monthAndYearDivider}> - </span>
107111
<span className={classes.year}>{year}</span>
108112
</span>
109-
<button
110-
style={onlyClasses ? undefined : { ...styles['MonthButton'], float : 'right' }}
111-
className={classes.nextButton}
112-
onClick={this.changeMonth.bind(this, +1)}>
113-
<i style={onlyClasses ? undefined : { ...styles['MonthArrow'], ...styles['MonthArrowNext'] }}></i>
114-
</button>
113+
{ end && pickSingleDate &&
114+
<button
115+
style={onlyClasses ? undefined : { ...styles['MonthButton'], float : 'right' }}
116+
className={classes.nextButton}
117+
onClick={this.changeMonth.bind(this, +1)}>
118+
<i style={onlyClasses ? undefined : { ...styles['MonthArrow'], ...styles['MonthArrowNext'] }}></i>
119+
</button>
120+
}
115121
</div>
116122
)
117123
}

src/DateRange.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class DateRange extends Component {
118118
}
119119

120120
render() {
121-
const { ranges, format, linkedCalendars, style, calendars, firstDayOfWeek, minDate, maxDate, classNames, onlyClasses } = this.props;
121+
const { ranges, format, linkedCalendars, style, calendars, firstDayOfWeek, minDate, maxDate, classNames, onlyClasses, pickSingleDate } = this.props;
122122
const { range, link } = this.state;
123123
const { styles } = this;
124124

@@ -144,8 +144,10 @@ class DateRange extends Component {
144144
<Calendar
145145
key={i}
146146
offset={ -i }
147+
firstIndex={ calendars - 1 }
147148
link={ linkedCalendars && link }
148149
linkCB={ this.handleLinkChange.bind(this) }
150+
pickSingleDate={ pickSingleDate }
149151
range={ range }
150152
format={ format }
151153
firstDayOfWeek={ firstDayOfWeek }

0 commit comments

Comments
 (0)