import React, {PropTypes} from 'react'; import classnames from 'classnames'; import GregorianCalendar from 'gregorian-calendar'; import zhCn from 'gregorian-calendar/lib/locale/zh_CN'; import CommonMixin from '../mixin/CommonMixin'; import Header from './Header'; import Combobox from './Combobox'; function noop() { } function generateOptions(length) { return Array.apply(null, {length: length}).map((item, index) => { return index; }); } const Panel = React.createClass({ propTypes: { prefixCls: PropTypes.string, defaultValue: PropTypes.object, locale: PropTypes.object, placeholder: PropTypes.string, formatter: PropTypes.object, hourOptions: PropTypes.array, minuteOptions: PropTypes.array, secondOptions: PropTypes.array, onChange: PropTypes.func, onClear: PropTypes.func, }, mixins: [CommonMixin], getDefaultProps() { return { hourOptions: generateOptions(24), minuteOptions: generateOptions(60), secondOptions: generateOptions(60), onChange: noop, onClear: noop, }; }, getInitialState() { let defaultValue = this.props.defaultValue; if (!defaultValue) { defaultValue = new GregorianCalendar(zhCn); defaultValue.setTime(Date.now()); } return { value: defaultValue, }; }, componentWillMount() { const formatter = this.props.formatter; const pattern = formatter.originalPattern; if (pattern === 'HH:mm') { this.showSecond = false; } else if (pattern === 'mm:ss') { this.showHour = false; } }, onChange(newValue) { this.setState({ value: newValue }); this.props.onChange(newValue); }, onClear() { this.props.onClear(); }, getPlaceholder(placeholder) { if (placeholder) { return placeholder; } const { locale } = this.props; if (!this.showHour) { return locale.placeholdermmss; } else if (!this.showSecond) { return locale.placeholderHHmm; } return locale.placeholderHHmmss; }, showHour: true, showSecond: true, render() { const { locale, prefixCls, defaultValue, placeholder, hourOptions, minuteOptions, secondOptions } = this.props; const value = this.state.value || defaultValue; const cls = classnames({ 'narrow': !this.showHour || !this.showSecond }); return (
); }, }); export default Panel;