]> git.immae.eu Git - github/fretlink/time-picker.git/commitdiff
Updated 12 hours example, added default format for 12 hours mode, updated tests
authorAntony Shaleynikov <shaleynikov@gmail.com>
Thu, 2 Mar 2017 12:42:05 +0000 (15:42 +0300)
committerAntony Shaleynikov <shaleynikov@gmail.com>
Thu, 2 Mar 2017 12:42:05 +0000 (15:42 +0300)
examples/12hours.js
src/Combobox.jsx
src/TimePicker.jsx
tests/Select.spec.jsx

index 18fb626d484ec828bcbfdf5bd885fd8f73081956..44e514af68bce7d0b3a5831b044c63e16b98b0d0 100644 (file)
@@ -12,7 +12,7 @@ import TimePicker from 'rc-time-picker';
 const showSecond = false;
 const str = showSecond ? 'HH:mm:ss' : 'HH:mm';
 
-const now = moment().hour(14).minute(30);
+const now = moment().hour(0).minute(0);
 
 function onChange(value) {
   console.log(value && value.format(str));
@@ -24,7 +24,7 @@ ReactDom.render(
     defaultValue={now}
     className="xxx"
     onChange={onChange}
-    show12Hours
+    use12Hours
   />,
   document.getElementById('__react-content')
 );
index 339764cba1e7530927937e6c8945f1ac3d5c3d7d..d2c934c5388d30168db3e882c9e8f35957cb7bc5 100644 (file)
@@ -44,10 +44,10 @@ const Combobox = React.createClass({
 
     if (type === 'hour') {
       if (use12Hours) {
-        if (value.hour() > 12 || !value.hour()) {
-          value.hour(+itemValue + 12);
+        if (this.isAM()) {
+          value.hour(+itemValue % 12);
         } else {
-          value.hour(+itemValue);
+          value.hour((+itemValue % 12) + 12);
         }
       } else {
         value.hour(+itemValue);
@@ -85,22 +85,14 @@ const Combobox = React.createClass({
       return null;
     }
     const disabledOptions = disabledHours();
-    let hourAdj;
-    if (use12Hours) {
-      if (hour > 12) {
-        hourAdj = hour - 12;
-      } else {
-        hourAdj = hour || 12;
-      }
-    } else {
-      hourAdj = hour;
-    }
-
     let hourOptionsAdj;
+    let hourAdj;
     if (use12Hours) {
-      hourOptionsAdj = hourOptions.filter(h => h <= 12 && h > 0);
+      hourOptionsAdj = [12].concat(hourOptions.filter(h => h < 12 && h > 0));
+      hourAdj = (hour % 12) || 12;
     } else {
       hourOptionsAdj = hourOptions;
+      hourAdj = hour;
     }
 
     return (
@@ -156,13 +148,12 @@ const Combobox = React.createClass({
   },
 
   getAMPMSelect() {
-    const { prefixCls, use12Hours, defaultOpenValue } = this.props;
+    const { prefixCls, use12Hours } = this.props;
     if (!use12Hours) {
       return null;
     }
-    const value = this.props.value || defaultOpenValue;
     const AMPMOptions = [{ value: 'AM' }, { value: 'PM' }];
-    const selected = (!value.hour() || value.hour() > 12) ? 1 : 0;
+    const selected = this.isAM() ? 0 : 1;
 
     return (
       <Select
@@ -176,6 +167,11 @@ const Combobox = React.createClass({
     );
   },
 
+  isAM() {
+    const { value } = this.props;
+    return value.hour() >= 0 && value.hour() < 12;
+  },
+
   render() {
     const { prefixCls, defaultOpenValue } = this.props;
     const value = this.props.value || defaultOpenValue;
index 6b762230223844c7a1f28ca0ebe2aebdb4b45f5a..70653331185a61a7738d3383157806a45a4128e9 100644 (file)
@@ -128,10 +128,21 @@ const Picker = React.createClass({
   },
 
   getFormat() {
-    const { format, showHour, showMinute, showSecond } = this.props;
+    const { format, showHour, showMinute, showSecond, use12Hours } = this.props;
     if (format) {
       return format;
     }
+
+    if (use12Hours) {
+      const fmtString = ([
+        showHour ? 'h' : '',
+        showMinute ? 'mm' : '',
+        showSecond ? 'ss' : '',
+      ].filter(item => !!item).join(':'));
+
+      return fmtString.concat(' a');
+    }
+
     return [
       showHour ? 'HH' : '',
       showMinute ? 'mm' : '',
index e6d32ddfd9d879c38395e7f69411567779152cb5..ef9ca3267c9ca6a25151553f68764ab26f4de0e3 100644 (file)
@@ -315,4 +315,72 @@ describe('Select', () => {
       });
     });
   });
+
+
+  describe('select in 12 hours mode', () => {
+    it('renders correctly', (done) => {
+      const picker = renderPicker({
+        use12Hours: true,
+        defaultValue: moment().hour(14).minute(0).second(0),
+        showSecond: false,
+        format: undefined,
+      });
+      expect(picker.state.open).not.to.be.ok();
+      const input = TestUtils.scryRenderedDOMComponentsWithClass(picker,
+        'rc-time-picker-input')[0];
+      let selector;
+      async.series([(next) => {
+        expect(picker.state.open).to.be(false);
+
+        Simulate.click(input);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance,
+          'rc-time-picker-panel-select');
+        expect((input).value).to.be('2:00 pm');
+
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(selector.length).to.be(3);
+
+        next();
+      }], () => {
+        done();
+      });
+    });
+
+
+    it('renders 12am correctly', (done) => {
+      const picker = renderPicker({
+        use12Hours: true,
+        defaultValue: moment().hour(0).minute(0).second(0),
+        showSecond: false,
+        format: undefined,
+      });
+      expect(picker.state.open).not.to.be.ok();
+      const input = TestUtils.scryRenderedDOMComponentsWithClass(picker,
+        'rc-time-picker-input')[0];
+      let selector;
+      async.series([(next) => {
+        expect(picker.state.open).to.be(false);
+
+        Simulate.click(input);
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(picker.state.open).to.be(true);
+        selector = TestUtils.scryRenderedDOMComponentsWithClass(picker.panelInstance,
+          'rc-time-picker-panel-select');
+        expect((input).value).to.be('12:00 am');
+
+        setTimeout(next, 100);
+      }, (next) => {
+        expect(selector.length).to.be(3);
+
+        next();
+      }], () => {
+        done();
+      });
+    });
+  });
 });