import React, {PropTypes, Component} from 'react'; import GregorianCalendar from 'gregorian-calendar'; import CalendarLocale from 'rc-calendar/lib/locale/zh_CN'; import FullCalendar from 'rc-calendar/lib/FullCalendar'; import {PREFIX_CLS} from './Constants'; import Header from './Header'; function noop () { return null; } function zerofixed (v) { if (v < 10) return '0' + v; return v + ''; } class Calendar extends Component { constructor(props) { super(); this.state = { value: this.parseDateFromValue(props.value), type: props.type, }; } parseDateFromValue(value) { const date = new GregorianCalendar(); date.setTime(value); return date; } monthCellRender(value, locale) { const prefixCls = this.props.prefixCls; const month = value.getMonth(); return
{locale.format.shortMonths[month]} {this.props.monthCellRender(value)}
; } fullscreenDateCellRender(value) { const prefixCls = this.props.prefixCls; return { zerofixed(value.getDayOfMonth()) } {this.props.dateCellRender(value)} ; } dateCellRender(value) { const prefixCls = this.props.prefixCls; return
{zerofixed(value.getDayOfMonth())} {this.props.dateCellRender(value)}
; } setValue(value) { if (this.state.value !== value) { this.setState({ value }); this.props.onChange(value); } } setType(type) { const oldType = this.state.type; this.setState({ type }); this.props.onTypeChange(type, oldType); } render() { const props = this.props; const {value, type} = this.state; const {locale, prefixCls, style, className, fullscreen} = props; const dateCellRender = fullscreen ? this.fullscreenDateCellRender : this.dateCellRender; return (
); } } Calendar.propTypes = { monthCellRender: PropTypes.func, dateCellRender: PropTypes.func, fullscreen: PropTypes.bool, locale: PropTypes.object, prefixCls: PropTypes.string, className: PropTypes.string, style: PropTypes.object, onChange: PropTypes.func, value: PropTypes.instanceOf(Date), onTypeChange: PropTypes.func, }; Calendar.defaultProps = { monthCellRender: noop, dateCellRender: noop, locale: CalendarLocale, fullscreen: true, prefixCls: PREFIX_CLS, onChange: noop, onTypeChange: noop, type: 'date', value: Date.now(), }; export default Calendar;