| 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; |
| } |
| } |