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, }); let pickerChangeHandler = { onChange: this.handleChange, }; let calendarHandler = { onOk: this.handleChange, }; if (props.showTime) { pickerChangeHandler.onChange = (value) => { // Click clear button if (value === null) { this.handleChange(value); } }; } else { calendarHandler = {}; } const calendar = ( ); // default width for showTime const pickerStyle = {}; if (props.showTime) { pickerStyle.width = 180; } return ( { ({ value }) => { return ( ); } } ); } }; }