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

Commit b4bbc01

Browse files
wesleychochrisirhc
authored andcommitted
fix(timepicker): move render logic to formatter
- Moves render logic converting model values into date or null object into a formatter, which allows the render function to more correctly render using the viewValue - remove parentheses as per CR Relates to #2069 Fixes #3160 Closes #3427
1 parent 33269bb commit b4bbc01

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/timepicker/test/timepicker.spec.js

+34
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ describe('timepicker directive', function () {
101101
expect(getModelState()).toEqual([14, 40]);
102102
});
103103

104+
it('should be pristine', function() {
105+
expect(element.controller('ngModel').$pristine).toBe(true);
106+
});
107+
104108
it('has `selected` current time when model is initially cleared', function() {
105109
$rootScope.time = null;
106110
element = $compile('<timepicker ng-model="time"></timepicker>')($rootScope);
@@ -773,6 +777,36 @@ describe('timepicker directive', function () {
773777
});
774778
});
775779

780+
describe('$formatter', function () {
781+
var ngModel,
782+
date;
783+
784+
beforeEach(function () {
785+
ngModel = element.controller('ngModel');
786+
date = new Date('Mon Mar 23 2015 14:40:11 GMT-0700 (PDT)');
787+
});
788+
789+
it('should have one formatter', function () {
790+
expect(ngModel.$formatters.length).toBe(1);
791+
});
792+
793+
it('should convert a date to a new reference representing the same date', function () {
794+
expect(ngModel.$formatters[0](date)).toEqual(date);
795+
});
796+
797+
it('should convert a valid date string to a date object', function () {
798+
expect(ngModel.$formatters[0]('Mon Mar 23 2015 14:40:11 GMT-0700 (PDT)')).toEqual(date);
799+
});
800+
801+
it('should set falsy values as null', function () {
802+
expect(ngModel.$formatters[0](undefined)).toBe(null);
803+
expect(ngModel.$formatters[0](null)).toBe(null);
804+
expect(ngModel.$formatters[0]('')).toBe(null);
805+
expect(ngModel.$formatters[0](0)).toBe(null);
806+
expect(ngModel.$formatters[0](NaN)).toBe(null);
807+
});
808+
});
809+
776810
describe('user input validation', function () {
777811
var changeInputValueTo;
778812

src/timepicker/timepicker.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ angular.module('ui.bootstrap.timepicker', [])
1919
ngModelCtrl = ngModelCtrl_;
2020
ngModelCtrl.$render = this.render;
2121

22+
ngModelCtrl.$formatters.unshift(function (modelValue) {
23+
return modelValue ? new Date( modelValue ) : null;
24+
});
25+
2226
var hoursInputEl = inputs.eq(0),
2327
minutesInputEl = inputs.eq(1);
2428

@@ -208,7 +212,7 @@ angular.module('ui.bootstrap.timepicker', [])
208212
};
209213

210214
this.render = function() {
211-
var date = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : null;
215+
var date = ngModelCtrl.$viewValue;
212216

213217
if ( isNaN(date) ) {
214218
ngModelCtrl.$setValidity('time', false);

0 commit comments

Comments
 (0)