1 import { Component, EventEmitter, Input, Output } from '@angular/core';
4 selector: 'cd-table-pagination',
5 templateUrl: './table-pagination.component.html',
6 styleUrls: ['./table-pagination.component.scss']
8 export class TablePaginationComponent {
15 set size(value: number) {
17 this.pages = this.calcPages();
25 set page(value: number) {
34 set count(value: number) {
42 get totalPages(): number {
43 const count = this.size < 1 ? 1 : Math.ceil(this._count / this._size);
44 return Math.max(count || 0, 1);
47 @Output() pageChange: EventEmitter<any> = new EventEmitter();
49 canPrevious(): boolean {
50 return this._page > 1;
54 return this._page < this.totalPages;
58 this.selectPage(this._page - 1);
62 this.selectPage(this._page + 1);
65 selectPage(page: number): void {
66 if (page > 0 && page <= this.totalPages && page !== this.page) {
68 this.pageChange.emit({
71 } else if (page > 0 && page >= this.totalPages) {
72 this._page = this.totalPages;
73 this.pageChange.emit({
79 calcPages(page?: number): any[] {
82 let endPage = this.totalPages;
84 const isMaxSized = maxSize < this.totalPages;
86 page = page || this.page;
89 startPage = page - Math.floor(maxSize / 2);
90 endPage = page + Math.floor(maxSize / 2);
94 endPage = Math.min(startPage + maxSize - 1, this.totalPages);
95 } else if (endPage > this.totalPages) {
96 startPage = Math.max(this.totalPages - maxSize + 1, 1);
97 endPage = this.totalPages;
101 for (let num = startPage; num <= endPage; num++) {
104 text: <string>(<any>num)