From 2ae94c7d3e8905a1bb6bd027c34ca41008fb7cf9 Mon Sep 17 00:00:00 2001 From: Nadia Robakova Date: Thu, 10 Oct 2019 09:43:40 +0300 Subject: [PATCH 1/3] fix(grid): check if data is defined in the pagingPipe #5949 --- .../lib/grids/grid/grid.pagination.spec.ts | 35 ++++++++++++++++--- .../src/lib/grids/grid/grid.pipes.ts | 2 +- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts index 9916f6c03fb..36f26b629c6 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts @@ -1,7 +1,12 @@ import { async, TestBed, fakeAsync, tick, ComponentFixture } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxGridModule } from './index'; -import { ReorderedColumnsComponent, PagingAndEditingComponent, GridIDNameJobTitleComponent } from '../../test-utils/grid-samples.spec'; +import { + ReorderedColumnsComponent, + PagingAndEditingComponent, + GridIDNameJobTitleComponent, + GridWithUndefinedDataComponent +} from '../../test-utils/grid-samples.spec'; import { PagingComponent } from '../../test-utils/grid-base-components.spec'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; @@ -22,7 +27,8 @@ describe('IgxGrid - Grid Paging #grid', () => { ReorderedColumnsComponent, PagingComponent, PagingAndEditingComponent, - GridIDNameJobTitleComponent + GridIDNameJobTitleComponent, + GridWithUndefinedDataComponent ], imports: [IgxGridModule, NoopAnimationsModule] }).compileComponents(); @@ -64,7 +70,7 @@ describe('IgxGrid - Grid Paging #grid', () => { verifyGridPager(fix, 3, '1', '1 of 4', [true, true, false, false]); })); - it('should paginate data API', fakeAsync (() => { + it('should paginate data API', fakeAsync(() => { const fix = TestBed.createComponent(PagingComponent); fix.detectChanges(); @@ -283,7 +289,7 @@ describe('IgxGrid - Grid Paging #grid', () => { verifyGridPager(fix, 2, '9', '3 of 3', []); }); - it('activate/deactivate paging', fakeAsync(() => { + it('activate/deactivate paging', fakeAsync(() => { const fix = TestBed.createComponent(ReorderedColumnsComponent); const grid = fix.componentInstance.grid; fix.detectChanges(); @@ -465,6 +471,27 @@ describe('IgxGrid - Grid Paging #grid', () => { expect(gridElement.querySelector(PAGER_CLASS)).not.toBeNull(); })); + it('should not throw error when data is undefined', fakeAsync(() => { + let errorMessage = ''; + const fix = TestBed.createComponent(GridWithUndefinedDataComponent); + try { + fix.detectChanges(); + } catch (ex) { + errorMessage = ex.message; + } + expect(errorMessage).toBe(''); + const grid = fix.componentInstance.grid; + let paginator = grid.nativeElement.querySelector(PAGER_CLASS); + expect(paginator).toBeNull(); + expect(grid.rowList.length).toBe(0); + tick(305); + fix.detectChanges(); + + paginator = grid.nativeElement.querySelector(PAGER_CLASS); + expect(paginator).toBeDefined(); + expect(grid.rowList.length).toBe(11); + })); + function verifyGridPager(fix, rowsCount, firstCellValue, pagerText, buttonsVisibility) { const disabled = 'igx-button--disabled'; const grid = fix.componentInstance.grid; diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts index b8e96f4b0c4..f3622f4afe6 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts @@ -105,7 +105,7 @@ export class IgxGridPagingPipe implements PipeTransform { index: page, recordsPerPage: perPage }; - DataUtil.correctPagingState(state, collection.data.length); + DataUtil.correctPagingState(state, collection.data ? collection.data.length : 0); const result = { data: DataUtil.page(cloneArray(collection.data), state), From c7f787b173119c0dbdcd63bd94bca48a12f141a8 Mon Sep 17 00:00:00 2001 From: Nadia Robakova Date: Thu, 10 Oct 2019 09:58:17 +0300 Subject: [PATCH 2/3] chore(*): add missed component --- .../lib/grids/grid/grid.pagination.spec.ts | 2 +- .../src/lib/test-utils/grid-samples.spec.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts index ab234b8a05f..4fa54a3a0a9 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts @@ -486,7 +486,7 @@ describe('IgxGrid - Grid Paging #grid', () => { paginator = grid.nativeElement.querySelector(PAGER_CLASS); expect(paginator).toBeDefined(); - expect(grid.rowList.length).toBe(11); + expect(grid.rowList.length).toBe(5); })); function verifyGridPager(fix, rowsCount, firstCellValue, pagerText, buttonsVisibility) { diff --git a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts index 3d9ab102764..e86c5484d86 100644 --- a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts @@ -1500,3 +1500,23 @@ export class CellEditingScrollTestComponent extends BasicGridComponent { { firstName: 'Michael', lastName: 'Parker', age: 48, isActive: true, birthday: new Date('08/08/1970'), fullName: 'Michael Parker' } ]; } + +@Component({ + template: GridTemplateStrings.declareGrid( + ` [width]="width" [height]="height" [paging]="'true'" [perPage]="perPage" [primaryKey]="'ProductID'"`, + '', ColumnDefinitions.productBasicNumberID) +}) +export class GridWithUndefinedDataComponent implements OnInit { + @ViewChild(IgxGridComponent, { static: true }) + public grid: IgxGridComponent; + public data ; + public perPage = 5; + public width = '800px'; + public height = '600px'; + + public ngOnInit(): void { + setTimeout(() => { + this.data = SampleTestData.foodProductDataExtended(); + }, 300); + } +} From a2a92a89bcd52861f04fc4a19d702aa9b757fd52 Mon Sep 17 00:00:00 2001 From: Nadia Robakova Date: Thu, 10 Oct 2019 10:48:39 +0300 Subject: [PATCH 3/3] chore(*): update sample columns --- .../igniteui-angular/src/lib/test-utils/grid-samples.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts index e86c5484d86..95fd7b579ed 100644 --- a/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts @@ -1504,7 +1504,7 @@ export class CellEditingScrollTestComponent extends BasicGridComponent { @Component({ template: GridTemplateStrings.declareGrid( ` [width]="width" [height]="height" [paging]="'true'" [perPage]="perPage" [primaryKey]="'ProductID'"`, - '', ColumnDefinitions.productBasicNumberID) + '', ColumnDefinitions.productBasic) }) export class GridWithUndefinedDataComponent implements OnInit { @ViewChild(IgxGridComponent, { static: true })