@appcarvers/ngx-unitelist
Version:
This library is for Angular (2+) projects to build a list from passed data and provide pagination and filters and their callbacks after proper configuration.
99 lines (84 loc) • 2.55 kB
text/typescript
import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';
export class UnitepaginationComponent implements OnInit {
_totalPages;
_totalPageCount;
startPage;
endPage;
endPointStart;
endPointEnd;
showPagination;
currentPage: number;
set totalPages(value){
this._totalPageCount = value;
this._totalPages = Array(value).fill(1); // [0,1,2,3,4]
this.setTotalPages();
};
pageChanged = new EventEmitter();
constructor() { }
ngOnInit() {
}
pageChange(newPage){
var thisNewPage = newPage;
if(typeof newPage === 'number')
{
// just because the pagination value starts from 0 and not 1 :D
thisNewPage++;
}
else
{
switch(newPage){
case 'first':
thisNewPage = 1;
break;
case 'prev' :
thisNewPage = !(this.currentPage <= 1) ? this.currentPage -1 : this.currentPage;
break;
case 'nxt' :
thisNewPage = !(this.currentPage >= this._totalPageCount) ? thisNewPage = this.currentPage + 1 : this.currentPage;
break;
case 'last' :
thisNewPage = this._totalPageCount;
break;
}
}
if(thisNewPage != this.currentPage)
{
var obj = { currentPage : this.currentPage, newPage : thisNewPage };
this.pageChanged.emit(obj);
}
this.currentPage = thisNewPage;
this.setTotalPages();
}
setTotalPages()
{
// one page or less so don't show
this.showPagination = this._totalPageCount <= 1 ? false : true;
if (this._totalPageCount <= 10)
{
// less than 10 total pages so show all
this.startPage = 0;
this.endPage = this._totalPageCount - 1;
}
else
{
// more than 10 total pages so calculate start and end pages
if (this.currentPage <= 6) {
this.startPage = 1 - 1;
this.endPage = 10 - 1;
} else if (this.currentPage + 4 >= this._totalPageCount) {
this.startPage = this._totalPageCount - 9 - 1 ;
this.endPage = this._totalPageCount - 1;
} else {
this.startPage = this.currentPage - 5 - 1;
this.endPage = this.currentPage + 4 - 1;
}
}
this.endPointStart = this.startPage - 1;
this.endPointEnd = this.endPage + 1;
}
}