Skip to content

Commit 9e0a2ad

Browse files
committed
fix(material/paginator): allow readonly options
closes #24050
1 parent a52da04 commit 9e0a2ad

File tree

5 files changed

+46
-10
lines changed

5 files changed

+46
-10
lines changed

src/material-experimental/mdc-paginator/paginator.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,13 @@ describe('MDC-based MatPaginator', () => {
511511
const hostElement = fixture.nativeElement.querySelector('mat-paginator');
512512
expect(hostElement.getAttribute('role')).toBe('group');
513513
});
514+
515+
it('should handle the page size options input being passed in as readonly array', () => {
516+
const fixture = createComponent(MatPaginatorWithReadonlyOptions);
517+
fixture.detectChanges();
518+
519+
expect(fixture.componentInstance.paginator._displayedPageSizeOptions).toEqual([5, 10, 25, 100]);
520+
});
514521
});
515522

516523
function getPreviousButton(fixture: ComponentFixture<any>) {
@@ -600,3 +607,14 @@ class MatPaginatorWithoutOptionsApp {
600607
class MatPaginatorWithStringValues {
601608
@ViewChild(MatPaginator) paginator: MatPaginator;
602609
}
610+
611+
@Component({
612+
template: `
613+
<mat-paginator [pageSizeOptions]="pageSizeOptions">
614+
</mat-paginator>
615+
`,
616+
})
617+
class MatPaginatorWithReadonlyOptions {
618+
@ViewChild(MatPaginator) paginator: MatPaginator;
619+
pageSizeOptions: readonly number[] = [5, 10, 25, 100];
620+
}

src/material-experimental/mdc-paginator/paginator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export interface MatPaginatorDefaultOptions {
2828
pageSize?: number;
2929

3030
/** The set of provided page size options to display to the user. */
31-
pageSizeOptions?: number[];
31+
pageSizeOptions?: readonly number[];
3232

3333
/** Whether to hide the page size selection UI from the user. */
3434
hidePageSize?: boolean;

src/material/paginator/paginator.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,13 @@ describe('MatPaginator', () => {
506506
const hostElement = fixture.nativeElement.querySelector('mat-paginator');
507507
expect(hostElement.getAttribute('role')).toBe('group');
508508
});
509+
510+
it('should handle the page size options input being passed in as readonly array', () => {
511+
const fixture = createComponent(MatPaginatorWithReadonlyOptions);
512+
fixture.detectChanges();
513+
514+
expect(fixture.componentInstance.paginator._displayedPageSizeOptions).toEqual([5, 10, 25, 100]);
515+
});
509516
});
510517

511518
function getPreviousButton(fixture: ComponentFixture<any>) {
@@ -595,3 +602,14 @@ class MatPaginatorWithoutOptionsApp {
595602
class MatPaginatorWithStringValues {
596603
@ViewChild(MatPaginator) paginator: MatPaginator;
597604
}
605+
606+
@Component({
607+
template: `
608+
<mat-paginator [pageSizeOptions]="pageSizeOptions">
609+
</mat-paginator>
610+
`,
611+
})
612+
class MatPaginatorWithReadonlyOptions {
613+
@ViewChild(MatPaginator) paginator: MatPaginator;
614+
pageSizeOptions: readonly number[] = [5, 10, 25, 100];
615+
}

src/material/paginator/paginator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export interface MatPaginatorDefaultOptions {
6868
pageSize?: number;
6969

7070
/** The set of provided page size options to display to the user. */
71-
pageSizeOptions?: number[];
71+
pageSizeOptions?: readonly number[];
7272

7373
/** Whether to hide the page size selection UI from the user. */
7474
hidePageSize?: boolean;
@@ -97,7 +97,7 @@ const _MatPaginatorMixinBase = mixinDisabled(mixinInitialized(class {}));
9797
export abstract class _MatPaginatorBase<
9898
O extends {
9999
pageSize?: number;
100-
pageSizeOptions?: number[];
100+
pageSizeOptions?: readonly number[];
101101
hidePageSize?: boolean;
102102
showFirstLastButtons?: boolean;
103103
},
@@ -146,14 +146,14 @@ export abstract class _MatPaginatorBase<
146146

147147
/** The set of provided page size options to display to the user. */
148148
@Input()
149-
get pageSizeOptions(): number[] {
149+
get pageSizeOptions(): readonly number[] {
150150
return this._pageSizeOptions;
151151
}
152-
set pageSizeOptions(value: number[]) {
152+
set pageSizeOptions(value: readonly number[]) {
153153
this._pageSizeOptions = (value || []).map(p => coerceNumberProperty(p));
154154
this._updateDisplayedPageSizeOptions();
155155
}
156-
private _pageSizeOptions: number[] = [];
156+
private _pageSizeOptions: readonly number[] = [];
157157

158158
/** Whether to hide the page size selection UI from the user. */
159159
@Input()

tools/public_api_guard/material/paginator.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export class MatPaginator extends _MatPaginatorBase<MatPaginatorDefaultOptions>
5252
// @public
5353
export abstract class _MatPaginatorBase<O extends {
5454
pageSize?: number;
55-
pageSizeOptions?: number[];
55+
pageSizeOptions?: readonly number[];
5656
hidePageSize?: boolean;
5757
showFirstLastButtons?: boolean;
5858
}> extends _MatPaginatorMixinBase implements OnInit, OnDestroy, CanDisable, HasInitialized {
@@ -94,8 +94,8 @@ export abstract class _MatPaginatorBase<O extends {
9494
set pageIndex(value: number);
9595
get pageSize(): number;
9696
set pageSize(value: number);
97-
get pageSizeOptions(): number[];
98-
set pageSizeOptions(value: number[]);
97+
get pageSizeOptions(): readonly number[];
98+
set pageSizeOptions(value: readonly number[]);
9999
_previousButtonsDisabled(): boolean;
100100
previousPage(): void;
101101
get showFirstLastButtons(): boolean;
@@ -111,7 +111,7 @@ export interface MatPaginatorDefaultOptions {
111111
formFieldAppearance?: MatFormFieldAppearance;
112112
hidePageSize?: boolean;
113113
pageSize?: number;
114-
pageSizeOptions?: number[];
114+
pageSizeOptions?: readonly number[];
115115
showFirstLastButtons?: boolean;
116116
}
117117

0 commit comments

Comments
 (0)