X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FPanel.jsx;h=c23241d0a7cec953015523d7bf207849f7706e7e;hb=d907505b9f219f4ef2885166846251c7e0c65de9;hp=fddea1c09ddbc8fa591bd0847c7db1e7f23450a0;hpb=bb87d05e6372596c8e8e1f2ebf657df6b9a8d826;p=github%2Ffretlink%2Ftime-picker.git diff --git a/src/Panel.jsx b/src/Panel.jsx index fddea1c..c23241d 100644 --- a/src/Panel.jsx +++ b/src/Panel.jsx @@ -1,4 +1,5 @@ -import React, { PropTypes } from 'react'; +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import Header from './Header'; import Combobox from './Combobox'; import moment from 'moment'; @@ -7,9 +8,9 @@ import classNames from 'classnames'; function noop() { } -function generateOptions(length, disabledOptions, hideDisabledOptions) { +function generateOptions(length, disabledOptions, hideDisabledOptions, step = 1) { const arr = []; - for (let value = 0; value < length; value++) { + for (let value = 0; value < length; value += step) { if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) { arr.push(value); } @@ -17,8 +18,8 @@ function generateOptions(length, disabledOptions, hideDisabledOptions) { return arr; } -const Panel = React.createClass({ - propTypes: { +class Panel extends Component { + static propTypes = { clearText: PropTypes.string, prefixCls: PropTypes.string, className: PropTypes.string, @@ -26,6 +27,7 @@ const Panel = React.createClass({ value: PropTypes.object, placeholder: PropTypes.string, format: PropTypes.string, + readOnlyInput: PropTypes.bool, disabledHours: PropTypes.func, disabledMinutes: PropTypes.func, disabledSeconds: PropTypes.func, @@ -37,28 +39,36 @@ const Panel = React.createClass({ showMinute: PropTypes.bool, showSecond: PropTypes.bool, onClear: PropTypes.func, + use12Hours: PropTypes.bool, + hourStep: PropTypes.number, + minuteStep: PropTypes.number, + secondStep: PropTypes.number, addon: PropTypes.func, - }, + focusOnOpen: PropTypes.bool, + onKeyDown: PropTypes.func, + }; - getDefaultProps() { - return { - prefixCls: 'rc-time-picker-panel', - onChange: noop, - onClear: noop, - disabledHours: noop, - disabledMinutes: noop, - disabledSeconds: noop, - defaultOpenValue: moment(), - addon: noop, - }; - }, + static defaultProps = { + prefixCls: 'rc-time-picker-panel', + onChange: noop, + onClear: noop, + disabledHours: noop, + disabledMinutes: noop, + disabledSeconds: noop, + defaultOpenValue: moment(), + use12Hours: false, + addon: noop, + onKeyDown: noop, + readOnlyInput: false, + }; - getInitialState() { - return { - value: this.props.value, + constructor(props) { + super(props); + this.state = { + value: props.value, selectionRange: [], }; - }, + } componentWillReceiveProps(nextProps) { const value = nextProps.value; @@ -67,30 +77,28 @@ const Panel = React.createClass({ value, }); } - }, + } - onChange(newValue) { + onChange = (newValue) => { this.setState({ value: newValue }); this.props.onChange(newValue); - }, - - onClear() { - this.props.onClear(); - }, + } - onCurrentSelectPanelChange(currentSelectPanel) { + onCurrentSelectPanelChange = (currentSelectPanel) => { this.setState({ currentSelectPanel }); - }, + } + // https://github.com/ant-design/ant-design/issues/5829 close() { this.props.onEsc(); - }, + } render() { const { prefixCls, className, placeholder, disabledHours, disabledMinutes, disabledSeconds, hideDisabledOptions, allowEmpty, showHour, showMinute, showSecond, - format, defaultOpenValue, clearText, onEsc, addon, + format, defaultOpenValue, clearText, onEsc, addon, use12Hours, onClear, + focusOnOpen, onKeyDown, hourStep, minuteStep, secondStep, readOnlyInput, } = this.props; const { value, currentSelectPanel, @@ -99,9 +107,15 @@ const Panel = React.createClass({ const disabledMinuteOptions = disabledMinutes(value ? value.hour() : null); const disabledSecondOptions = disabledSeconds(value ? value.hour() : null, value ? value.minute() : null); - const hourOptions = generateOptions(24, disabledHourOptions, hideDisabledOptions); - const minuteOptions = generateOptions(60, disabledMinuteOptions, hideDisabledOptions); - const secondOptions = generateOptions(60, disabledSecondOptions, hideDisabledOptions); + const hourOptions = generateOptions( + 24, disabledHourOptions, hideDisabledOptions, hourStep + ); + const minuteOptions = generateOptions( + 60, disabledMinuteOptions, hideDisabledOptions, minuteStep + ); + const secondOptions = generateOptions( + 60, disabledSecondOptions, hideDisabledOptions, secondStep + ); return (
@@ -121,8 +135,11 @@ const Panel = React.createClass({ disabledMinutes={disabledMinutes} disabledSeconds={disabledSeconds} onChange={this.onChange} - onClear={this.onClear} + onClear={onClear} allowEmpty={allowEmpty} + focusOnOpen={focusOnOpen} + onKeyDown={onKeyDown} + readOnlyInput={readOnlyInput} /> {addon(this)}
); - }, -}); + } +} export default Panel;