Skip to content

Commit 40c263e

Browse files
author
Marlon Parizzotto
committed
adding the possibility to depend on another value to re-render the directive, i.e another datepicker.
1 parent e4d79e9 commit 40c263e

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

src/js/datetimepicker.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@
136136
'</table></div>',
137137
scope: {
138138
onSetTime: '&',
139-
beforeRender: '&'
139+
beforeRender: '&',
140+
dependOn: '='
140141
},
141142
replace: true,
142143
link: function link(scope, element, attrs, ngModelController) {
@@ -158,6 +159,13 @@
158159
return moment.utc(unixDate).year(startYear).startOf('year');
159160
};
160161

162+
scope.$watch('dependOn', function(newDate){
163+
if(newDate){
164+
//if dependent date change, re-render the directive.
165+
ngModelController.$render();
166+
}
167+
});
168+
161169
var dataFactory = {
162170
year: function year(unixDate) {
163171
var selectedDate = moment.utc(unixDate).startOf('year');

test/configuration/beforeRender.spec.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,44 @@ describe('beforeRender', function () {
3131
});
3232

3333
describe('called before a new view is rendered', function () {
34+
35+
it('in year view $dates after dependent date are not selectable', function () {
36+
37+
$rootScope.date = moment('2008-01-01T00:00:00.000').toDate();
38+
$rootScope.otherDateModel = moment('2009-01-01T00:00:00.000').toDate();
39+
40+
$rootScope.beforeRender = function (dates) {
41+
expect(dates.length).toBe(12);
42+
dates.map(function (current) {
43+
//make not selectable after the dependent date
44+
current.selectable = moment(new Date(current.utcDateValue)).isBefore(moment($rootScope.otherDateModel));
45+
});
46+
};
47+
48+
spyOn($rootScope, 'beforeRender').and.callThrough();
49+
50+
var element = $compile('<datetimepicker data-ng-model=\'date\' data-before-render=\'beforeRender($dates)\' data-datetimepicker-config="{ startView: \'year\', minView: \'year\' }" data-depend-on="otherDateModel"></datetimepicker>')($rootScope);
51+
$rootScope.$digest();
52+
53+
var selectedElement = jQuery(jQuery('.year', element)[2]);
54+
55+
expect(selectedElement.hasClass('disabled')).toBeFalsy();
56+
selectedElement.trigger('click');
57+
expect($rootScope.date).toEqual(moment('2001-01-01T00:00:00.000').toDate());
58+
59+
$rootScope.otherDateModel = moment('2005-01-01T00:00:00.000').toDate();
60+
$rootScope.$apply();
61+
62+
var disabledElement = jQuery(jQuery('.year', element)[10]);
63+
64+
expect(disabledElement.hasClass('disabled')).toBeTruthy();
65+
disabledElement.trigger('click');
66+
expect($rootScope.date).toEqual(moment('2001-01-01T00:00:00.000').toDate());
67+
68+
expect($rootScope.beforeRender).toHaveBeenCalled();
69+
70+
});
71+
3472
it('in year view $dates parameter contains 12 members', function () {
3573

3674
$rootScope.date = moment('2008-01-01T00:00:00.000').toDate();

0 commit comments

Comments
 (0)