From 18458b740919cf2fabc9a9aec2a4fd63e121e339 Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Thu, 20 Aug 2015 08:01:53 -0700 Subject: [PATCH] fix(datepicker): update input size and invalid class on calendar click Closes #4262. --- src/components/datepicker/datePicker.js | 4 +- src/components/datepicker/datePicker.spec.js | 41 +++++++++++++------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/components/datepicker/datePicker.js b/src/components/datepicker/datePicker.js index 19b7fb7e3cb..e2bc691d207 100644 --- a/src/components/datepicker/datePicker.js +++ b/src/components/datepicker/datePicker.js @@ -212,8 +212,11 @@ self.$scope.$on('md-calendar-change', function(event, date) { self.ngModelCtrl.$setViewValue(date); + self.date = date; self.inputElement.value = self.dateLocale.formatDate(date); self.closeCalendarPane(); + self.resizeInputElement(); + self.inputContainer.classList.remove(INVALID_CLASS); }); var ngElement = angular.element(self.inputElement); @@ -292,7 +295,6 @@ this.ngModelCtrl.$setViewValue(parsedDate); this.date = parsedDate; this.inputContainer.classList.remove(INVALID_CLASS); - this.$scope.$apply(); } else { // If there's an input string, it's an invalid date. this.inputContainer.classList.toggle(INVALID_CLASS, inputString); diff --git a/src/components/datepicker/datePicker.spec.js b/src/components/datepicker/datePicker.spec.js index 10f44b799bc..170e97b6b6a 100644 --- a/src/components/datepicker/datePicker.spec.js +++ b/src/components/datepicker/datePicker.spec.js @@ -114,12 +114,12 @@ describe('md-date-picker', function() { controller.inputElement.value = '6/1/2015'; angular.element(controller.inputElement).triggerHandler('input'); $timeout.flush(); - expect(controller.inputContainer.classList.contains('md-datepicker-invalid')).toBe(false); + expect(controller.inputContainer).not.toHaveClass('md-datepicker-invalid'); controller.inputElement.value = '7'; angular.element(controller.inputElement).triggerHandler('input'); $timeout.flush(); - expect(controller.inputContainer.classList.contains('md-datepicker-invalid')).toBe(true); + expect(controller.inputContainer).toHaveClass('md-datepicker-invalid'); }); }); @@ -134,20 +134,33 @@ describe('md-date-picker', function() { expect(controller.isCalendarOpen).toBe(false); }); - it('should update the model value and close the calendar pane on md-calendar-change', function() { - var date = new Date(2015, JUN, 1); - controller.openCalendarPane({ - target: controller.inputElement + describe('md-calendar-change', function() { + it('should update the model value and close the calendar pane', function() { + var date = new Date(2015, JUN, 1); + controller.openCalendarPane({ + target: controller.inputElement + }); + scope.$emit('md-calendar-change', date); + scope.$apply(); + expect(pageScope.myDate).toEqual(date); + expect(controller.ngModelCtrl.$modelValue).toEqual(date); + + expect(controller.inputElement.value).toEqual(date.toLocaleDateString()); + expect(controller.calendarPaneOpenedFrom).toBe(null); + expect(controller.isCalendarOpen).toBe(false); }); - scope.$emit('md-calendar-change', date); - scope.$apply(); - expect(pageScope.myDate).toEqual(date); - expect(controller.ngModelCtrl.$modelValue).toEqual(date); + it('should remove the invalid state if present', function() { + controller.inputElement.value = '7'; + angular.element(controller.inputElement).triggerHandler('input'); + $timeout.flush(); + expect(controller.inputContainer).toHaveClass('md-datepicker-invalid'); - expect(controller.inputElement.value).toEqual(date.toLocaleDateString()); - expect(controller.calendarPaneOpenedFrom).toBe(null); - expect(controller.isCalendarOpen).toBe(false); + controller.openCalendarPane({ + target: controller.inputElement + }); + scope.$emit('md-calendar-change', new Date()); + expect(controller.inputContainer).not.toHaveClass('md-datepicker-invalid'); + }); }); - });