File

src/app/core/common-components/entities-table/list-paginator/list-paginator.component.ts

Implements

OnChanges OnInit

Metadata

Index

Properties
Methods
Inputs

Inputs

dataSource
Type : MatTableDataSource<E>
idForSavingPagination
Type : string

Methods

onPaginateChange
onPaginateChange(event: PageEvent)
Parameters :
Name Type Optional
event PageEvent No
Returns : void

Properties

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>

./list-paginator.component.scss

@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
Component
Html element with directive

results matching ""

    No results matching ""