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

Commit 45165ba

Browse files
committed
feat(datepicker): watch for changes when falsy
- When initial value is falsy, continue to watch for changes to update Closes #5672 Closes #5677
1 parent 8590ea7 commit 45165ba

File tree

2 files changed

+60
-14
lines changed

2 files changed

+60
-14
lines changed

Diff for: src/datepicker/datepicker.js

+12-14
Original file line numberDiff line numberDiff line change
@@ -94,23 +94,21 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
9494
break;
9595
case 'maxDate':
9696
case 'minDate':
97-
if ($scope.datepickerOptions[key]) {
98-
$scope.$watch('datepickerOptions.' + key, function(value) {
99-
if (value) {
100-
if (angular.isDate(value)) {
101-
self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.timezone);
102-
} else {
103-
self[key] = new Date(dateFilter(value, 'medium'));
104-
}
97+
$scope.$watch('datepickerOptions.' + key, function(value) {
98+
if (value) {
99+
if (angular.isDate(value)) {
100+
self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.timezone);
105101
} else {
106-
self[key] = null;
102+
self[key] = new Date(dateFilter(value, 'medium'));
107103
}
104+
} else {
105+
self[key] = datepickerConfig[key] ?
106+
dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.timezone) :
107+
null;
108+
}
108109

109-
self.refreshView();
110-
});
111-
} else {
112-
self[key] = datepickerConfig[key] ? dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.timezone) : null;
113-
}
110+
self.refreshView();
111+
});
114112

115113
break;
116114
case 'maxMode':

Diff for: src/datepicker/test/datepicker.spec.js

+48
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,30 @@ describe('datepicker', function() {
920920
});
921921
});
922922

923+
describe('minDate with no initial value', function() {
924+
beforeEach(function() {
925+
$rootScope.options = {};
926+
$rootScope.date = new Date('September 10, 2010');
927+
element = $compile('<uib-datepicker ng-model="date" datepicker-options="options"></uib-datepicker>')($rootScope);
928+
$rootScope.$digest();
929+
});
930+
931+
it('should toggle appropriately', function() {
932+
var buttons = getAllOptionsEl();
933+
angular.forEach(buttons, function(button, index) {
934+
expect(angular.element(button).prop('disabled')).toBe(false);
935+
});
936+
937+
$rootScope.options.minDate = new Date('September 12, 2010');
938+
$rootScope.$digest();
939+
940+
refreshedButtons = getAllOptionsEl();
941+
angular.forEach(refreshedButtons, function(button, index) {
942+
expect(angular.element(button).prop('disabled')).toBe(index < 14);
943+
});
944+
});
945+
});
946+
923947
describe('minDate', function() {
924948
beforeEach(function() {
925949
$rootScope.options = {
@@ -1019,6 +1043,30 @@ describe('datepicker', function() {
10191043
});
10201044
});
10211045

1046+
describe('maxDate with no initial value', function() {
1047+
beforeEach(function() {
1048+
$rootScope.options = {};
1049+
$rootScope.date = new Date('September 10, 2010');
1050+
element = $compile('<uib-datepicker ng-model="date" datepicker-options="options"></uib-datepicker>')($rootScope);
1051+
$rootScope.$digest();
1052+
});
1053+
1054+
it('should toggle appropriately', function() {
1055+
var buttons = getAllOptionsEl();
1056+
angular.forEach(buttons, function(button, index) {
1057+
expect(angular.element(button).prop('disabled')).toBe(false);
1058+
});
1059+
1060+
$rootScope.options.maxDate = new Date('September 25, 2010');
1061+
$rootScope.$digest();
1062+
1063+
refreshedButtons = getAllOptionsEl();
1064+
angular.forEach(refreshedButtons, function(button, index) {
1065+
expect(angular.element(button).prop('disabled')).toBe(index > 27);
1066+
});
1067+
});
1068+
});
1069+
10221070
describe('maxDate', function() {
10231071
beforeEach(function() {
10241072
$rootScope.options = {

0 commit comments

Comments
 (0)