This post explains server side pagination in LWC. Below is the demo of output :
To change the number of records in a single page, change pagesize (variable in data_table.js) accordingly.
data_table.cmp :
<template>
    <div>
        <lightning-datatable
                key-field="id"
                data={caseData}
                columns={caseColumns}
                onrowaction={handleRowAction}>
        </lightning-datatable>
    </div>  
     <template if:true={showpagination}>
        <lightning-layout-item padding="around-small">
            <div class="slds-align_absolute-center">
                <lightning-button variant="base" 
                                    label="First" 
                                    disabled={disableFirst} 
                                    onclick={handleFirst}
                                    class="slds-m-left_x-small">
                </lightning-button>
                <lightning-button variant="base" 
                                    label="<<" 
                                    disabled={disableFirst} 
                                    onclick={handlePrevious}
                                    class="slds-m-left_x-small slds-m-right_x-small">
                </lightning-button>
                <template for:each={pagelist} for:item="item" for:index="index">
                    <span key={item} data-id={item} class="testcss slds-m-left_xx-small slds-m-right_xx-small slds-p-horizontal_x-small">
                        <b> <a class="testcss"  onclick={processMe} name={item} data-id={item}>{item}</a></b>
                    </span>
                </template>
                <lightning-button variant="base" 
                                label=">>" 
                                disabled={disableNext} 
                                onclick={handleNext}
                                class="slds-m-left_x-small">
                </lightning-button>
                <lightning-button variant="base" 
                                label="Last" 
                                disabled={disableNext} 
                                onclick={handleLast}
                                class="slds-m-left_x-small">
                </lightning-button>
            </div>
        </lightning-layout-item>
    </template>
</template>
data_table.js :
import { LightningElement,track,wire } from 'lwc';import loadCases from '@salesforce/apex/data_table.loadCases';
export default class data_table extends LightningElement {
    @track pagenumber = 1;    @track recordstart = 0;    @track recordend = 0;    @track totalrecords = 0;    @track pagesize = 3;    @track totalpages = 1;    @track showpagination=true;    @track pagelist;    @track isLoaded = false;    @track caseData;    @track caseColumns = [    { label: 'Case Number', fieldName: 'CaseNumber', type: 'text'},    { label: 'Subject', fieldName: 'Subject', type: 'text'},    { label: 'Priority', fieldName: 'Priority', type: 'text'}    ];
    @wire(loadCases, {    pageNumber: "$pagenumber",    pageSize: "$pagesize"    })    getCaseRecord(result){        if (result.data) {            this.caseData = result.data.caseList;            this.totalrecords = result.data.totalRecords;            this.recordstart = result.data.recordStart;            this.recordend = result.data.recordEnd;            this.totalpages = Math.ceil(this.totalrecords / this.pagesize);            this.generatePageList(this.pagenumber, this.totalpages);
            this.isLoaded = false;            if(this.totalpages==1){                this.showpagination=false;            }else{            this.showpagination=true;             }        }    }
    renderedCallback(){        this.template.querySelectorAll('.testcss').forEach((but) => {            but.style.backgroundColor = this.pagenumber===parseInt(but.dataset.id,10) ? '#F47920' : 'white';            but.style.color = this.pagenumber === parseInt(but.dataset.id, 10) ? 'white' : 'black';        });    }
    handleFirst(event) {        this.isLoading = true;        var pagenumber = 1;        this.pagenumber = pagenumber;    }
    processMe(event) {        var checkpage = this.pagenumber;        this.pagenumber = parseInt(event.target.name);        if (this.pagenumber != checkpage) {        this.isLoading = true;        }    }
    get disableFirst() {        if (this.pagenumber == 1) {        return true;        }        return false;    }
    get disableNext() {        if (        this.pagenumber == this.totalpages ||        this.pagenumber >= this.totalpages        ) {        return true;        }        return false;    }
    handlePrevious(event) {        this.isLoading = true;        this.pagenumber--;    }
    handleNext(event) {        this.isLoading = true;        this.pagenumber = this.pagenumber + 1;    }
    handleLast(event) {        this.isLoading = true;        this.pagenumber = this.totalpages;    }
    generatePageList = (pagenumber, totalpages) => {        var pagenumber = parseInt(pagenumber);        var pageList = [];        var totalpages = this.totalpages;        this.pagelist = [];        if (totalpages > 1) {            if (totalpages < 3) {                if (pagenumber == 1) {                    pageList.push(1, 2);                }                if (pagenumber == 2) {                    pageList.push(1, 2);                }            } else {                if (pagenumber + 1 < totalpages && pagenumber - 1 > 0) {                    pageList.push(pagenumber - 1, pagenumber, pagenumber + 1);                } else if (pagenumber == 1 && totalpages > 2) {                    pageList.push(1, 2, 3);                } else if (pagenumber + 1 == totalpages && pagenumber - 1 > 0) {                    pageList.push(pagenumber - 1, pagenumber, pagenumber + 1);                } else if (pagenumber == totalpages && pagenumber - 1 > 0) {                    pageList.push(pagenumber - 2, pagenumber - 1, pagenumber);                }            }        }        this.pagelist = pageList;    };
}
import { LightningElement,track,wire } from 'lwc';
import loadCases from '@salesforce/apex/data_table.loadCases';
export default class data_table extends LightningElement {
    @track pagenumber = 1;
    @track recordstart = 0;
    @track recordend = 0;
    @track totalrecords = 0;
    @track pagesize = 3;
    @track totalpages = 1;
    @track showpagination=true;
    @track pagelist;
    @track isLoaded = false;
    @track caseData;
    @track caseColumns = [
    { label: 'Case Number', fieldName: 'CaseNumber', type: 'text'},
    { label: 'Subject', fieldName: 'Subject', type: 'text'},
    { label: 'Priority', fieldName: 'Priority', type: 'text'}
    ];
    @wire(loadCases, {
    pageNumber: "$pagenumber",
    pageSize: "$pagesize"
    })
    getCaseRecord(result){
        if (result.data) {
            this.caseData = result.data.caseList;
            this.totalrecords = result.data.totalRecords;
            this.recordstart = result.data.recordStart;
            this.recordend = result.data.recordEnd;
            this.totalpages = Math.ceil(this.totalrecords / this.pagesize);
            this.generatePageList(this.pagenumber, this.totalpages);
            this.isLoaded = false;
            if(this.totalpages==1){
                this.showpagination=false;
            }else{
            this.showpagination=true; 
            }
        }
    }
    renderedCallback(){
        this.template.querySelectorAll('.testcss').forEach((but) => {
            but.style.backgroundColor = this.pagenumber===parseInt(but.dataset.id,10) ? '#F47920' : 'white';
            but.style.color = this.pagenumber === parseInt(but.dataset.id, 10) ? 'white' : 'black';
        });
    }
    handleFirst(event) {
        this.isLoading = true;
        var pagenumber = 1;
        this.pagenumber = pagenumber;
    }
    processMe(event) {
        var checkpage = this.pagenumber;
        this.pagenumber = parseInt(event.target.name);
        if (this.pagenumber != checkpage) {
        this.isLoading = true;
        }
    }
    get disableFirst() {
        if (this.pagenumber == 1) {
        return true;
        }
        return false;
    }
    get disableNext() {
        if (
        this.pagenumber == this.totalpages ||
        this.pagenumber >= this.totalpages
        ) {
        return true;
        }
        return false;
    }
    handlePrevious(event) {
        this.isLoading = true;
        this.pagenumber--;
    }
    handleNext(event) {
        this.isLoading = true;
        this.pagenumber = this.pagenumber + 1;
    }
    handleLast(event) {
        this.isLoading = true;
        this.pagenumber = this.totalpages;
    }
    generatePageList = (pagenumber, totalpages) => {
        var pagenumber = parseInt(pagenumber);
        var pageList = [];
        var totalpages = this.totalpages;
        this.pagelist = [];
        if (totalpages > 1) {
            if (totalpages < 3) {
                if (pagenumber == 1) {
                    pageList.push(1, 2);
                }
                if (pagenumber == 2) {
                    pageList.push(1, 2);
                }
            } else {
                if (pagenumber + 1 < totalpages && pagenumber - 1 > 0) {
                    pageList.push(pagenumber - 1, pagenumber, pagenumber + 1);
                } else if (pagenumber == 1 && totalpages > 2) {
                    pageList.push(1, 2, 3);
                } else if (pagenumber + 1 == totalpages && pagenumber - 1 > 0) {
                    pageList.push(pagenumber - 1, pagenumber, pagenumber + 1);
                } else if (pagenumber == totalpages && pagenumber - 1 > 0) {
                    pageList.push(pagenumber - 2, pagenumber - 1, pagenumber);
                }
            }
        }
        this.pagelist = pageList;
    };
}
data_table.apx :
public with sharing class data_table {    @AuraEnabled(cacheable=true)    Public static caseDataWrapper loadCases(Decimal pageNumber,Decimal pageSize){        caseDataWrapper res = new caseDataWrapper();        Integer pSize;        if(pageSize!=null && pageSize!=0.0){            pSize = (Integer)pageSize;            }else{            pSize=10;          }         Integer pNumber = (Integer)pageNumber;        Integer offset = (pNumber - 1) * pSize;        list<case> c = new list<case>();        String query = 'Select id,CaseNumber,Subject, priority from Case LIMIT :pSize OFFSET :offset';        String countQuery = 'select count() from case';        c = Database.query(query);        res.caseList = c;        res.totalRecords = Database.countQuery(countQuery);        res.recordStart = offset + 1;        Integer recordEnd = pSize * pNumber;        res.recordEnd = res.totalRecords >= recordEnd ? recordEnd : res.totalRecords;         return res;    }
    public class caseDataWrapper {        @AuraEnabled        public Integer totalRecords {get;set;}        @AuraEnabled        public Integer recordStart {get;set;}        @AuraEnabled        public Integer recordEnd {get;set;}        @AuraEnabled        public List<case> caseList {get;set;}    } }
public with sharing class data_table {
    @AuraEnabled(cacheable=true)
    Public static caseDataWrapper loadCases(Decimal pageNumber,Decimal pageSize){
        caseDataWrapper res = new caseDataWrapper();
        Integer pSize;
        if(pageSize!=null && pageSize!=0.0){
            pSize = (Integer)pageSize;    
        }else{
            pSize=10;  
        } 
        Integer pNumber = (Integer)pageNumber;
        Integer offset = (pNumber - 1) * pSize;
        list<case> c = new list<case>();
        String query = 'Select id,CaseNumber,Subject, priority from Case LIMIT :pSize OFFSET :offset';
        String countQuery = 'select count() from case';
        c = Database.query(query);
        res.caseList = c;
        res.totalRecords = Database.countQuery(countQuery);
        res.recordStart = offset + 1;
        Integer recordEnd = pSize * pNumber;
        res.recordEnd = res.totalRecords >= recordEnd ? recordEnd : res.totalRecords; 
        return res;
    }
    public class caseDataWrapper {
        @AuraEnabled
        public Integer totalRecords {get;set;}
        @AuraEnabled
        public Integer recordStart {get;set;}
        @AuraEnabled
        public Integer recordEnd {get;set;}
        @AuraEnabled
        public List<case> caseList {get;set;}
    } 
}
Thanks, 
Lovesalesforceyes
Lovesalesforceyes
 
 
 
No comments:
Post a Comment