]> git.immae.eu Git - github/fretlink/time-picker.git/blobdiff - src/TimePicker.jsx
Merge branch 'master' of github.com:react-component/time-picker
[github/fretlink/time-picker.git] / src / TimePicker.jsx
index 358b59631ea1678fd18027b88ecf1d982171357b..4d7d4d6c7416c2953711abd6a8b054273de45b7a 100644 (file)
@@ -29,9 +29,10 @@ const Picker = React.createClass({
     placeholder: PropTypes.string,
     format: PropTypes.string,
     showHour: PropTypes.bool,
+    showMinute: PropTypes.bool,
+    showSecond: PropTypes.bool,
     style: PropTypes.object,
     className: PropTypes.string,
-    showSecond: PropTypes.bool,
     disabledHours: PropTypes.func,
     disabledMinutes: PropTypes.func,
     disabledSeconds: PropTypes.func,
@@ -40,6 +41,8 @@ const Picker = React.createClass({
     onOpen: PropTypes.func,
     onClose: PropTypes.func,
     addon: PropTypes.func,
+    name: PropTypes.string,
+    autoComplete: PropTypes.string,
   },
 
   getDefaultProps() {
@@ -53,6 +56,7 @@ const Picker = React.createClass({
       defaultOpenValue: moment(),
       allowEmpty: true,
       showHour: true,
+      showMinute: true,
       showSecond: true,
       disabledHours: noop,
       disabledMinutes: noop,
@@ -67,6 +71,7 @@ const Picker = React.createClass({
   },
 
   getInitialState() {
+    this.saveInputRef = refFn.bind(this, 'picker');
     this.savePanelRef = refFn.bind(this, 'panelInstance');
     const { defaultOpen, defaultValue, open = defaultOpen, value = defaultValue } = this.props;
     return {
@@ -102,7 +107,7 @@ const Picker = React.createClass({
 
   onEsc() {
     this.setOpen(false);
-    this.refs.picker.focus();
+    this.focus();
   },
 
   onKeyDown(e) {
@@ -121,24 +126,22 @@ const Picker = React.createClass({
   },
 
   getFormat() {
-    const format = this.props.format;
+    const { format, showHour, showMinute, showSecond } = this.props;
     if (format) {
       return format;
     }
-    if (!this.props.showSecond) {
-      return 'HH:mm';
-    }
-    if (!this.props.showHour) {
-      return 'mm:ss';
-    }
-    return 'HH:mm:ss';
+    return [
+      showHour ? 'HH' : '',
+      showMinute ? 'mm' : '',
+      showSecond ? 'ss' : '',
+    ].filter(item => !!item).join(':');
   },
 
   getPanelElement() {
     const {
       prefixCls, placeholder, disabledHours,
       disabledMinutes, disabledSeconds, hideDisabledOptions,
-      allowEmpty, showHour, showSecond, defaultOpenValue, clearText,
+      allowEmpty, showHour, showMinute, showSecond, defaultOpenValue, clearText,
       addon,
     } = this.props;
     return (
@@ -151,8 +154,9 @@ const Picker = React.createClass({
         onClear={this.onPanelClear}
         defaultOpenValue={defaultOpenValue}
         showHour={showHour}
-        onEsc={this.onEsc}
+        showMinute={showMinute}
         showSecond={showSecond}
+        onEsc={this.onEsc}
         allowEmpty={allowEmpty}
         format={this.getFormat()}
         placeholder={placeholder}
@@ -182,15 +186,19 @@ const Picker = React.createClass({
     }
   },
 
+  focus() {
+    this.picker.focus();
+  },
+
   render() {
     const {
       prefixCls, placeholder, placement, align,
       disabled, transitionName, style, className, showHour,
-      showSecond, getPopupContainer,
+      showMinute, showSecond, getPopupContainer, name, autoComplete,
     } = this.props;
     const { open, value } = this.state;
     let popupClassName;
-    if (!showHour || !showSecond) {
+    if (!showHour || !showMinute || !showSecond) {
       popupClassName = `${prefixCls}-panel-narrow`;
     }
     return (
@@ -211,10 +219,14 @@ const Picker = React.createClass({
         <span className={`${prefixCls} ${className}`} style={style}>
           <input
             className={`${prefixCls}-input`}
-            ref="picker" type="text" placeholder={placeholder}
+            ref={this.saveInputRef}
+            type="text"
+            placeholder={placeholder}
+            name={name}
             readOnly
             onKeyDown={this.onKeyDown}
             disabled={disabled} value={value && value.format(this.getFormat()) || ''}
+            autoComplete={autoComplete}
           />
           <span className={`${prefixCls}-icon`}/>
         </span>