Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit 818f7e5

Browse files
committed
fix(timepicker): leave view alone if either input is invalid
- Change to not auto-update inputs if either input is invalid Closes #4160 Fixes #3825
1 parent 11ecfd5 commit 818f7e5

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

src/timepicker/test/timepicker.spec.js

+32-1
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,38 @@ describe('timepicker directive', function () {
886886
expect(element.hasClass('ng-invalid-time')).toBe(false);
887887
});
888888

889+
it('leaves view alone when hours are invalid and minutes are updated', function() {
890+
var hoursEl = getHoursInputEl(),
891+
minutesEl = getMinutesInputEl();
892+
893+
changeInputValueTo(hoursEl, '25');
894+
hoursEl.blur();
895+
$rootScope.$digest();
896+
expect(getTimeState()).toEqual(['25', '40', 'PM']);
897+
898+
changeInputValueTo(minutesEl, '2');
899+
minutesEl.blur();
900+
$rootScope.$digest();
901+
expect(getTimeState()).toEqual(['25', '2', 'PM']);
902+
});
903+
904+
it('leaves view alone when minutes are invalid and hours are updated', function() {
905+
var hoursEl = getHoursInputEl(),
906+
minutesEl = getMinutesInputEl();
907+
908+
changeInputValueTo(minutesEl, '61');
909+
minutesEl.blur();
910+
$rootScope.$digest();
911+
expect($rootScope.time).toBe(null);
912+
expect(getTimeState()).toEqual(['02', '61', 'PM']);
913+
914+
changeInputValueTo(hoursEl, '2');
915+
hoursEl.blur();
916+
$rootScope.$digest();
917+
expect($rootScope.time).toBe(null);
918+
expect(getTimeState()).toEqual(['2', '61', 'PM']);
919+
});
920+
889921
it('handles 12/24H mode change', function() {
890922
$rootScope.meridian = true;
891923
element = $compile('<timepicker ng-model="time" show-meridian="meridian"></timepicker>')($rootScope);
@@ -1661,4 +1693,3 @@ describe('timepicker directive', function () {
16611693
});
16621694
});
16631695
});
1664-

src/timepicker/timepicker.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,10 @@ angular.module('ui.bootstrap.timepicker', [])
217217
};
218218

219219
$scope.updateHours = function() {
220-
var hours = getHoursFromTemplate();
220+
var hours = getHoursFromTemplate(),
221+
minutes = getMinutesFromTemplate();
221222

222-
if ( angular.isDefined(hours) ) {
223+
if (angular.isDefined(hours) && angular.isDefined(minutes)) {
223224
selected.setHours( hours );
224225
if (selected < min || selected > max) {
225226
invalidate(true);
@@ -240,9 +241,10 @@ angular.module('ui.bootstrap.timepicker', [])
240241
});
241242

242243
$scope.updateMinutes = function() {
243-
var minutes = getMinutesFromTemplate();
244+
var minutes = getMinutesFromTemplate(),
245+
hours = getHoursFromTemplate();
244246

245-
if ( angular.isDefined(minutes) ) {
247+
if (angular.isDefined(minutes) && angular.isDefined(hours)) {
246248
selected.setMinutes( minutes );
247249
if (selected < min || selected > max) {
248250
invalidate(undefined, true);
@@ -324,10 +326,10 @@ angular.module('ui.bootstrap.timepicker', [])
324326
selected = addMinutes( selected, minutes );
325327
refresh();
326328
}
327-
329+
328330
$scope.showSpinners = angular.isDefined($attrs.showSpinners) ?
329331
$scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;
330-
332+
331333
$scope.incrementHours = function() {
332334
if (!$scope.noIncrementHours()) {
333335
addMinutesToSelected(hourStep * 60);

0 commit comments

Comments
 (0)