Skip to content

Commit 1ebfaf6

Browse files
committed
fix(pfBootstrapDatepicker): added callback function when date changes
1 parent 28f7124 commit 1ebfaf6

File tree

3 files changed

+64
-12
lines changed

3 files changed

+64
-12
lines changed

src/datepicker/bootstrap-datepicker.component.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ angular.module('patternfly.datepicker').component('pfBootstrapDatepicker', {
44
format: '@?',
55
dateOptions: '<?',
66
isOpen: '<?',
7-
popupPlacement: '@?'
7+
popupPlacement: '@?',
8+
onDateChange: '&'
89
},
910
templateUrl: 'datepicker/datepicker.html',
1011
controller: function () {
1112
'use strict';
1213

13-
var ctrl = this;
14+
var ctrl = this, prevDate;
1415

1516
ctrl.defaultDateOptions = {
1617
showWeeks : false,
@@ -31,8 +32,18 @@ angular.module('patternfly.datepicker').component('pfBootstrapDatepicker', {
3132
};
3233

3334
ctrl.$onChanges = function (changes) {
35+
prevDate = angular.copy(ctrl.date);
3436
_.defaults(ctrl.isOpen, ctrl.defaultIsOpen);
3537
};
3638

39+
ctrl.$doCheck = function () {
40+
// do a deep compare on data
41+
if (!angular.equals(ctrl.date, prevDate)) {
42+
prevDate = angular.copy(ctrl.date);
43+
if (ctrl.onDateChange) {
44+
ctrl.onDateChange({newDate: ctrl.date});
45+
}
46+
}
47+
};
3748
}
3849
});

src/datepicker/examples/bootstrap.datepicker.js

+33-9
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
* @param {date} date Must be a Javascript Date - to be displayed in the input. Can be left empty.
77
* @param {string} format Optional date format for displayed dates ('MM/dd/yyyy' by default).
8+
* @param {function} on-date-change Optional user defined function which is called when the date is changed by the picker.<br/>
89
* @param {boolean} isOpen Optional boolean for determining whether or not to have the datepicker default to open (false by default).
910
* @param {string} popupPlacement Optional configuration string used to position the popup datepicker relative to the input element. See {@link https://angular-ui.github.io/bootstrap/#datepickerPopup Angular UI Datepicker Popup}.
1011
* @param {object} dateOptions Optional uib-datepicker configuration object. See {@link https://angular-ui.github.io/bootstrap/#datepicker Angular UI Datepicker}.
@@ -16,33 +17,56 @@
1617
<example module="patternfly.datepicker">
1718
1819
<file name="index.html">
19-
<div ng-controller="DemoBootstrapDatepicker">
20-
<pf-bootstrap-datepicker
21-
date="date">
22-
</pf-bootstrap-datepicker>
23-
<pf-bootstrap-datepicker
24-
date=""
20+
<div ng-controller="DemoBootstrapDatepicker" class="row example-container">
21+
<div class="form-group">
22+
<label class="col-sm-2 control-label" for="date-one">Date One:</label>
23+
<pf-bootstrap-datepicker
24+
id="date-one"
25+
date="dateOne"
26+
on-date-change="firstDateChanged(newDate)">
27+
</pf-bootstrap-datepicker>
28+
<label class="col-sm-2 control-label" for="date-one">Date Two:</label>
29+
<pf-bootstrap-datepicker
30+
id="date-two"
31+
date="dateTwo"
2532
format="{{format1}}"
2633
is-open="isOpen"
2734
popup-placement="{{popupPlacement}}"
28-
date-options="dateOptions">
29-
</pf-bootstrap-datepicker>
35+
date-options="dateOptions"
36+
on-date-change="secondDateChanged(newDate)">
37+
</pf-bootstrap-datepicker>
38+
</div>
39+
<div class="col-md-12">
40+
<label style="font-weight:normal;vertical-align:center;">Events: </label>
41+
</div>
42+
<div class="col-md-12">
43+
<textarea rows="10" class="col-md-12">{{eventText}}</textarea>
44+
</div>
3045
</div>
3146
</file>
3247
3348
<file name="script.js">
3449
angular.module('patternfly.datepicker').controller('DemoBootstrapDatepicker', function( $scope ) {
50+
$scope.eventText = '';
3551
3652
// first datepicker
37-
$scope.date = new Date("Jan 1, 2000");
53+
$scope.dateOne = new Date("Jan 1, 2000");
54+
$scope.firstDateChanged = function(date) {
55+
$scope.eventText = 'Date One Updated to: ' + date + '\r\n' + $scope.eventText;
56+
};
3857
3958
// second datepicker
59+
$scope.dateTwo = new Date("Feb 1, 2000");
4060
$scope.format1 = "MM/dd/yy";
4161
$scope.dateOptions = {
4262
showWeeks : true
4363
};
4464
$scope.isOpen = true;
4565
$scope.popupPlacement = "bottom-left";
66+
67+
$scope.secondDateChanged = function(date) {
68+
$scope.eventText = 'Date Two Updated to: ' + date + '\r\n' + $scope.eventText;
69+
};
4670
});
4771
</file>
4872

test/datepicker/bootstrap-datepicker.spec.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@ describe('Component: pfBootstrapDatepicker', function () {
2626
$scope.dateOptions = {
2727
showWeeks : true
2828
};
29+
$scope.callbackExecuted = false;
30+
$scope.dateChangedCallback = function (newDate) {
31+
$scope.callbackExecuted = true;
32+
};
2933

30-
var htmlTmp = '<pf-bootstrap-datepicker date="date" format="{{format}}"></pf-bootstrap-datepicker>';
34+
var htmlTmp = '<pf-bootstrap-datepicker date="date" format="{{format}}" on-date-change="dateChangedCallback(newDate)"></pf-bootstrap-datepicker>';
3135

3236
compileHTML(htmlTmp, $scope);
3337
});
@@ -75,4 +79,17 @@ describe('Component: pfBootstrapDatepicker', function () {
7579

7680
});
7781

82+
it('should execute callback when date changed', function () {
83+
expect($scope.callbackExecuted).toBeFalsy();
84+
85+
var button = element.find('button.datepicker')[0];
86+
eventFire(button, 'click');
87+
88+
// click on the tenth date in calendar popup
89+
var dateButton = element.find('button.btn-sm')[10];
90+
eventFire(dateButton, 'click');
91+
92+
expect($scope.callbackExecuted).toBeTruthy();
93+
});
94+
7895
});

0 commit comments

Comments
 (0)