{
"name": "rc-time-picker",
- "version": "0.5.6",
+ "version": "0.6.0",
"description": "React TimePicker",
"keywords": [
"react",
"karma": "rc-tools run karma",
"saucelabs": "rc-tools run saucelabs",
"browser-test": "rc-tools run browser-test",
- "browser-test-cover": "rc-tools run browser-test-cover",
- "validate": "npm ls"
+ "browser-test-cover": "rc-tools run browser-test-cover"
},
"devDependencies": {
"async": "~0.9.0",
"classnames": "~2.2.0",
"gregorian-calendar": "4.x",
"gregorian-calendar-format": "4.x",
- "object-assign": "4.x",
"rc-trigger": "1.x",
"rc-util": "2.x"
}
prefixCls: PropTypes.string,
inputClassName: PropTypes.string,
locale: PropTypes.object,
+ value: PropTypes.object,
children: PropTypes.func,
disabled: PropTypes.bool,
defaultValue: PropTypes.object,
getInitialState() {
this.savePanelRef = refFn.bind(this, 'panelInstance');
- const { open, defaultValue } = this.props;
+ const { open, defaultValue, value } = this.props;
return {
open: open,
- value: defaultValue,
+ value: value || defaultValue,
};
},
componentWillReceiveProps(nextProps) {
- const { defaultValue, open } = nextProps;
- if (defaultValue !== undefined) {
- this.setState({value: defaultValue});
+ const { value, open } = nextProps;
+ if (value !== undefined) {
+ this.setState({
+ value,
+ });
}
if (open !== undefined) {
this.setState({open});
},
onPanelChange(value) {
- this.setState({
- value: value,
- });
- this.props.onChange(value);
+ this.setValue(value);
},
onPanelClear() {
- this.setState({
- value: '',
- });
+ this.setValue('');
this.setOpen(false);
},
});
},
+ setValue(value) {
+ if (!('value' in this.props)) {
+ this.setState({
+ value,
+ });
+ }
+ this.props.onChange(value);
+ },
+
getPanel() {
const { prefixCls, defaultValue, locale, formatter, placeholder, hourOptions, minuteOptions, secondOptions } = this.props;
return (
const panel = this.getPanel();
const extraProps = {
ref: this.savePanelRef,
- defaultValue: this.state.value || panel.props.defaultValue,
+ value: this.state.value,
onChange: createChainedFunction(panel.props.onChange, this.onPanelChange),
onClear: createChainedFunction(panel.props.onClear, this.onPanelClear),
};
},
render() {
- const { prefixCls, placeholder, placement, align, disabled, transitionName, children, formatter, inputClassName } = this.props;
+ const { prefixCls, placeholder, placement, align, disabled, transitionName, formatter, inputClassName } = this.props;
const { open, value } = this.state;
return (
<Trigger
- prefixCls={`${prefixCls}-picker-container`}
+ prefixCls={`${prefixCls}-container`}
popup={this.getPanelElement()}
popupAlign={align}
builtinPlacements={placements}
popupVisible={open}
onPopupVisibleChange={this.onVisibleChange}
>
- <span className={`${prefixCls}-picker`}>
- <input className={inputClassName} ref="picker" type="text" placeholder={placeholder} readOnly disabled={disabled} value={value && formatter.format(value)} />
- <span className={`${prefixCls}-picker-icon`} />
+ <span className={`${prefixCls}`}>
+ <input className={inputClassName} ref="picker" type="text" placeholder={placeholder} readOnly
+ disabled={disabled} value={value && formatter.format(value)}/>
+ <span className={`${prefixCls}-icon`}/>
</span>
</Trigger>
);
const Panel = React.createClass({
propTypes: {
prefixCls: PropTypes.string,
- defaultValue: PropTypes.object,
+ value: PropTypes.object,
locale: PropTypes.object,
placeholder: PropTypes.string,
formatter: PropTypes.object,
},
getInitialState() {
- let defaultValue = this.props.defaultValue;
- if (!defaultValue) {
- defaultValue = new GregorianCalendar(zhCn);
- defaultValue.setTime(Date.now());
+ let value = this.props.value;
+ if (!value) {
+ value = new GregorianCalendar(zhCn);
+ value.setTime(Date.now());
}
return {
- value: defaultValue,
+ value,
};
},
}
},
+ componentWillReceiveProps(nextProps) {
+ const value = nextProps.value;
+ if (value) {
+ this.setState({
+ value,
+ });
+ }
+ },
+
onChange(newValue) {
this.setState({ value: newValue });
this.props.onChange(newValue);
showSecond: true,
render() {
- const { locale, prefixCls, defaultValue, placeholder, hourOptions, minuteOptions, secondOptions } = this.props;
- const value = this.state.value || defaultValue;
+ const { locale, prefixCls, placeholder, hourOptions, minuteOptions, secondOptions } = this.props;
+ const value = this.state.value;
const cls = classnames({ 'narrow': !this.showHour || !this.showSecond });
return (