UNPKG

bee-datepicker

Version:
128 lines (123 loc) 3.97 kB
import React from 'react'; import PropTypes from 'prop-types'; import CalendarHeader from '../calendar/CalendarHeader'; import DateTable from '../date/DateTable'; import DateInput from '../date/DateInput'; import { getTimeConfig } from '../util/index'; export default class CalendarPart extends React.Component { static propTypes = { prefixCls: PropTypes.string, value: PropTypes.any, hoverValue: PropTypes.any, selectedValue: PropTypes.any, direction: PropTypes.any, locale: PropTypes.any, showDateInput: PropTypes.bool, showTimePicker: PropTypes.bool, format: PropTypes.any, placeholder: PropTypes.any, disabledDate: PropTypes.any, timePicker: PropTypes.any, disabledTime: PropTypes.any, onInputChange: PropTypes.func, onInputSelect: PropTypes.func, timePickerDisabledTime: PropTypes.object, enableNext: PropTypes.any, enablePrev: PropTypes.any, clearIcon: PropTypes.node, } render() { const props = this.props; const { prefixCls, value, hoverValue, selectedValue, mode, direction, locale, format, placeholder, disabledDate, timePicker, disabledTime, timePickerDisabledTime, showTimePicker, onInputChange, onInputSelect, enablePrev, enableNext, clearIcon,renderError,inputTabIndex, onInputBlur } = props; 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; const timePickerEle = shouldShowTimePicker && React.cloneElement(timePicker, { showHour: true, showMinute: true, showSecond: true, ...timePicker.props, ...disabledTimeConfig, ...timePickerDisabledTime, onChange: onInputChange, defaultOpenValue: value, value: selectedValue[index], }); const dateInputElement = props.showDateInput && <DateInput isRange={true} format={format} locale={locale} prefixCls={prefixCls} timePicker={timePicker} disabledDate={disabledDate} placeholder={placeholder} disabledTime={disabledTime} value={value} showClear={false} selectedValue={selectedValue[index]} onChange={onInputChange} onSelect={onInputSelect} clearIcon={clearIcon} renderError={renderError} inputTabIndex={inputTabIndex} onBlur={onInputBlur} />; return ( <div className={`${rangeClassName}-part ${rangeClassName}-${direction}`} > {dateInputElement} <div style={{ outline: 'none' }} tabIndex={props.tabIndex} className={`${rangeClassName}-out`}> <CalendarHeader {...newProps} mode={mode} enableNext={enableNext} enablePrev={enablePrev} onValueChange={props.onValueChange} onPanelChange={props.onPanelChange} disabledMonth={props.disabledMonth} /> {showTimePicker ? <div className={`${prefixCls}-time-picker`}> <div className={`${prefixCls}-time-picker-panel`}> {timePickerEle} </div> </div> : null} <div className={`${prefixCls}-body`}> <DateTable {...newProps} hoverValue={hoverValue} selectedValue={selectedValue} dateRender={props.dateRender} onSelect={props.onSelect} onDayHover={props.onDayHover} disabledDate={disabledDate} showWeekNumber={props.showWeekNumber} /> </div> </div> </div>); } }