Skip to content

Commit b048c5a

Browse files
committed
fix(IgxCalendar): should not throw an error when press pgDown/Up #8074
1 parent e2ed21c commit b048c5a

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
@@ -746,21 +746,24 @@ describe('IgxCalendar - ', () => {
746746
});
747747
});
748748

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

752752
UIInteractions.triggerKeyDownEvtUponElem('PageUp', component.nativeElement);
753753
fixture.detectChanges();
754+
tick(100);
754755
expect(calendar.viewDate.getMonth()).toEqual(4);
755756

756757
calendar.viewDate = new Date(2017, 5, 13);
757758
fixture.detectChanges();
758759
UIInteractions.triggerKeyDownEvtUponElem('PageDown', component.nativeElement);
759760
fixture.detectChanges();
761+
tick(100);
760762

761763
expect(calendar.viewDate.getMonth()).toEqual(6);
762764
UIInteractions.triggerKeyDownEvtUponElem('PageUp', component.nativeElement, true, false, true);
763765
fixture.detectChanges();
766+
tick(100);
764767

765768
expect(calendar.viewDate.getFullYear()).toEqual(2016);
766769

@@ -769,9 +772,10 @@ describe('IgxCalendar - ', () => {
769772

770773
UIInteractions.triggerKeyDownEvtUponElem('PageDown', component.nativeElement, true, false, true);
771774
fixture.detectChanges();
775+
tick(100);
772776

773777
expect(calendar.viewDate.getFullYear()).toEqual(2018);
774-
});
778+
}));
775779

776780
it('Calendar keyboard navigation - Home/End/Enter', () => {
777781
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
@@ -477,6 +477,8 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
477477
* @internal
478478
*/
479479
public previousMonth(isKeydownTrigger = false) {
480+
debugger;
481+
if (isKeydownTrigger && this.animationAction === ScrollMonth.NEXT) { return; }
480482
this.previousViewDate = this.viewDate;
481483
this.viewDate = this.calendarModel.getPrevMonth(this.viewDate);
482484
this.animationAction = ScrollMonth.PREV;
@@ -490,6 +492,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
490492
* @internal
491493
*/
492494
public nextMonth(isKeydownTrigger = false) {
495+
if (isKeydownTrigger && this.animationAction === 'prev') { return; }
493496
this.previousViewDate = this.viewDate;
494497
this.viewDate = this.calendarModel.getNextMonth(this.viewDate);
495498
this.animationAction = ScrollMonth.NEXT;
@@ -504,7 +507,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
504507
public startPrevMonthScroll = (isKeydownTrigger = false) => {
505508
this.startMonthScroll$.next();
506509
this.monthScrollDirection = ScrollMonth.PREV;
507-
510+
this.animationAction = ScrollMonth.PREV;
508511
this.previousMonth(isKeydownTrigger);
509512
}
510513

@@ -516,7 +519,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
516519
public startNextMonthScroll = (isKeydownTrigger = false) => {
517520
this.startMonthScroll$.next();
518521
this.monthScrollDirection = ScrollMonth.NEXT;
519-
522+
this.animationAction = ScrollMonth.NEXT;
520523
this.nextMonth(isKeydownTrigger);
521524
}
522525

@@ -775,11 +778,11 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
775778
@HostListener('keydown.pageup', ['$event'])
776779
public onKeydownPageDown(event: KeyboardEvent) {
777780
event.preventDefault();
778-
779781
if (this.activeView !== CalendarView.DEFAULT) {
780782
return;
781783
}
782784

785+
783786
const isPageDown = event.key === 'PageDown';
784787
const step = isPageDown ? 1 : -1;
785788
let monthView = this.daysView as IgxDaysViewComponent;
@@ -822,8 +825,10 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
822825
};
823826
}
824827

825-
if (isPageDown) { this.nextMonth(true); } else {
826-
this.previousMonth(true);
828+
if (isPageDown) {
829+
event.repeat ? requestAnimationFrame(() => this.nextMonth(true)) : this.nextMonth(true);
830+
} else {
831+
event.repeat ? requestAnimationFrame(() => this.previousMonth(true)) : this.previousMonth(true);
827832
}
828833
}
829834

0 commit comments

Comments
 (0)