aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorWei Zhu <yesmeck@gmail.com>2018-02-22 16:13:42 +0800
committerGitHub <noreply@github.com>2018-02-22 16:13:42 +0800
commitcd8d3e48c8a56e2f60405029cc1169d791e18cca (patch)
tree623493a0e5f424f84e2c0bfd1e4f05297bbea0c0
parentd408a2b14c21e360dfcea2fc59810ec0fe4d3eee (diff)
parentab128c3d1cf22599a20de85ca103f1d38d280848 (diff)
downloadtime-picker-cd8d3e48c8a56e2f60405029cc1169d791e18cca.tar.gz
time-picker-cd8d3e48c8a56e2f60405029cc1169d791e18cca.tar.zst
time-picker-cd8d3e48c8a56e2f60405029cc1169d791e18cca.zip
Merge pull request #87 from vahnag/master
Fixes #75: Disabled Hours for 12 hour picker
-rw-r--r--src/Combobox.jsx10
-rw-r--r--tests/Select.spec.jsx120
2 files changed, 129 insertions, 1 deletions
diff --git a/src/Combobox.jsx b/src/Combobox.jsx
index 1eed4d2..19fbd19 100644
--- a/src/Combobox.jsx
+++ b/src/Combobox.jsx
@@ -83,12 +83,20 @@ class Combobox extends Component {
83 if (!showHour) { 83 if (!showHour) {
84 return null; 84 return null;
85 } 85 }
86 const disabledOptions = disabledHours(); 86 let disabledOptions = disabledHours();
87 let hourOptionsAdj; 87 let hourOptionsAdj;
88 let hourAdj; 88 let hourAdj;
89 if (use12Hours) { 89 if (use12Hours) {
90 hourOptionsAdj = [12].concat(hourOptions.filter(h => h < 12 && h > 0)); 90 hourOptionsAdj = [12].concat(hourOptions.filter(h => h < 12 && h > 0));
91 hourAdj = (hour % 12) || 12; 91 hourAdj = (hour % 12) || 12;
92
93 if (Array.isArray(disabledOptions)) {
94 if (this.isAM()) {
95 disabledOptions = disabledOptions.filter(h => h < 12).map(h => (h === 0 ? 12 : h));
96 } else {
97 disabledOptions = disabledOptions.map(h => (h === 12 ? 12 : h - 12));
98 }
99 }
92 } else { 100 } else {
93 hourOptionsAdj = hourOptions; 101 hourOptionsAdj = hourOptions;
94 hourAdj = hour; 102 hourAdj = hour;
diff --git a/tests/Select.spec.jsx b/tests/Select.spec.jsx
index 2a15e7c..f414c18 100644
--- a/tests/Select.spec.jsx
+++ b/tests/Select.spec.jsx
@@ -552,5 +552,125 @@ describe('Select', () => {
552 done(); 552 done();
553 }); 553 });
554 }); 554 });
555
556 it('disabled correctly', done => {
557 let change;
558 const picker = renderPicker({
559 use12Hours: true,
560 format: undefined,
561 onChange(v) {
562 change = v;
563 },
564 disabledHours() {
565 return [0, 2, 6, 18, 12];
566 },
567 defaultValue: moment()
568 .hour(0)
569 .minute(0)
570 .second(0),
571 showSecond: false,
572 });
573 expect(picker.state.open).not.to.be.ok();
574 const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0];
575 let header;
576 async.series(
577 [
578 next => {
579 expect(picker.state.open).to.be(false);
580
581 Simulate.click(input);
582 setTimeout(next, 100);
583 },
584 next => {
585 expect(picker.state.open).to.be(true);
586 header = TestUtils.scryRenderedDOMComponentsWithClass(
587 picker.panelInstance,
588 'rc-time-picker-panel-input',
589 )[0];
590 expect(header).to.be.ok();
591 expect(header.value).to.be('12:00 am');
592 expect(input.value).to.be('12:00 am');
593
594 const selector = TestUtils.scryRenderedDOMComponentsWithClass(
595 picker.panelInstance,
596 'rc-time-picker-panel-select',
597 )[0];
598 const option = selector.getElementsByTagName('li')[2];
599 Simulate.click(option);
600 setTimeout(next, 100);
601 },
602 next => {
603 expect(change).not.to.be.ok();
604 expect(header.value).to.be('12:00 am');
605 expect(input.value).to.be('12:00 am');
606 expect(picker.state.open).to.be.ok();
607
608 const selector = TestUtils.scryRenderedDOMComponentsWithClass(
609 picker.panelInstance,
610 'rc-time-picker-panel-select',
611 )[0];
612 const option = selector.getElementsByTagName('li')[5];
613 Simulate.click(option);
614 setTimeout(next, 100);
615 },
616 next => {
617 expect(change).to.be.ok();
618 expect(change.hour()).to.be(5);
619 expect(header.value).to.be('5:00 am');
620 expect(input.value).to.be('5:00 am');
621 expect(picker.state.open).to.be.ok();
622
623 const selector = TestUtils.scryRenderedDOMComponentsWithClass(
624 picker.panelInstance,
625 'rc-time-picker-panel-select',
626 )[2];
627 Simulate.click(selector.getElementsByTagName('li')[1]);
628
629 setTimeout(next, 200);
630 change = null;
631 },
632 next => {
633 expect(change).not.to.be.ok();
634 expect(header.value).to.be('5:00 pm');
635 expect(input.value).to.be('5:00 pm');
636 expect(picker.state.open).to.be.ok();
637
638 const selector = TestUtils.scryRenderedDOMComponentsWithClass(
639 picker.panelInstance,
640 'rc-time-picker-panel-select',
641 )[0];
642 const option = selector.getElementsByTagName('li')[0];
643 Simulate.click(option);
644 setTimeout(next, 100);
645 },
646 next => {
647 expect(change).not.to.be.ok();
648 expect(header.value).to.be('5:00 pm');
649 expect(input.value).to.be('5:00 pm');
650 expect(picker.state.open).to.be.ok();
651
652 const selector = TestUtils.scryRenderedDOMComponentsWithClass(
653 picker.panelInstance,
654 'rc-time-picker-panel-select',
655 )[0];
656 const option = selector.getElementsByTagName('li')[5];
657 Simulate.click(option);
658 setTimeout(next, 100);
659 },
660 next => {
661 expect(change).to.be.ok();
662 expect(change.hour()).to.be(17);
663 expect(header.value).to.be('5:00 pm');
664 expect(input.value).to.be('5:00 pm');
665 expect(picker.state.open).to.be.ok();
666
667 next();
668 },
669 ],
670 () => {
671 done();
672 },
673 );
674 });
555 }); 675 });
556}); 676});