From e6aaadedefaa800d00a5d5f3e28b2da673fa7ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8C=80=EC=97=B0?= Date: Thu, 1 Jul 2021 09:54:38 +0900 Subject: [PATCH] fix: unable to reset selectable range (#64) * chore: add tests for reset selectable range * fix: unable to reset selectable range * chore: apply code reviews * doc: update jsdoc --- src/js/timepicker/index.js | 13 ++ test/timepicker/timepicker.spec.js | 188 ++++++++++++++++++++++++++--- 2 files changed, 181 insertions(+), 20 deletions(-) diff --git a/src/js/timepicker/index.js b/src/js/timepicker/index.js index 67af6b7..4d95a1b 100644 --- a/src/js/timepicker/index.js +++ b/src/js/timepicker/index.js @@ -779,6 +779,19 @@ var TimePicker = defineClass( } }, + /** + * Reset minute selectable range + */ + resetMinuteRange: function() { + var i; + + this.disabledMinutes = {}; + + for (i = 0; i <= END_NUMBER_OF_HOUR; i += 1) { + this.setDisabledMinutes(this.hour); + } + }, + /** * Whether the given range a valid range * @param {Object} begin - Contain begin hour and minute of range diff --git a/test/timepicker/timepicker.spec.js b/test/timepicker/timepicker.spec.js index b6d4e54..2fb612d 100644 --- a/test/timepicker/timepicker.spec.js +++ b/test/timepicker/timepicker.spec.js @@ -13,6 +13,157 @@ var container2 = document.createElement('div'); var timepickerNoMeridiem; var timepickerMeridiem; +var rangedHours = [ + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false} +]; +var rangedMins = [ + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: true}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false} +]; +var unrangedMins = [ + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false}, + {disabled: false} +]; + beforeEach(function() { timepickerNoMeridiem = new TimePicker(container1, { showMeridiem: false @@ -339,44 +490,41 @@ 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; + var hourSelect, selectOptions; 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}); - }); + expect(selectOptions).toMatchObject(rangedHours); }); it('should set selectable range on minute with only begin', function() { var start = makeRangeObj(9, 30); - var minSelect, selectOptions, disabledMins, selectableMins; - + var minSelect, selectOptions; 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}); - }); + expect(selectOptions).toMatchObject(rangedMins); + }); - selectableMins.forEach(function(selectableMin) { - expect(selectableMin).toMatchObject({disabled: false}); - }); + it('should reset selectable range on minute', function() { + var start = makeRangeObj(9, 30); + var minSelect, selectOptions; + + timepickerNoMeridiem.setRange(start); + timepickerNoMeridiem.setTime(9, 0); + timepickerNoMeridiem.resetMinuteRange(); + + minSelect = timepickerNoMeridiem.element.querySelectorAll('select[aria-label="Time"]')[1]; + selectOptions = Array.from(minSelect.querySelectorAll('option')); + + expect(selectOptions).toMatchObject(unrangedMins); }); it('should disable a meridiem selector when range included in the other', function() {