From c14d385a3de88c48e400d2032b944b3d998a9046 Mon Sep 17 00:00:00 2001 From: jajugoguma Date: Tue, 22 Jun 2021 11:06:49 +0900 Subject: [PATCH 1/3] chore: add test to set range without end --- test/timepicker/timepicker.spec.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/timepicker/timepicker.spec.js b/test/timepicker/timepicker.spec.js index 669593a..4b07cd5 100644 --- a/test/timepicker/timepicker.spec.js +++ b/test/timepicker/timepicker.spec.js @@ -337,6 +337,29 @@ describe('Set selectable range', function() { }); }); + it('should set selectable range with only begin', function() { + var start = makeRangeObj(9, 30); + var selector, hourSelect, minSelect, selectOption; + + timepickerNoMeridiem.setRange(start); + + selector = timepickerNoMeridiem.element.querySelectorAll('select[aria-label="Time"]'); + hourSelect = selector[0]; + minSelect = selector[1]; + + selectOption = hourSelect.querySelector('option[value="8"]'); + expect(selectOption.disabled).toBe(true); + selectOption = hourSelect.querySelector('option[value="9"]'); + expect(selectOption.disabled).toBe(false); + + timepickerNoMeridiem.setTime(9, 0); + + selectOption = minSelect.querySelector('option[value="30"]'); + expect(selectOption.disabled).toBe(true); + selectOption = minSelect.querySelector('option[value="31"]'); + expect(selectOption.disabled).toBe(false); + }); + it('should disable a meridiem selector when range included in the other', function() { var start = makeRangeObj(6, 30); var end = makeRangeObj(11, 30); From 975c8d397a68d1f785012ad335f2e6cae85bf720 Mon Sep 17 00:00:00 2001 From: jajugoguma Date: Tue, 22 Jun 2021 11:08:59 +0900 Subject: [PATCH 2/3] fix: use value which is end of range when it valid --- src/js/timepicker/index.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/js/timepicker/index.js b/src/js/timepicker/index.js index 68212ca..2743227 100644 --- a/src/js/timepicker/index.js +++ b/src/js/timepicker/index.js @@ -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(); + if (beginHour === endHour) { + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges).concat(); + + return; + } + this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]]).concat(); } + + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]]).concat(); }, /** From 607159833321514acf1ece89888d85a08aa33ebf Mon Sep 17 00:00:00 2001 From: jajugoguma Date: Wed, 23 Jun 2021 18:03:04 +0900 Subject: [PATCH 3/3] chore: apply code reviews --- src/js/timepicker/index.js | 10 +++---- test/timepicker/timepicker.spec.js | 45 +++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/js/timepicker/index.js b/src/js/timepicker/index.js index 2743227..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(); }, /** @@ -749,15 +749,15 @@ var TimePicker = defineClass( }); if (beginHour === endHour) { - this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges).concat(); + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges).slice(); return; } - this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]]).concat(); + this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]]).slice(); } - this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]]).concat(); + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]]).slice(); }, /** diff --git a/test/timepicker/timepicker.spec.js b/test/timepicker/timepicker.spec.js index 4b07cd5..b6d4e54 100644 --- a/test/timepicker/timepicker.spec.js +++ b/test/timepicker/timepicker.spec.js @@ -337,27 +337,46 @@ describe('Set selectable range', function() { }); }); - it('should set selectable range with only begin', function() { + it('should set selectable range on hour with only begin', function() { var start = makeRangeObj(9, 30); - var selector, hourSelect, minSelect, selectOption; + var hourSelect, selectOptions, disabledHours, selectableHours; timepickerNoMeridiem.setRange(start); - selector = timepickerNoMeridiem.element.querySelectorAll('select[aria-label="Time"]'); - hourSelect = selector[0]; - minSelect = selector[1]; + hourSelect = timepickerNoMeridiem.element.querySelector('select[aria-label="Time"]'); - selectOption = hourSelect.querySelector('option[value="8"]'); - expect(selectOption.disabled).toBe(true); - selectOption = hourSelect.querySelector('option[value="9"]'); - expect(selectOption.disabled).toBe(false); + 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); - selectOption = minSelect.querySelector('option[value="30"]'); - expect(selectOption.disabled).toBe(true); - selectOption = minSelect.querySelector('option[value="31"]'); - expect(selectOption.disabled).toBe(false); + 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() {