'use strict'; var React = require('react'), createClass = require('create-react-class'), onClickOutside = require('react-onclickoutside').default ; var DateTimePickerMonths = onClickOutside( createClass({ render: function() { return React.createElement('div', { className: 'rdtMonths' }, [ React.createElement('table', { key: 'a' }, React.createElement('thead', {}, React.createElement('tr', {}, [ React.createElement('th', { key: 'prev', className: 'rdtPrev', onClick: this.props.subtractTime( 1, 'years' )}, React.createElement('span', {}, '‹' )), React.createElement('th', { key: 'year', className: 'rdtSwitch', onClick: this.props.showView( 'years' ), colspan: 2, 'data-value': this.props.viewDate.year() }, this.props.viewDate.year() ), React.createElement('th', { key: 'next', className: 'rdtNext', onClick: this.props.addTime( 1, 'years' )}, React.createElement('span', {}, '›' )) ]))), React.createElement('table', { key: 'months' }, React.createElement('tbody', { key: 'b' }, this.renderMonths())) ]); }, renderMonths: function() { var date = this.props.selectedDate, month = this.props.viewDate.month(), year = this.props.viewDate.year(), rows = [], i = 0, months = [], renderer = this.props.renderMonth || this.renderMonth, isValid = this.props.isValidDate || this.alwaysValidDate, classes, props, currentMonth, isDisabled, noOfDaysInMonth, daysInMonth, validDay, // Date is irrelevant because we're only interested in month irrelevantDate = 1 ; while (i < 12) { classes = 'rdtMonth'; currentMonth = this.props.viewDate.clone().set({ year: year, month: i, date: irrelevantDate }); noOfDaysInMonth = currentMonth.endOf( 'month' ).format( 'D' ); daysInMonth = Array.from({ length: noOfDaysInMonth }, function( e, i ) { return i + 1; }); validDay = daysInMonth.find(function( d ) { var day = currentMonth.clone().set( 'date', d ); return isValid( day ); }); isDisabled = ( validDay === undefined ); if ( isDisabled ) classes += ' rdtDisabled'; if ( date && i === date.month() && year === date.year() ) classes += ' rdtActive'; props = { key: i, 'data-value': i, className: classes }; if ( !isDisabled ) props.onClick = ( this.props.updateOn === 'months' ? this.updateSelectedMonth : this.props.setDate( 'month' ) ); months.push( renderer( props, i, year, date && date.clone() ) ); if ( months.length === 4 ) { rows.push( React.createElement('tr', { key: month + '_' + rows.length }, months ) ); months = []; } i++; } return rows; }, updateSelectedMonth: function( event ) { this.props.updateSelectedDate( event ); }, renderMonth: function( props, month ) { var localMoment = this.props.viewDate; var monthStr = localMoment.localeData().monthsShort( localMoment.month( month ) ); var strLength = 3; // Because some months are up to 5 characters long, we want to // use a fixed string length for consistency var monthStrFixedLength = monthStr.substring( 0, strLength ); return React.createElement('td', props, capitalize( monthStrFixedLength ) ); }, alwaysValidDate: function() { return 1; }, handleClickOutside: function() { this.props.handleClickOutside(); } })); function capitalize( str ) { return str.charAt( 0 ).toUpperCase() + str.slice( 1 ); } module.exports = DateTimePickerMonths;