Skip to content

Commit 70fbbf9

Browse files
committed
fix(IgxCalendar): should not throw an error when press pgDown/Up #8074
1 parent 8b6bcec commit 70fbbf9

File tree

3 files changed

+25
-15
lines changed

3 files changed

+25
-15
lines changed

projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { TestBed, async, fakeAsync, tick } from '@angular/core/testing';
33
import { FormsModule } from '@angular/forms';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
55
import { configureTestSuite } from '../test-utils/configure-suite';
6-
import { UIInteractions } from '../test-utils/ui-interactions.spec';
6+
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
77
import { IgxCalendarComponent, IgxCalendarModule } from './public_api';
88
import { IgxDatePickerComponent, IgxDatePickerModule } from '../date-picker/date-picker.component';
99
import { DateRangeType } from '../core/dates';
@@ -752,9 +752,9 @@ describe('Multi-View Calendar - ', () => {
752752
expect(document.activeElement).toEqual(monthDates[10]);
753753
}));
754754

755-
it('Verify that months increment/decrement continuously on enter keydown', (fakeAsync(() => {
755+
it('Verify that months increment/decrement continuously on enter keydown', (async() => {
756756
calendar.monthsViewNumber = 2;
757-
tick(100);
757+
await wait(100);
758758
fixture.detectChanges();
759759
const dates = [new Date('2019-10-15'), new Date('2019-11-15'), new Date('2019-12-15'),
760760
new Date('2020-1-15'), new Date('2020-2-15'), new Date('2020-3-15'), new Date('2020-4-15')];
@@ -764,20 +764,21 @@ describe('Multi-View Calendar - ', () => {
764764
for (let i = 1; i < dates.length - 1; i++) {
765765
const arrowRight = HelperTestFunctions.getNexArrowElement(fixture);
766766
UIInteractions.triggerKeyDownEvtUponElem('Enter', arrowRight);
767-
tick(100);
767+
fixture.detectChanges();
768+
await wait(100);
768769
fixture.detectChanges();
769770

770771
HelperTestFunctions.verifyCalendarSubHeaders(fixture, [dates[i], dates[i + 1]]);
771772
}
772-
for (let index = dates.length - 2; index > 0; index--) {
773+
for (let index = dates.length - 2; index > 0; index--) {
773774
const arrowLeft = HelperTestFunctions.getPreviousArrowElement(fixture);
774775
UIInteractions.triggerKeyDownEvtUponElem('Enter', arrowLeft);
775-
tick(100);
776776
fixture.detectChanges();
777-
777+
await wait(200);
778+
fixture.detectChanges();
778779
HelperTestFunctions.verifyCalendarSubHeaders(fixture, [dates[index - 1], dates[index]]);
779780
}
780-
})));
781+
}));
781782

782783
it('Verify that months increment/decrement continuously on mouse down', (fakeAsync(() => {
783784
calendar.monthsViewNumber = 2;

projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -705,21 +705,24 @@ describe('IgxCalendar - ', () => {
705705
});
706706
});
707707

708-
it('Calendar keyboard navigation - PageUp/PageDown', () => {
708+
it('Calendar keyboard navigation - PageUp/PageDown', fakeAsync(() => {
709709
const component = dom.query(By.css(HelperTestFunctions.CALENDAR_CSSCLASS));
710710

711711
UIInteractions.triggerKeyDownEvtUponElem('PageUp', component.nativeElement);
712712
fixture.detectChanges();
713+
tick(100);
713714
expect(calendar.viewDate.getMonth()).toEqual(4);
714715

715716
calendar.viewDate = new Date(2017, 5, 13);
716717
fixture.detectChanges();
717718
UIInteractions.triggerKeyDownEvtUponElem('PageDown', component.nativeElement);
718719
fixture.detectChanges();
720+
tick(100);
719721

720722
expect(calendar.viewDate.getMonth()).toEqual(6);
721723
UIInteractions.triggerKeyDownEvtUponElem('PageUp', component.nativeElement, true, false, true);
722724
fixture.detectChanges();
725+
tick(100);
723726

724727
expect(calendar.viewDate.getFullYear()).toEqual(2016);
725728

@@ -728,9 +731,10 @@ describe('IgxCalendar - ', () => {
728731

729732
UIInteractions.triggerKeyDownEvtUponElem('PageDown', component.nativeElement, true, false, true);
730733
fixture.detectChanges();
734+
tick(100);
731735

732736
expect(calendar.viewDate.getFullYear()).toEqual(2018);
733-
});
737+
}));
734738

735739
it('Calendar keyboard navigation - Home/End/Enter', () => {
736740
const component = dom.query(By.css(HelperTestFunctions.CALENDAR_CSSCLASS));

projects/igniteui-angular/src/lib/calendar/calendar.component.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,8 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
466466
* @internal
467467
*/
468468
public previousMonth(isKeydownTrigger = false) {
469+
debugger;
470+
if (isKeydownTrigger && this.animationAction === ScrollMonth.NEXT) { return; }
469471
this.viewDate = this.calendarModel.getPrevMonth(this.viewDate);
470472
this.animationAction = ScrollMonth.PREV;
471473
this.isKeydownTrigger = isKeydownTrigger;
@@ -478,6 +480,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
478480
* @internal
479481
*/
480482
public nextMonth(isKeydownTrigger = false) {
483+
if (isKeydownTrigger && this.animationAction === 'prev') { return; }
481484
this.viewDate = this.calendarModel.getNextMonth(this.viewDate);
482485
this.animationAction = ScrollMonth.NEXT;
483486
this.isKeydownTrigger = isKeydownTrigger;
@@ -491,7 +494,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
491494
public startPrevMonthScroll = (isKeydownTrigger = false) => {
492495
this.startMonthScroll$.next();
493496
this.monthScrollDirection = ScrollMonth.PREV;
494-
497+
this.animationAction = ScrollMonth.PREV;
495498
this.previousMonth(isKeydownTrigger);
496499
}
497500

@@ -503,7 +506,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
503506
public startNextMonthScroll = (isKeydownTrigger = false) => {
504507
this.startMonthScroll$.next();
505508
this.monthScrollDirection = ScrollMonth.NEXT;
506-
509+
this.animationAction = ScrollMonth.NEXT;
507510
this.nextMonth(isKeydownTrigger);
508511
}
509512

@@ -745,11 +748,11 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
745748
@HostListener('keydown.pageup', ['$event'])
746749
public onKeydownPageDown(event: KeyboardEvent) {
747750
event.preventDefault();
748-
749751
if (this.activeView !== CalendarView.DEFAULT) {
750752
return;
751753
}
752754

755+
753756
const isPageDown = event.key === 'PageDown';
754757
const step = isPageDown ? 1 : -1;
755758
let monthView = this.daysView as IgxDaysViewComponent;
@@ -792,8 +795,10 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
792795
};
793796
}
794797

795-
if (isPageDown) { this.nextMonth(true); } else {
796-
this.previousMonth(true);
798+
if (isPageDown) {
799+
event.repeat ? requestAnimationFrame(() => this.nextMonth(true)) : this.nextMonth(true);
800+
} else {
801+
event.repeat ? requestAnimationFrame(() => this.previousMonth(true)) : this.previousMonth(true);
797802
}
798803
}
799804

0 commit comments

Comments
 (0)