import React, {PropTypes, Component} from 'react'; import GregorianCalendar from 'gregorian-calendar'; import zhCN from './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(props); this.state = { value: this.parseDateFromValue(props.value || new Date()), mode: props.mode, }; } parseDateFromValue(value) { const date = new GregorianCalendar(this.props.locale); date.setTime(+value); return date; } componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: this.parseDateFromValue(nextProps.value) }); } } monthCellRender(value, locale) { const prefixCls = this.props.prefixCls; const month = value.getMonth(); return
{locale.format.shortMonths[month]}
{this.props.monthCellRender(value)}
; } dateCellRender(value) { const prefixCls = this.props.prefixCls; return
{zerofixed(value.getDayOfMonth())}
{this.props.dateCellRender(value)}
; } setValue(value) { if (!('value' in this.props) && this.state.value !== value) { this.setState({ value }); } this.props.onPanelChange(value, this.state.mode); } setType(type) { const mode = (type === 'date') ? 'month' : 'year'; if (this.state.mode !== mode) { this.setState({ mode }); this.props.onPanelChange(this.state.value, mode); } } render() { const props = this.props; const {value, mode} = this.state; const {locale, prefixCls, style, className, fullscreen} = props; const type = (mode === 'year') ? 'month' : 'date'; let cls = className || ''; if (fullscreen) { cls += (' ' + prefixCls + '-fullscreen'); } return (
); } } Calendar.propTypes = { monthCellRender: PropTypes.func, dateCellRender: PropTypes.func, fullscreen: PropTypes.bool, locale: PropTypes.object, prefixCls: PropTypes.string, className: PropTypes.string, style: PropTypes.object, onPanelChange: PropTypes.func, value: PropTypes.instanceOf(Date), }; Calendar.defaultProps = { monthCellRender: noop, dateCellRender: noop, locale: zhCN, fullscreen: true, prefixCls: PREFIX_CLS, onPanelChange: noop, mode: 'month', }; export default Calendar;