Skip to content

Commit 7478b88

Browse files
author
Martin Schwier
committed
TimeList: add prop preSelectedItem / List: scoll preSelectedItem to top of list
1 parent c2f35da commit 7478b88

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

src/List.jsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ export default React.createClass({
3737

3838
messages: React.PropTypes.shape({
3939
emptyList: CustomPropTypes.message
40-
})
40+
}),
41+
42+
scrollToTop: React.PropTypes.bool
4143
},
4244

4345

@@ -49,12 +51,13 @@ export default React.createClass({
4951
data: [],
5052
messages: {
5153
emptyList: 'There are no items in this list'
52-
}
54+
},
55+
scrollToTop: false
5356
}
5457
},
5558

5659
componentDidMount(){
57-
this.move()
60+
this.move(this.props.scrollToTop)
5861
},
5962

6063
componentDidUpdate(){
@@ -131,14 +134,14 @@ export default React.createClass({
131134
return this.props.data
132135
},
133136

134-
move(){
137+
move(scrollToTop = false){
135138
var list = compat.findDOMNode(this)
136139
, idx = this._data().indexOf(this.props.focused)
137140
, selected = list.children[idx];
138141

139142
if( !selected ) return
140143

141-
notify(this.props.onMove, [ selected, list, this.props.focused ])
144+
notify(this.props.onMove, [ selected, list, this.props.focused, scrollToTop ])
142145
}
143146

144147
})

src/TimeList.jsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export default React.createClass({
2424
onSelect: React.PropTypes.func,
2525
preserveDate: React.PropTypes.bool,
2626
culture: React.PropTypes.string,
27-
delay: React.PropTypes.number
27+
delay: React.PropTypes.number,
28+
preSelectedItem: React.PropTypes.instanceOf(Date)
2829
},
2930

3031
mixins: [
@@ -39,13 +40,14 @@ export default React.createClass({
3940
max: new Date(2099, 11, 31),
4041
preserveDate: true,
4142
delay: 300,
42-
ariaActiveDescendantKey: 'timelist'
43+
ariaActiveDescendantKey: 'timelist',
44+
preSelectedItem: null
4345
}
4446
},
4547

4648
getInitialState(){
4749
var data = this._dates(this.props)
48-
, focusedItem = this._closestDate(data, this.props.value);
50+
, focusedItem = this._closestDate(data, this.props.value ? this.props.value : this.props.preSelectedItem);
4951

5052
return {
5153
focusedItem: focusedItem || data[0],
@@ -86,6 +88,7 @@ export default React.createClass({
8688
selected={date}
8789
onSelect={onSelect}
8890
focused={this.state.focusedItem}
91+
scrollToTop={!!this.props.preSelectedItem}
8992
/>
9093
)
9194
},

src/mixins/PopupScrollToMixin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import scrollTo from 'dom-helpers/util/scrollTo';
22

33
export default {
44

5-
_scrollTo(selected, list, focused) {
5+
_scrollTo(selected, list, focused, scrollToTop = false) {
66
var state = this._scrollState || (this._scrollState = {})
77
, handler = this.props.onMove
88
, lastVisible = state.visible
@@ -20,7 +20,7 @@ export default {
2020
handler(selected, list, focused)
2121
else {
2222
state.scrollCancel && state.scrollCancel()
23-
state.scrollCancel = scrollTo(selected, list)
23+
state.scrollCancel = scrollTo(selected, list, scrollToTop)
2424
}
2525
}
2626
}

0 commit comments

Comments
 (0)