diff options
-rw-r--r-- | src/Combobox.jsx | 10 | ||||
-rw-r--r-- | tests/Select.spec.jsx | 120 |
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 | }); |