From 03882026b07646f041f12f409eafed6d7bf6bd72 Mon Sep 17 00:00:00 2001 From: Rafael Santana Date: Wed, 13 Dec 2017 19:03:32 -0300 Subject: [PATCH] fix(paginator): coerce string values (#8946) --- src/lib/paginator/paginator.spec.ts | 34 +++++++++++++++++++++++++---- src/lib/paginator/paginator.ts | 9 ++++---- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/lib/paginator/paginator.spec.ts b/src/lib/paginator/paginator.spec.ts index 234b5f32808..5bbfb3edcbe 100644 --- a/src/lib/paginator/paginator.spec.ts +++ b/src/lib/paginator/paginator.spec.ts @@ -23,6 +23,7 @@ describe('MatPaginator', () => { MatPaginatorWithoutPageSizeApp, MatPaginatorWithoutOptionsApp, MatPaginatorWithoutInputsApp, + MatPaginatorWithStringValues ], providers: [MatPaginatorIntl] }).compileComponents(); @@ -251,6 +252,18 @@ describe('MatPaginator', () => { fixture.detectChanges(); expect(fixture.nativeElement.querySelector('.mat-select')).toBeNull(); }); + + it('should handle the number inputs being passed in as strings', () => { + const withStringFixture = TestBed.createComponent(MatPaginatorWithStringValues); + const withStringPaginator = withStringFixture.componentInstance.paginator; + + withStringFixture.detectChanges(); + + expect(withStringPaginator.pageIndex).toEqual(0); + expect(withStringPaginator.length).toEqual(100); + expect(withStringPaginator.pageSize).toEqual(10); + expect(withStringPaginator.pageSizeOptions).toEqual([5, 10, 25, 100]); + }); }); function getPreviousButton(fixture: ComponentFixture) { @@ -264,10 +277,10 @@ function getNextButton(fixture: ComponentFixture) { @Component({ template: ` + [pageSize]="pageSize" + [pageSizeOptions]="pageSizeOptions" + [length]="length" + (page)="latestPageEvent = $event"> `, }) @@ -312,3 +325,16 @@ class MatPaginatorWithoutPageSizeApp { class MatPaginatorWithoutOptionsApp { @ViewChild(MatPaginator) paginator: MatPaginator; } + +@Component({ + template: ` + + + ` + }) +class MatPaginatorWithStringValues { + @ViewChild(MatPaginator) paginator: MatPaginator; +} diff --git a/src/lib/paginator/paginator.ts b/src/lib/paginator/paginator.ts index 7f4b4fb6061..3739a5614fa 100644 --- a/src/lib/paginator/paginator.ts +++ b/src/lib/paginator/paginator.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ +import {coerceNumberProperty} from '@angular/cdk/coercion'; import { ChangeDetectionStrategy, ChangeDetectorRef, @@ -64,7 +65,7 @@ export class MatPaginator implements OnInit, OnDestroy { @Input() get pageIndex(): number { return this._pageIndex; } set pageIndex(pageIndex: number) { - this._pageIndex = pageIndex; + this._pageIndex = coerceNumberProperty(pageIndex); this._changeDetectorRef.markForCheck(); } _pageIndex: number = 0; @@ -73,7 +74,7 @@ export class MatPaginator implements OnInit, OnDestroy { @Input() get length(): number { return this._length; } set length(length: number) { - this._length = length; + this._length = coerceNumberProperty(length); this._changeDetectorRef.markForCheck(); } _length: number = 0; @@ -82,7 +83,7 @@ export class MatPaginator implements OnInit, OnDestroy { @Input() get pageSize(): number { return this._pageSize; } set pageSize(pageSize: number) { - this._pageSize = pageSize; + this._pageSize = coerceNumberProperty(pageSize); this._updateDisplayedPageSizeOptions(); } private _pageSize: number; @@ -91,7 +92,7 @@ export class MatPaginator implements OnInit, OnDestroy { @Input() get pageSizeOptions(): number[] { return this._pageSizeOptions; } set pageSizeOptions(pageSizeOptions: number[]) { - this._pageSizeOptions = pageSizeOptions; + this._pageSizeOptions = (pageSizeOptions || []).map(p => coerceNumberProperty(p)); this._updateDisplayedPageSizeOptions(); } private _pageSizeOptions: number[] = [];