File

projects/rebirth-ng/src/lib/pager/pager.component.ts

Implements

OnChanges

Metadata

changeDetection ChangeDetectionStrategy.OnPush
exportAs pager
selector re-pager
styleUrls pager.component.scss
templateUrl ./re-pager.component.html

Index

Properties
Methods
Inputs
Outputs

Constructor

constructor(rebirthNGConfig: RebirthNGConfig)
Parameters :
Name Type Optional
rebirthNGConfig RebirthNGConfig no

Inputs

aligned

Type: boolean

cssClass

Type: string

disable

Default value: false

nextText

Type: string

pageIndex

Default value: 1

pageSize

Type: number

previousText

Type: string

total

Default value: 0

Outputs

pageIndexChange $event type: EventEmitter

Methods

Private getTotalPage
getTotalPage()
Returns : any
hasNext
hasNext()
Returns : boolean
hasPrev
hasPrev()
Returns : boolean
next
next()
Returns : void
ngOnChanges
ngOnChanges(changes: SimpleChanges)
Parameters :
Name Type Optional
changes SimpleChanges no
Returns : void
onPageIndexChange
onPageIndexChange(pageIndex: number)
Parameters :
Name Type Optional
pageIndex number no
Returns : void
prev
prev()
Returns : void

Properties

Static EFFECT_PAGE_RANGE_KEYS
EFFECT_PAGE_RANGE_KEYS: []
Type : []
Default value : ['total', 'pageSize', 'pageIndex']
totalPage
totalPage: number
Type : number
Default value : 0
import {
  Component, ChangeDetectionStrategy, Input, Output, EventEmitter, OnChanges,
  SimpleChanges
} from '@angular/core';
import { RebirthNGConfig } from '../rebirth-ng.config';

@Component({
  selector: 're-pager',
  templateUrl: './re-pager.component.html',
  styleUrls: ['./pager.component.scss'],
  exportAs: 'pager',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class PagerComponent implements OnChanges {
  static EFFECT_PAGE_RANGE_KEYS = ['total', 'pageSize', 'pageIndex'];
  @Input() total = 0;
  @Input() pageSize: number;
  @Input() pageIndex = 1;
  @Output() pageIndexChange = new EventEmitter<number>();
  @Input() aligned: boolean;
  @Input() previousText: string;
  @Input() nextText: string;
  @Input() disable = false;
  @Input() cssClass: string;
  totalPage = 0;

  constructor(private rebirthNGConfig: RebirthNGConfig) {
    this.aligned = rebirthNGConfig.pager.aligned;
    this.pageSize = rebirthNGConfig.pager.pageSize;
    this.previousText = rebirthNGConfig.pager.button.previous;
    this.nextText = rebirthNGConfig.pager.button.next;
  }

  prev(): void {
    if (this.hasPrev()) {
      this.onPageIndexChange(this.pageIndex - 1);
    }
  }

  next(): void {
    if (this.hasNext()) {
      this.onPageIndexChange(this.pageIndex + 1);
    }
  }

  onPageIndexChange(pageIndex: number) {
    if (this.pageIndex !== pageIndex) {
      this.pageIndexChange.emit(pageIndex);
    }
  }


  hasPrev(): boolean {
    return this.pageIndex > 1;
  }

  hasNext(): boolean {
    return this.pageIndex < this.totalPage;
  }

  private getTotalPage() {
    return Math.ceil(this.total / this.pageSize);
  }


  ngOnChanges(changes: SimpleChanges): void {
    const shouldUpdateRanges = PagerComponent.EFFECT_PAGE_RANGE_KEYS.some(key => !!changes[key]);
    if (shouldUpdateRanges) {
      this.totalPage = this.getTotalPage();
      this.pageIndex = Math.max(Math.min(this.pageIndex, this.totalPage), 1);
    }
  }
}
<nav aria-label="pager" class="{{cssClass}}">
  <ul class="pager">
    <li [ngClass]="{'previous': aligned, 'disabled': disable && !hasPrev()}" *ngIf="disable || hasPrev()">
      <a (click)="prev()">{{ previousText}}</a></li>
    <li [ngClass]="{'next': aligned, 'disabled': disable && !hasNext()}" *ngIf="disable || hasNext()">
      <a (click)="next()">{{ nextText}}</a></li>
  </ul>
</nav>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""