From f30361fe767d300312c3d1467a60462d9f7da059 Mon Sep 17 00:00:00 2001 From: Vahagn Aharonian Date: Sat, 2 Dec 2017 19:33:34 +0400 Subject: Fixes #75: Disabled Hours for 12 hour picker --- src/Combobox.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Combobox.jsx b/src/Combobox.jsx index 1eed4d2..18fd54c 100644 --- a/src/Combobox.jsx +++ b/src/Combobox.jsx @@ -83,12 +83,16 @@ class Combobox extends Component { if (!showHour) { return null; } - const disabledOptions = disabledHours(); + let disabledOptions = disabledHours(); let hourOptionsAdj; let hourAdj; if (use12Hours) { hourOptionsAdj = [12].concat(hourOptions.filter(h => h < 12 && h > 0)); hourAdj = (hour % 12) || 12; + + if (!this.isAM() && Array.isArray(disabledOptions)) { + disabledOptions = disabledOptions.map(h => h - 12); + } } else { hourOptionsAdj = hourOptions; hourAdj = hour; -- cgit v1.2.3 From ab128c3d1cf22599a20de85ca103f1d38d280848 Mon Sep 17 00:00:00 2001 From: Vahagn Aharonian Date: Thu, 1 Feb 2018 12:50:34 +0400 Subject: Add tests; fix the logic --- src/Combobox.jsx | 8 +++- tests/Select.spec.jsx | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 2 deletions(-) diff --git a/src/Combobox.jsx b/src/Combobox.jsx index 18fd54c..19fbd19 100644 --- a/src/Combobox.jsx +++ b/src/Combobox.jsx @@ -90,8 +90,12 @@ class Combobox extends Component { hourOptionsAdj = [12].concat(hourOptions.filter(h => h < 12 && h > 0)); hourAdj = (hour % 12) || 12; - if (!this.isAM() && Array.isArray(disabledOptions)) { - disabledOptions = disabledOptions.map(h => h - 12); + if (Array.isArray(disabledOptions)) { + if (this.isAM()) { + disabledOptions = disabledOptions.filter(h => h < 12).map(h => (h === 0 ? 12 : h)); + } else { + disabledOptions = disabledOptions.map(h => (h === 12 ? 12 : h - 12)); + } } } else { hourOptionsAdj = hourOptions; 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', () => { done(); }); }); + + it('disabled correctly', done => { + let change; + const picker = renderPicker({ + use12Hours: true, + format: undefined, + onChange(v) { + change = v; + }, + disabledHours() { + return [0, 2, 6, 18, 12]; + }, + defaultValue: moment() + .hour(0) + .minute(0) + .second(0), + showSecond: false, + }); + expect(picker.state.open).not.to.be.ok(); + const input = TestUtils.scryRenderedDOMComponentsWithClass(picker, 'rc-time-picker-input')[0]; + let header; + async.series( + [ + next => { + expect(picker.state.open).to.be(false); + + Simulate.click(input); + setTimeout(next, 100); + }, + next => { + expect(picker.state.open).to.be(true); + header = TestUtils.scryRenderedDOMComponentsWithClass( + picker.panelInstance, + 'rc-time-picker-panel-input', + )[0]; + expect(header).to.be.ok(); + expect(header.value).to.be('12:00 am'); + expect(input.value).to.be('12:00 am'); + + const selector = TestUtils.scryRenderedDOMComponentsWithClass( + picker.panelInstance, + 'rc-time-picker-panel-select', + )[0]; + const option = selector.getElementsByTagName('li')[2]; + Simulate.click(option); + setTimeout(next, 100); + }, + next => { + expect(change).not.to.be.ok(); + expect(header.value).to.be('12:00 am'); + expect(input.value).to.be('12:00 am'); + expect(picker.state.open).to.be.ok(); + + const selector = TestUtils.scryRenderedDOMComponentsWithClass( + picker.panelInstance, + 'rc-time-picker-panel-select', + )[0]; + const option = selector.getElementsByTagName('li')[5]; + Simulate.click(option); + setTimeout(next, 100); + }, + next => { + expect(change).to.be.ok(); + expect(change.hour()).to.be(5); + expect(header.value).to.be('5:00 am'); + expect(input.value).to.be('5:00 am'); + expect(picker.state.open).to.be.ok(); + + const selector = TestUtils.scryRenderedDOMComponentsWithClass( + picker.panelInstance, + 'rc-time-picker-panel-select', + )[2]; + Simulate.click(selector.getElementsByTagName('li')[1]); + + setTimeout(next, 200); + change = null; + }, + next => { + expect(change).not.to.be.ok(); + expect(header.value).to.be('5:00 pm'); + expect(input.value).to.be('5:00 pm'); + expect(picker.state.open).to.be.ok(); + + const selector = TestUtils.scryRenderedDOMComponentsWithClass( + picker.panelInstance, + 'rc-time-picker-panel-select', + )[0]; + const option = selector.getElementsByTagName('li')[0]; + Simulate.click(option); + setTimeout(next, 100); + }, + next => { + expect(change).not.to.be.ok(); + expect(header.value).to.be('5:00 pm'); + expect(input.value).to.be('5:00 pm'); + expect(picker.state.open).to.be.ok(); + + const selector = TestUtils.scryRenderedDOMComponentsWithClass( + picker.panelInstance, + 'rc-time-picker-panel-select', + )[0]; + const option = selector.getElementsByTagName('li')[5]; + Simulate.click(option); + setTimeout(next, 100); + }, + next => { + expect(change).to.be.ok(); + expect(change.hour()).to.be(17); + expect(header.value).to.be('5:00 pm'); + expect(input.value).to.be('5:00 pm'); + expect(picker.state.open).to.be.ok(); + + next(); + }, + ], + () => { + done(); + }, + ); + }); }); }); -- cgit v1.2.3