File
Implements
Index
Properties
|
|
Methods
|
|
Inputs
|
|
dataSource
|
Type : MatTableDataSource<E>
|
|
idForSavingPagination
|
Type : string
|
|
Methods
onPaginateChange
|
onPaginateChange(event: PageEvent)
|
|
Parameters :
Name |
Type |
Optional |
event |
PageEvent
|
No
|
|
Readonly
LOCAL_STORAGE_KEY
|
Type : string
|
Default value : "PAGINATION-"
|
|
pageSize
|
Type : number
|
Default value : 10
|
|
Readonly
pageSizeOptions
|
Type : []
|
Default value : [10, 20, 50, 100]
|
|
paginator
|
Type : MatPaginator
|
Decorators :
@ViewChild(MatPaginator, {static: true})
|
|
import {
Component,
Input,
OnChanges,
OnInit,
SimpleChanges,
ViewChild,
} from "@angular/core";
import {
MatPaginator,
MatPaginatorModule,
PageEvent,
} from "@angular/material/paginator";
import { MatTableDataSource } from "@angular/material/table";
@Component({
selector: "app-list-paginator",
templateUrl: "./list-paginator.component.html",
styleUrls: ["./list-paginator.component.scss"],
imports: [MatPaginatorModule],
})
export class ListPaginatorComponent<E> implements OnChanges, OnInit {
readonly LOCAL_STORAGE_KEY = "PAGINATION-";
readonly pageSizeOptions = [10, 20, 50, 100];
@Input() dataSource: MatTableDataSource<E>;
@Input() idForSavingPagination: string;
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
pageSize = 10;
ngOnChanges(changes: SimpleChanges): void {
if (changes.hasOwnProperty("idForSavingPagination")) {
this.applyUserPaginationSettings();
}
}
ngOnInit() {
this.dataSource.paginator = this.paginator;
}
onPaginateChange(event: PageEvent) {
this.pageSize = event.pageSize;
this.savePageSize(this.pageSize);
}
private applyUserPaginationSettings() {
const savedSize = this.getSavedPageSize();
this.pageSize = savedSize && savedSize !== -1 ? savedSize : this.pageSize;
}
private getSavedPageSize(): number {
return Number.parseInt(
localStorage.getItem(this.LOCAL_STORAGE_KEY + this.idForSavingPagination),
);
}
private savePageSize(size: number) {
localStorage.setItem(
this.LOCAL_STORAGE_KEY + this.idForSavingPagination,
size?.toString(),
);
}
}
<mat-paginator
(page)="onPaginateChange($event)"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
[showFirstLastButtons]="true"
></mat-paginator>
@use "variables/sizes";
/* The paginator is usually a little smaller than this */
$approx-width-paginator: 450px;
$slider-padding-all: 16px;
:host {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
background-color: white;
@media all and (max-width: $approx-width-paginator) {
flex-direction: column-reverse;
align-items: flex-start;
}
}
.slider {
padding-left: sizes.$regular;
font-size: small;
@media all and (max-width: $approx-width-paginator) {
padding-bottom: sizes.$regular;
}
}
Legend
Html element with directive