Skip to content

Commit 0388202

Browse files
rafaelss95andrewseguin
authored andcommitted
fix(paginator): coerce string values (#8946)
1 parent c3e267f commit 0388202

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

src/lib/paginator/paginator.spec.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('MatPaginator', () => {
2323
MatPaginatorWithoutPageSizeApp,
2424
MatPaginatorWithoutOptionsApp,
2525
MatPaginatorWithoutInputsApp,
26+
MatPaginatorWithStringValues
2627
],
2728
providers: [MatPaginatorIntl]
2829
}).compileComponents();
@@ -251,6 +252,18 @@ describe('MatPaginator', () => {
251252
fixture.detectChanges();
252253
expect(fixture.nativeElement.querySelector('.mat-select')).toBeNull();
253254
});
255+
256+
it('should handle the number inputs being passed in as strings', () => {
257+
const withStringFixture = TestBed.createComponent(MatPaginatorWithStringValues);
258+
const withStringPaginator = withStringFixture.componentInstance.paginator;
259+
260+
withStringFixture.detectChanges();
261+
262+
expect(withStringPaginator.pageIndex).toEqual(0);
263+
expect(withStringPaginator.length).toEqual(100);
264+
expect(withStringPaginator.pageSize).toEqual(10);
265+
expect(withStringPaginator.pageSizeOptions).toEqual([5, 10, 25, 100]);
266+
});
254267
});
255268

256269
function getPreviousButton(fixture: ComponentFixture<any>) {
@@ -264,10 +277,10 @@ function getNextButton(fixture: ComponentFixture<any>) {
264277
@Component({
265278
template: `
266279
<mat-paginator [pageIndex]="pageIndex"
267-
[pageSize]="pageSize"
268-
[pageSizeOptions]="pageSizeOptions"
269-
[length]="length"
270-
(page)="latestPageEvent = $event">
280+
[pageSize]="pageSize"
281+
[pageSizeOptions]="pageSizeOptions"
282+
[length]="length"
283+
(page)="latestPageEvent = $event">
271284
</mat-paginator>
272285
`,
273286
})
@@ -312,3 +325,16 @@ class MatPaginatorWithoutPageSizeApp {
312325
class MatPaginatorWithoutOptionsApp {
313326
@ViewChild(MatPaginator) paginator: MatPaginator;
314327
}
328+
329+
@Component({
330+
template: `
331+
<mat-paginator pageIndex="0"
332+
pageSize="10"
333+
[pageSizeOptions]="['5', '10', '25', '100']"
334+
length="100">
335+
</mat-paginator>
336+
`
337+
})
338+
class MatPaginatorWithStringValues {
339+
@ViewChild(MatPaginator) paginator: MatPaginator;
340+
}

src/lib/paginator/paginator.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9+
import {coerceNumberProperty} from '@angular/cdk/coercion';
910
import {
1011
ChangeDetectionStrategy,
1112
ChangeDetectorRef,
@@ -64,7 +65,7 @@ export class MatPaginator implements OnInit, OnDestroy {
6465
@Input()
6566
get pageIndex(): number { return this._pageIndex; }
6667
set pageIndex(pageIndex: number) {
67-
this._pageIndex = pageIndex;
68+
this._pageIndex = coerceNumberProperty(pageIndex);
6869
this._changeDetectorRef.markForCheck();
6970
}
7071
_pageIndex: number = 0;
@@ -73,7 +74,7 @@ export class MatPaginator implements OnInit, OnDestroy {
7374
@Input()
7475
get length(): number { return this._length; }
7576
set length(length: number) {
76-
this._length = length;
77+
this._length = coerceNumberProperty(length);
7778
this._changeDetectorRef.markForCheck();
7879
}
7980
_length: number = 0;
@@ -82,7 +83,7 @@ export class MatPaginator implements OnInit, OnDestroy {
8283
@Input()
8384
get pageSize(): number { return this._pageSize; }
8485
set pageSize(pageSize: number) {
85-
this._pageSize = pageSize;
86+
this._pageSize = coerceNumberProperty(pageSize);
8687
this._updateDisplayedPageSizeOptions();
8788
}
8889
private _pageSize: number;
@@ -91,7 +92,7 @@ export class MatPaginator implements OnInit, OnDestroy {
9192
@Input()
9293
get pageSizeOptions(): number[] { return this._pageSizeOptions; }
9394
set pageSizeOptions(pageSizeOptions: number[]) {
94-
this._pageSizeOptions = pageSizeOptions;
95+
this._pageSizeOptions = (pageSizeOptions || []).map(p => coerceNumberProperty(p));
9596
this._updateDisplayedPageSizeOptions();
9697
}
9798
private _pageSizeOptions: number[] = [];

0 commit comments

Comments
 (0)