diff --git a/src/js/timepicker/index.js b/src/js/timepicker/index.js index 68212ca..67af6b7 100644 --- a/src/js/timepicker/index.js +++ b/src/js/timepicker/index.js @@ -391,7 +391,7 @@ var TimePicker = defineClass( makeDisabledStatItems: function(hourItems) { var result = []; - var disabledHours = this.disabledHours.concat(); + var disabledHours = this.disabledHours.slice(); if (this.showMeridiem) { disabledHours = this.meridiemableTime(disabledHours); @@ -719,7 +719,7 @@ var TimePicker = defineClass( disabledHours = disabledHours.concat(util.getRangeArr(endHour + 1, END_NUMBER_OF_HOUR)); } - this.disabledHours = disabledHours.concat(); + this.disabledHours = disabledHours.slice(); }, /** @@ -732,24 +732,32 @@ var TimePicker = defineClass( */ setRangeMinute: function(beginHour, beginMin, endHour, endMin) { var disabledMinRanges = []; + + if (!beginHour && !beginMin) { + return; + } + disabledMinRanges.push({ begin: START_NUMBER_OF_TIME, end: beginMin }); - if (endMin) { + if (endHour && endMin) { disabledMinRanges.push({ begin: endMin, end: END_NUMBER_OF_MINUTE }); - } - if (disabledMinRanges.length > 1 && beginHour === endHour) { - this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges).concat(); - } else { - this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]]).concat(); - this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]]).concat(); + if (beginHour === endHour) { + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges).slice(); + + return; + } + + this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]]).slice(); } + + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]]).slice(); }, /** diff --git a/test/timepicker/timepicker.spec.js b/test/timepicker/timepicker.spec.js index 669593a..b6d4e54 100644 --- a/test/timepicker/timepicker.spec.js +++ b/test/timepicker/timepicker.spec.js @@ -337,6 +337,48 @@ describe('Set selectable range', function() { }); }); + it('should set selectable range on hour with only begin', function() { + var start = makeRangeObj(9, 30); + var hourSelect, selectOptions, disabledHours, selectableHours; + + timepickerNoMeridiem.setRange(start); + + hourSelect = timepickerNoMeridiem.element.querySelector('select[aria-label="Time"]'); + + selectOptions = Array.from(hourSelect.querySelectorAll('option')); + disabledHours = selectOptions.slice(0, 9); + selectableHours = selectOptions.slice(9); + + disabledHours.forEach(function(disabledHour) { + expect(disabledHour).toMatchObject({disabled: true}); + }); + + selectableHours.forEach(function(selectableHour) { + expect(selectableHour).toMatchObject({disabled: false}); + }); + }); + + it('should set selectable range on minute with only begin', function() { + var start = makeRangeObj(9, 30); + var minSelect, selectOptions, disabledMins, selectableMins; + + timepickerNoMeridiem.setRange(start); + timepickerNoMeridiem.setTime(9, 0); + + minSelect = timepickerNoMeridiem.element.querySelectorAll('select[aria-label="Time"]')[1]; + selectOptions = Array.from(minSelect.querySelectorAll('option')); + disabledMins = selectOptions.slice(0, 31); + selectableMins = selectOptions.slice(31); + + disabledMins.forEach(function(disabledMin) { + expect(disabledMin).toMatchObject({disabled: true}); + }); + + selectableMins.forEach(function(selectableMin) { + expect(selectableMin).toMatchObject({disabled: false}); + }); + }); + it('should disable a meridiem selector when range included in the other', function() { var start = makeRangeObj(6, 30); var end = makeRangeObj(11, 30);