ant-design/components/date-picker/wrapPicker.tsx

112 lines
3.2 KiB
TypeScript
Raw Normal View History

import React from 'react';
2016-07-07 20:25:03 +08:00
import { PropTypes } from 'react';
import TimePickerPanel from 'rc-time-picker/lib/Panel';
2016-03-30 10:52:15 +08:00
import classNames from 'classnames';
import defaultLocale from './locale/zh_CN';
2016-06-22 13:18:43 +08:00
import assign from 'object-assign';
import warning from 'warning';
2016-07-25 11:28:19 +08:00
export default function wrapPicker(Picker, defaultFormat?) {
2016-06-22 13:18:43 +08:00
const PickerWrapper = React.createClass({
getDefaultProps() {
return {
format: defaultFormat || 'YYYY-MM-DD',
2016-06-22 13:18:43 +08:00
transitionName: 'slide-up',
popupStyle: {},
onChange() {
},
onOk() {
},
onOpenChange() {
2016-06-22 13:18:43 +08:00
},
locale: {},
align: {
offset: [0, -9],
},
prefixCls: 'ant-calendar',
inputPrefixCls: 'ant-input',
2016-06-22 13:18:43 +08:00
};
},
2016-03-30 10:52:15 +08:00
2016-06-22 13:18:43 +08:00
contextTypes: {
2016-03-30 10:52:15 +08:00
antLocale: PropTypes.object,
2016-06-22 13:18:43 +08:00
},
2016-03-30 10:52:15 +08:00
getLocale() {
const props = this.props;
const context = this.context;
let locale = defaultLocale;
2016-03-30 10:52:15 +08:00
if (context.antLocale && context.antLocale.DatePicker) {
locale = context.antLocale.DatePicker;
}
// 统一合并为完整的 Locale
2016-06-22 13:18:43 +08:00
const result = assign({}, locale, props.locale);
result.lang = assign({}, locale.lang, props.locale.lang);
2016-03-30 10:52:15 +08:00
return result;
2016-06-22 13:18:43 +08:00
},
2016-03-30 10:52:15 +08:00
handleOpenChange(open) {
const { onOpenChange, toggleOpen } = this.props;
onOpenChange(open);
if (toggleOpen) {
warning(
false,
'`toggleOpen` is deprecated and will be removed in the future, ' +
'please use `onOpenChange` instead'
);
toggleOpen({open});
}
2016-06-22 13:18:43 +08:00
},
2016-03-30 10:52:15 +08:00
render() {
const props = this.props;
const { prefixCls, inputPrefixCls } = props;
2016-03-30 10:52:15 +08:00
const pickerClass = classNames({
[`${prefixCls}-picker`]: true,
2016-03-30 10:52:15 +08:00
});
const pickerInputClass = classNames({
[`${prefixCls}-range-picker`]: true,
[inputPrefixCls]: true,
[`${inputPrefixCls}-lg`]: props.size === 'large',
[`${inputPrefixCls}-sm`]: props.size === 'small',
2016-03-30 10:52:15 +08:00
});
const locale = this.getLocale();
2016-04-14 12:32:25 +08:00
const timeFormat = (props.showTime && props.showTime.format) || 'HH:mm:ss';
const rcTimePickerProps = {
format: timeFormat,
showSecond: timeFormat.indexOf('ss') >= 0,
showHour: timeFormat.indexOf('HH') >= 0,
};
const timePickerCls = classNames({
[`${prefixCls}-time-picker-1-column`]: !(rcTimePickerProps.showSecond || rcTimePickerProps.showHour),
[`${prefixCls}-time-picker-2-columns`]: rcTimePickerProps.showSecond !== rcTimePickerProps.showHour,
});
2016-03-30 10:52:15 +08:00
const timePicker = props.showTime ? (
<TimePickerPanel
2016-04-14 16:48:34 +08:00
{...rcTimePickerProps}
{...props.showTime}
prefixCls={`${prefixCls}-time-picker`}
className={timePickerCls}
2016-04-07 17:55:06 +08:00
placeholder={locale.timePickerLocale.placeholder}
2016-04-14 12:32:25 +08:00
transitionName="slide-up"
/>
2016-03-30 10:52:15 +08:00
) : null;
return (
<Picker
{...props}
2016-03-30 10:52:15 +08:00
pickerClass={pickerClass}
pickerInputClass={pickerInputClass}
locale={locale}
timePicker={timePicker}
onOpenChange={this.handleOpenChange}
2016-03-30 10:52:15 +08:00
/>
);
2016-06-22 13:18:43 +08:00
},
});
return PickerWrapper;
2016-03-30 10:52:15 +08:00
}