UNPKG

@ysmood/material-ui

Version:

Material Design UI components built with React

89 lines (73 loc) 2.22 kB
var React = require('react'); var DateTime = require('../utils/date-time'); var DayButton = require('./day-button'); var ClearFix = require('../clearfix'); var CalendarMonth = React.createClass({ propTypes: { displayDate: React.PropTypes.object.isRequired, onDayTouchTap: React.PropTypes.func, selectedDate: React.PropTypes.object.isRequired, minDate: React.PropTypes.object, maxDate: React.PropTypes.object, shouldDisableDate: React.PropTypes.func, autoOk: React.PropTypes.bool }, render: function() { var styles = { lineHeight: '32px', textAlign: 'center', padding: '8px 14px 0 14px', }; return ( <div style={styles}> {this._getWeekElements()} </div> ); }, isSelectedDateDisabled: function() { return this._selectedDateDisabled; }, _getWeekElements: function() { var weekArray = DateTime.getWeekArray(this.props.displayDate); return weekArray.map(function(week, i) { return ( <ClearFix key={i}> {this._getDayElements(week, i)} </ClearFix> ); }, this); }, _getDayElements: function(week, i) { return week.map(function(day, j) { var isSameDate = DateTime.isEqualDate(this.props.selectedDate, day); var disabled = this._shouldDisableDate(day); var selected = !disabled && isSameDate; if (isSameDate) { if (disabled) { this._selectedDateDisabled = true; } else { this._selectedDateDisabled = false; } } return ( <DayButton key={'db' + i + j} date={day} onTouchTap={this._handleDayTouchTap} selected={selected} disabled={disabled} /> ); }, this); }, _handleDayTouchTap: function(e, date) { if (this.props.onDayTouchTap) this.props.onDayTouchTap(e, date); }, _shouldDisableDate: function(day) { if (day === null) return false; var disabled = !DateTime.isBetweenDates(day, this.props.minDate, this.props.maxDate); if (!disabled && this.props.shouldDisableDate) disabled = this.props.shouldDisableDate(day); return disabled; } }); module.exports = CalendarMonth;