react-widgets
Version:
69 lines (51 loc) • 1.78 kB
JavaScript
var React = require('react')
, dates = require('../util/dates')
, directions = require('../util/constants').directions;
module.exports = function(viewUnit, smallUnit){
return {
propTypes: {
value: React.PropTypes.instanceOf(Date),
min: React.PropTypes.instanceOf(Date),
max: React.PropTypes.instanceOf(Date),
},
getInitialState: function(){
return {
focusedDate: this.props.value
}
},
componentWillReceiveProps: function(nextProps) {
var focused = this.state.focusedDate
//!dates.inRange(focused, nextProps.min, nextProps.max)
if ( !dates.eq(nextProps.value, focused, smallUnit) )
this.setState({
focusedDate: nextProps.value
})
},
_keyDown: function(e){
var key = e.key
, alt = e.altKey
, current = this.state.focusedDate
, date = current;
if ( key === 'Enter')
return this.props.onChange(date)
if ( key === 'ArrowLeft')
date = this.move(date, directions.LEFT)
else if ( key === 'ArrowRight')
date = this.move(date, directions.RIGHT)
else if ( key === 'ArrowUp')
date = this.move(date, directions.UP)
else if ( key === 'ArrowDown')
date = this.move(date, directions.DOWN)
if ( !dates.eq(current, date, smallUnit) ) {
e.preventDefault()
if ( dates.gt(date, this.props.value, viewUnit) )
return this.props.onMoveRight(date)
if ( dates.lt(date, this.props.value, viewUnit) )
return this.props.onMoveLeft(date)
this.setState({
focusedDate: date
})
}
}
}
}