import PropTypes from '../../../_util/vue-types'; import BaseMixin from '../../../_util/BaseMixin'; import { getOptionProps, getComponentFromProp, getListeners } from '../../../_util/props-util'; import { cloneElement } from '../../../_util/vnode'; import CalendarHeader from '../calendar/CalendarHeader'; import DateTable from '../date/DateTable'; import DateInput from '../date/DateInput'; import { getTimeConfig } from '../util/index'; function noop() {} const CalendarPart = { mixins: [BaseMixin], props: { prefixCls: PropTypes.string, value: PropTypes.any, hoverValue: PropTypes.any, selectedValue: PropTypes.any, direction: PropTypes.any, locale: PropTypes.any, showDateInput: PropTypes.bool, showTimePicker: PropTypes.bool, showWeekNumber: PropTypes.bool, format: PropTypes.any, placeholder: PropTypes.any, disabledDate: PropTypes.any, timePicker: PropTypes.any, disabledTime: PropTypes.any, disabledMonth: PropTypes.any, mode: PropTypes.any, // onInputSelect: PropTypes.func, timePickerDisabledTime: PropTypes.object, enableNext: PropTypes.any, enablePrev: PropTypes.any, clearIcon: PropTypes.any, dateRender: PropTypes.func, inputMode: PropTypes.string, inputReadOnly: PropTypes.bool, }, render() { const { $props: props } = this; const { prefixCls, value, hoverValue, selectedValue, mode, direction, locale, format, placeholder, disabledDate, timePicker, disabledTime, timePickerDisabledTime, showTimePicker, enablePrev, enableNext, disabledMonth, showDateInput, dateRender, showWeekNumber, showClear, inputMode, inputReadOnly, } = props; const clearIcon = getComponentFromProp(this, 'clearIcon'); const { inputChange = noop, inputSelect = noop, valueChange = noop, panelChange = noop, select = noop, dayHover = noop, } = getListeners(this); const shouldShowTimePicker = showTimePicker && timePicker; const disabledTimeConfig = shouldShowTimePicker && disabledTime ? getTimeConfig(selectedValue, disabledTime) : null; const rangeClassName = `${prefixCls}-range`; const newProps = { locale, value, prefixCls, showTimePicker, }; const index = direction === 'left' ? 0 : 1; let timePickerEle = null; if (shouldShowTimePicker) { const timePickerProps = getOptionProps(timePicker); timePickerEle = cloneElement(timePicker, { props: { showHour: true, showMinute: true, showSecond: true, ...timePickerProps, ...disabledTimeConfig, ...timePickerDisabledTime, defaultOpenValue: value, value: selectedValue[index], }, on: { change: inputChange, }, }); } const dateInputElement = showDateInput && ( ); const headerProps = { props: { ...newProps, mode, enableNext, enablePrev, disabledMonth, }, on: { valueChange, panelChange, }, }; const tableProps = { props: { ...newProps, hoverValue, selectedValue, dateRender, disabledDate, showWeekNumber, }, on: { select, dayHover, }, }; return (
{dateInputElement}
{showTimePicker ? (
{timePickerEle}
) : null}
); }, }; export default CalendarPart;