import React from 'react'; import MonthCalendar from 'rc-calendar/lib/MonthCalendar'; import RcDatePicker from 'rc-calendar/lib/Picker'; import GregorianCalendar from 'gregorian-calendar'; import classNames from 'classnames'; export default function createPicker(TheCalendar) { return class CalenderWrapper extends React.Component { constructor(props) { super(props); this.state = { value: this.props.parseDateFromValue(this.props.value || this.props.defaultValue), }; } componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: nextProps.parseDateFromValue(nextProps.value), }); } } handleChange = (value) => { const props = this.props; if (!('value' in props)) { this.setState({ value }); } const timeValue = value ? new Date(value.getTime()) : null; props.onChange(timeValue, value ? props.getFormatter().format(value) : ''); } render() { const props = this.props; const locale = props.locale; // 以下两行代码 // 给没有初始值的日期选择框提供本地化信息 // 否则会以周日开始排 let defaultCalendarValue = new GregorianCalendar(locale); defaultCalendarValue.setTime(Date.now()); const placeholder = ('placeholder' in props) ? props.placeholder : locale.lang.placeholder; const disabledTime = props.showTime ? props.disabledTime : null; const calendarClassName = classNames({ 'ant-calendar-time': props.showTime, 'ant-calendar-month': MonthCalendar === TheCalendar, }); const calendar = ( ); // default width for showTime const pickerStyle = {}; if (props.showTime) { pickerStyle.width = 180; } return ( { ({ value }) => { return ( ); } } ); } }; }