blob: b144389a30f09d9085168112ed0c47a892d250db [file] [log] [blame]
import { PageEvent } from '@app/shared/models/PageEvent';
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-paginator',
templateUrl: './paginator.component.html',
styleUrls: ['./paginator.component.scss']
})
export class PaginatorComponent implements OnInit {
@Input()
length: number;
@Input()
pageSize: number;
private _totalPages: number;
@Input()
public set totalPages(v: number) {
this._totalPages = v;
this.init();
}
public get totalPages(): number {
return this._totalPages;
}
@Input()
public currentPage: PageEvent;
@Input()
subscribe: number;
@Input()
hidePageSize: boolean;
@Output()
page: EventEmitter<PageEvent> = new EventEmitter();
public pageEventItems: PageEvent[];
public activeEventItem: PageEvent;
public currentPageIndex: number = 0;
/**
* Creates an instance of PaginatorComponent.
*
* @author Martin Gardyan <martin.gardyan@pta.de>
* @memberof PaginatorComponent
*/
constructor() { }
ngOnInit() {
}
private init() {
this.pageEventItems = new Array<PageEvent>();
for (let index = 1; index <= this._totalPages; ++index) {
this.pageEventItems.push({ pageIndex: index });
}
if (this._totalPages > 0) {
this._setActivePage(this.pageEventItems[0]);
}
}
public setSelectedPage(pageEvent: PageEvent): void {
this._setActivePage(pageEvent);
this.page.emit(pageEvent);
}
public setNextPage(): void {
if (this.isLastPage()) {
return;
}
const nextActiveItem = this.pageEventItems[this.currentPageIndex + 1];
this.setSelectedPage(nextActiveItem);
}
public setPreviousPage(): void {
if (this.isFirstPage()) {
return;
}
const previousActiveItem = this.pageEventItems[this.currentPageIndex - 1];
this.setSelectedPage(previousActiveItem);
}
public isLastPage(): boolean {
return this.currentPageIndex === this.pageEventItems.length - 1;
}
public isFirstPage(): boolean {
return this.currentPageIndex === 0;
}
private _setActivePage(pageEvent: PageEvent): void {
this.currentPageIndex = this.pageEventItems.indexOf(pageEvent);
this.activeEventItem = pageEvent;
}
}