fonteva-design-guide
Version:
## Dev, Build and Test
124 lines (104 loc) • 3.79 kB
JavaScript
import { LightningElement, api, track } from 'lwc';
import { fireEvent } from 'c/actionutils';
export default class PfmPager extends LightningElement {
numberOfPages;
pageSize = 10;
backend;
classes;
pageListToDisplay;
firstButtonCssClasses;
prevButtonCssClasses;
nextButtonCssClasses;
lastButtonCssClasses;
currentPageNumber = 1;
connectedCallback() {
this.generatePageList();
const classBase = 'pfm-pager';
let valBackend = this.backend,
backend;
backend = valBackend === true ? '' : ' pfm-pager_portal';
this.classes = classBase + backend;
}
updateButtonCssClasses() {
this.firstButtonCssClasses = 'slds-is-relative' + (this.currentPageNumber <= 1 ? ' js-disabled' : '');
this.prevButtonCssClasses = this.currentPageNumber <= 1 ? 'js-disabled' : '';
this.nextButtonCssClasses = this.currentPageNumber >= this.numberOfPages ? 'js-disabled' : '';
this.lastButtonCssClasses =
'slds-is-relative' + (this.currentPageNumber >= this.numberOfPages ? ' js-disabled' : '');
}
setCurrentPage(currentPageNumber) {
this.currentPageNumber = currentPageNumber;
this.generatePageList();
}
generatePageList() {
let pageList = [];
let maxedPages = 5;
let pagesOnLeftCount = 0;
let pagesOnRightCount = 0;
for (let i = 1; i < maxedPages; i++) {
if (
pagesOnLeftCount + pagesOnRightCount + 1 < maxedPages &&
this.currentPageNumber - pagesOnLeftCount - 1 > 0
) {
pagesOnLeftCount++;
}
if (
pagesOnLeftCount + pagesOnRightCount + 1 < maxedPages &&
this.currentPageNumber + pagesOnRightCount < this.numberOfPages
) {
pagesOnRightCount++;
}
}
for (let i = pagesOnLeftCount; i > 0; i--) {
pageList.push(this.buildPageListEntry(this.currentPageNumber - i));
}
pageList.push(this.buildPageListEntry(this.currentPageNumber));
for (let i = 1; i <= pagesOnRightCount; i++) {
pageList.push(this.buildPageListEntry(this.currentPageNumber + i));
}
this.pageListToDisplay = pageList;
this.updateButtonCssClasses();
}
buildPageListEntry(pageNumber) {
let isCurrentPage = this.currentPageNumber === parseInt(pageNumber);
return {
pageNumber: pageNumber,
isCurrentPage: isCurrentPage
};
}
switchToPage(evt) {
this.currentPageNumber = parseInt(evt.currentTarget.dataset.page);
this.fireChangePageEvent();
this.generatePageList();
}
onNext() {
if (this.currentPageNumber === parseInt(this.numberOfPages)) {
return;
}
this.currentPageNumber++;
this.fireChangePageEvent();
this.generatePageList();
}
onPrev() {
if (this.currentPageNumber === 1) {
return;
}
this.currentPageNumber--;
this.fireChangePageEvent();
this.generatePageList();
}
onFirst() {
this.currentPageNumber = 1;
this.fireChangePageEvent();
this.generatePageList();
}
onLast() {
this.currentPageNumber = parseInt(this.numberOfPages);
this.fireChangePageEvent();
this.generatePageList();
}
fireChangePageEvent() {
fireEvent(this, 'pagechanged', { currentPage: this.currentPageNumber });
}
}