angular2-data-table
Version:
angular2-data-table is a Angular2 component for presenting large and complex data.
154 lines (130 loc) • 3.25 kB
text/typescript
import {
Component, Input, Output, EventEmitter, ChangeDetectionStrategy
} from '@angular/core';
export class DataTablePagerComponent {
pagerLeftArrowIcon: string;
pagerRightArrowIcon: string;
pagerPreviousIcon: string;
pagerNextIcon: string;
set size(val: number) {
this._size = val;
this.pages = this.calcPages();
}
get size(): number {
return this._size;
}
set count(val: number) {
this._count = val;
this.pages = this.calcPages();
}
get count(): number {
return this._count;
}
set page(val: number) {
this._page = val;
this.pages = this.calcPages();
}
get page(): number {
return this._page;
}
get totalPages(): number {
const count = this.size < 1 ? 1 : Math.ceil(this.count / this.size);
return Math.max(count || 0, 1);
}
change: EventEmitter<any> = new EventEmitter();
_count: number = 0;
_page: number = 1;
_size: number = 0;
pages: any;
canPrevious(): boolean {
return this.page > 1;
}
canNext(): boolean {
return this.page < this.totalPages;
}
prevPage(): void {
this.selectPage(this.page - 1);
}
nextPage(): void {
this.selectPage(this.page + 1);
}
selectPage(page: number): void {
if (page > 0 && page <= this.totalPages && page !== this.page) {
this.page = page;
this.change.emit({
page
});
}
}
calcPages(page?: number): any[] {
let pages = [];
let startPage = 1;
let endPage = this.totalPages;
let maxSize = 5;
const isMaxSized = maxSize < this.totalPages;
page = page || this.page;
if (isMaxSized) {
startPage = ((Math.ceil(page / maxSize) - 1) * maxSize) + 1;
endPage = Math.min(startPage + maxSize - 1, this.totalPages);
}
for (let num = startPage; num <= endPage; num++) {
pages.push({
number: num,
text: <string><any>num
});
}
return pages;
}
}