blob: 660b05638ab3641eb5f77c48cea56670d5e128da [file] [log] [blame]
{"version":3,"sources":["ng://@covalent/core/paging/paging-bar.component.ts","ng://@covalent/core/paging/paging.module.ts"],"names":["TdPagingBarComponent","Object","defineProperty","prototype","this","_pageLinkCount","pageLinkCount","coerceNumberProperty","_calculatePageLinks","_changeDetectorRef","markForCheck","_pageSize","pageSize","_page","_initialized","_handleOnChange","_total","total","_calculateRows","_pageLinks","_toRow","_fromRow","Math","ceil","_dir","dir","ngOnInit","initialPage","navigateToPage","page","maxPage","floor","firstPage","prevPage","nextPage","lastPage","isMinPage","isMaxPage","top","_hitEnd","_hitStart","actualPageLinkCount","middlePageLinks","x","event","fromRow","toRow","onChange","emit","Component","args","changeDetection","ChangeDetectionStrategy","OnPush","selector","template","Dir","decorators","type","Optional","ChangeDetectorRef","Input","Output","firstLast","EventEmitter","CovalentPagingModule","NgModule","imports","CommonModule","MatIconModule","MatButtonModule","declarations","exports"],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, Optional, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Dir } from '@angular/cdk/bidi';\n\nexport interface IPageChangeEvent {\n page: number;\n maxPage: number;\n pageSize: number;\n total: number;\n fromRow: number;\n toRow: number;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'td-paging-bar',\n templateUrl: './paging-bar.component.html',\n styleUrls: ['./paging-bar.component.scss' ],\n})\nexport class TdPagingBarComponent implements OnInit {\n\n private _pageSize: number = 50;\n private _total: number = 0;\n private _page: number = 1;\n private _fromRow: number = 1;\n private _toRow: number = 1;\n private _initialized: boolean = false;\n private _pageLinks: number[] = [];\n private _pageLinkCount: number = 0;\n // special case when 2 pageLinks, detect when hit end of pages so can lead in correct direction\n private _hitEnd: boolean = false;\n // special case when 2 pageLinks, detect when hit start of pages so can lead in correct direction\n private _hitStart: boolean = false;\n\n /**\n * firstLast?: boolean\n * Shows or hides the first and last page buttons of the paging bar. Defaults to 'false'\n */\n @Input('firstLast') firstLast: boolean = true;\n\n /**\n * initialPage?: number\n * Sets starting page for the paging bar. Defaults to '1'\n */\n @Input('initialPage') initialPage: number = 1;\n\n /**\n * pageLinkCount?: number\n * Amount of page navigation links for the paging bar. Defaults to '0'\n */\n @Input('pageLinkCount')\n set pageLinkCount(pageLinkCount: number) {\n this._pageLinkCount = coerceNumberProperty(pageLinkCount);\n this._calculatePageLinks();\n this._changeDetectorRef.markForCheck();\n }\n get pageLinkCount(): number {\n return this._pageLinkCount;\n }\n\n /**\n * pageSize?: number\n * Selected page size for the pagination. Defaults 50.\n */\n @Input('pageSize')\n set pageSize(pageSize: number) {\n this._pageSize = coerceNumberProperty(pageSize);\n this._page = 1;\n if (this._initialized) {\n this._handleOnChange();\n }\n this._changeDetectorRef.markForCheck();\n }\n get pageSize(): number {\n return this._pageSize;\n }\n\n /**\n * total: number\n * Total rows for the pagination.\n */\n @Input('total')\n set total(total: number) {\n this._total = coerceNumberProperty(total);\n this._calculateRows();\n this._calculatePageLinks();\n this._changeDetectorRef.markForCheck();\n }\n get total(): number {\n return this._total;\n }\n\n /**\n * pageLinks: number[]\n * Returns the pageLinks in an array\n */\n get pageLinks(): number[] {\n return this._pageLinks;\n }\n\n /**\n * range: string\n * Returns the range of the rows.\n */\n get range(): string {\n return `${!this._toRow ? 0 : this._fromRow}-${this._toRow}`;\n }\n\n /**\n * page: number\n * Returns the current page.\n */\n get page(): number {\n return this._page;\n }\n\n /**\n * page: number\n * Returns the max page for the current pageSize and total.\n */\n get maxPage(): number {\n return Math.ceil(this._total / this._pageSize);\n }\n\n /**\n * change?: function\n * Method to be executed when page size changes or any button is clicked in the paging bar.\n * Emits an [IPageChangeEvent] implemented object.\n */\n @Output('change') onChange: EventEmitter<IPageChangeEvent> = new EventEmitter<IPageChangeEvent>();\n\n get isRTL(): boolean {\n if (this._dir) {\n return this._dir.dir === 'rtl';\n }\n return false;\n }\n\n constructor(@Optional() private _dir: Dir,\n private _changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this._page = coerceNumberProperty(this.initialPage);\n this._calculateRows();\n this._calculatePageLinks();\n this._initialized = true;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * navigateToPage?: function\n * Navigates to a specific valid page. Returns 'true' if page is valid, else 'false'.\n */\n navigateToPage(page: number): boolean {\n if (page === 1 || (page >= 1 && page <= this.maxPage)) {\n this._page = coerceNumberProperty(Math.floor(page));\n this._handleOnChange();\n return true;\n }\n return false;\n }\n\n /**\n * firstPage?: function\n * Navigates to the first page. Returns 'true' if page is valid, else 'false'.\n */\n firstPage(): boolean {\n return this.navigateToPage(1);\n }\n\n /**\n * prevPage?: function\n * Navigates to the previous page. Returns 'true' if page is valid, else 'false'.\n */\n prevPage(): boolean {\n return this.navigateToPage(this._page - 1);\n }\n\n /**\n * nextPage?: function\n * Navigates to the next page. Returns 'true' if page is valid, else 'false'.\n */\n nextPage(): boolean {\n return this.navigateToPage(this._page + 1);\n }\n\n /**\n * lastPage?: function\n * Navigates to the last page. Returns 'true' if page is valid, else 'false'.\n */\n lastPage(): boolean {\n return this.navigateToPage(this.maxPage);\n }\n\n isMinPage(): boolean {\n return this._page <= 1;\n }\n\n isMaxPage(): boolean {\n return this._page >= this.maxPage;\n }\n\n private _calculateRows(): void {\n let top: number = (this._pageSize * this._page);\n this._fromRow = (this._pageSize * (this._page - 1)) + 1;\n this._toRow = this._total > top ? top : this._total;\n }\n\n /**\n * _calculatePageLinks?: function\n * Calculates the page links that should be shown to the user based on the current state of the paginator\n */\n private _calculatePageLinks(): void {\n // special case when 2 pageLinks, detect when hit end of pages so can lead in correct direction\n if (this.isMaxPage()) {\n this._hitEnd = true;\n this._hitStart = false;\n }\n // special case when 2 pageLinks, detect when hit start of pages so can lead in correct direction\n if (this.isMinPage()) {\n this._hitEnd = false;\n this._hitStart = true;\n }\n // If the pageLinkCount goes above max possible pages based on perpage setting then reset it to maxPage\n let actualPageLinkCount: number = this.pageLinkCount;\n if (this.pageLinkCount > this.maxPage) {\n actualPageLinkCount = this.maxPage;\n }\n // reset the pageLinks array\n this._pageLinks = [];\n // fill in the array with the pageLinks based on the current selected page\n let middlePageLinks: number = Math.floor(actualPageLinkCount / 2);\n for (let x: number = 0; x < actualPageLinkCount; x++) {\n // don't go past the maxPage in the pageLinks\n // have to handle even and odd pageLinkCounts differently so can still lead to the next numbers\n if ((actualPageLinkCount % 2 === 0 && (this.page + middlePageLinks > this.maxPage)) ||\n (actualPageLinkCount % 2 !== 0 && (this.page + middlePageLinks >= this.maxPage))) {\n this._pageLinks[x] = this.maxPage - (actualPageLinkCount - (x + 1));\n // if the selected page is after the middle then set that page as middle and get the correct balance on left and right\n // special handling when there are only 2 pageLinks to just drop to next if block so can lead to next numbers when moving to right\n // when moving to the left then go into this block\n } else if ((actualPageLinkCount > 2 || actualPageLinkCount <= 2 && this._hitEnd) && (this.page - middlePageLinks) > 0) {\n this._pageLinks[x] = (this.page - middlePageLinks) + x;\n // if the selected page is before the middle then set the pages based on the x index leading up to and after selected page\n } else if ((this.page - middlePageLinks) <= 0) {\n this._pageLinks[x] = x + 1;\n // other wise just set the array in order starting from the selected page\n } else {\n this._pageLinks[x] = this.page + x;\n }\n }\n }\n\n private _handleOnChange(): void {\n this._calculateRows();\n this._calculatePageLinks();\n let event: IPageChangeEvent = {\n page: this._page,\n maxPage: this.maxPage,\n pageSize: this._pageSize,\n total: this._total,\n fromRow: this._fromRow,\n toRow: this._toRow,\n };\n this._changeDetectorRef.markForCheck();\n this.onChange.emit(event);\n }\n\n}\n","import { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { TdPagingBarComponent } from './paging-bar.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatButtonModule,\n ],\n declarations: [\n TdPagingBarComponent,\n ],\n exports: [\n TdPagingBarComponent,\n ],\n})\nexport class CovalentPagingModule {\n\n}\n"]}