Skip to content

Commit

Permalink
fix: range without end (#63)
Browse files Browse the repository at this point in the history
* chore: add test to set range without end

* fix: use value which is end of range when it valid

* chore: apply code reviews
  • Loading branch information
jajugoguma authored Jun 25, 2021
1 parent 2af0ae2 commit 286c10d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 9 deletions.
26 changes: 17 additions & 9 deletions src/js/timepicker/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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();
},

/**
Expand All @@ -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();
},

/**
Expand Down
42 changes: 42 additions & 0 deletions test/timepicker/timepicker.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 286c10d

Please sign in to comment.