1 import React, { Component } from 'react';
2 import PropTypes from 'prop-types';
3 import Header from './Header';
4 import Combobox from './Combobox';
5 import moment from 'moment';
6 import classNames from 'classnames';
11 function generateOptions(length, disabledOptions, hideDisabledOptions, step = 1) {
13 for (let value = 0; value < length; value += step) {
14 if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) {
21 class Panel extends Component {
23 clearText: PropTypes.string,
24 prefixCls: PropTypes.string,
25 className: PropTypes.string,
26 defaultOpenValue: PropTypes.object,
27 value: PropTypes.object,
28 placeholder: PropTypes.string,
29 format: PropTypes.string,
30 disabledHours: PropTypes.func,
31 disabledMinutes: PropTypes.func,
32 disabledSeconds: PropTypes.func,
33 hideDisabledOptions: PropTypes.bool,
34 onChange: PropTypes.func,
35 onEsc: PropTypes.func,
36 allowEmpty: PropTypes.bool,
37 showHour: PropTypes.bool,
38 showMinute: PropTypes.bool,
39 showSecond: PropTypes.bool,
40 onClear: PropTypes.func,
41 use12Hours: PropTypes.bool,
42 hourStep: PropTypes.number,
43 minuteStep: PropTypes.number,
44 secondStep: PropTypes.number,
45 addon: PropTypes.func,
46 onKeyDown: PropTypes.func,
49 static defaultProps = {
50 prefixCls: 'rc-time-picker-panel',
54 disabledMinutes: noop,
55 disabledSeconds: noop,
56 defaultOpenValue: moment(),
70 componentWillReceiveProps(nextProps) {
71 const value = nextProps.value;
79 onChange = (newValue) => {
80 this.setState({ value: newValue });
81 this.props.onChange(newValue);
84 onCurrentSelectPanelChange = (currentSelectPanel) => {
85 this.setState({ currentSelectPanel });
88 // https://github.com/ant-design/ant-design/issues/5829
95 prefixCls, className, placeholder, disabledHours, disabledMinutes,
96 disabledSeconds, hideDisabledOptions, allowEmpty, showHour, showMinute, showSecond,
97 format, defaultOpenValue, clearText, onEsc, addon, use12Hours, onClear, onKeyDown,
98 hourStep, minuteStep, secondStep,
101 value, currentSelectPanel,
103 const disabledHourOptions = disabledHours();
104 const disabledMinuteOptions = disabledMinutes(value ? value.hour() : null);
105 const disabledSecondOptions = disabledSeconds(value ? value.hour() : null,
106 value ? value.minute() : null);
107 const hourOptions = generateOptions(
108 24, disabledHourOptions, hideDisabledOptions, hourStep
110 const minuteOptions = generateOptions(
111 60, disabledMinuteOptions, hideDisabledOptions, minuteStep
113 const secondOptions = generateOptions(
114 60, disabledSecondOptions, hideDisabledOptions, secondStep
118 <div className={classNames({ [`${prefixCls}-inner`]: true, [className]: !!className })}>
120 clearText={clearText}
121 prefixCls={prefixCls}
122 defaultOpenValue={defaultOpenValue}
124 currentSelectPanel={currentSelectPanel}
127 placeholder={placeholder}
128 hourOptions={hourOptions}
129 minuteOptions={minuteOptions}
130 secondOptions={secondOptions}
131 disabledHours={disabledHours}
132 disabledMinutes={disabledMinutes}
133 disabledSeconds={disabledSeconds}
134 onChange={this.onChange}
136 allowEmpty={allowEmpty}
137 onKeyDown={onKeyDown}
140 prefixCls={prefixCls}
142 defaultOpenValue={defaultOpenValue}
144 onChange={this.onChange}
146 showMinute={showMinute}
147 showSecond={showSecond}
148 hourOptions={hourOptions}
149 minuteOptions={minuteOptions}
150 secondOptions={secondOptions}
151 disabledHours={disabledHours}
152 disabledMinutes={disabledMinutes}
153 disabledSeconds={disabledSeconds}
154 onCurrentSelectPanelChange={this.onCurrentSelectPanelChange}
155 use12Hours={use12Hours}
163 export default Panel;