Showing posts with label clientsidepagination. Show all posts
Showing posts with label clientsidepagination. Show all posts

client side pagination using lightning component

Client side pagination using lightning component

  • There is a requirement to display more than 10k records using aura components and needs to be implemented inline search and sort functionality as well.  Provide download functionality as well.
  • Based on the Account record id in the url we have to pass the same id to the lightning component and fetch the related records and show in UI.
    1. AgentSelectionPage.vf
    2. AgentSelectionPageApp.app
    3. SelectionPage.cmp
    4. SelectionPage.js
    5. SelectionPage.helper
    6. SelectionPage.css
    7. OverviewDetailsCtrl.apx
  • AgentSelectionPage.vf
<apex:page sidebar="true" showHeader="true" standardController="Account" tabStyle="Account">
    <apex:outputPanel layout="block" style="overflow:auto;height:800px" >
        <!--<chatter:feed entityId="{!$CurrentPage.parameters.accountId}"/>-->
        <apex:includeLightning />
        <div style="width:100%;height:100px;" id="LightningContainer"/>    
        <script type="text/javascript">
        var accountId = "{!$CurrentPage.parameters.accountId}";
        $Lightning.use("c:AgentSelectionPageApp", function() {
            $Lightning.createComponent("c:SelectionPage", 
                                       { "accountId" : accountId },
                                       "LightningContainer", function(component) {
                                           console.log('Component created');
                                       });
        });
        </script>
        <script language="javascript">
        function resizeIframe() {
            var me = window.name;
            if (me) {
                var iframes = parent.document.getElementsByName(me);
                if (iframes && iframes.length == 1) {
                    height = document.body.offsetHeight;
                    iframes[0].style.height = height + "px";
                }
            }
        }
        resizeIframe();
        </script>
    </apex:outputPanel>
</apex:page>

  • AgentSelectionPageApp.app
<aura:application extends="ltng:outApp" access="global">
    <aura:dependency resource="c:SelectionPage"/>
</aura:application>
  • SelectionPage.cmp
<aura:component controller="OverviewDetailsCtrl" implements="lightning:isUrlAddressable,force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" access="global" >    
    <aura:attribute name="accountId" type="String" />
    <aura:attribute name="recordId" type="String" />
    <aura:attribute name="hubShowHideFlag" type="Boolean" default="false"/> 
    <aura:attribute name="successAlertFlag" type="Boolean" default="false"/> 
    <aura:attribute name="mouseHoverData" type="object" />
    <aura:attribute name="accountIdHover" type="Id" />
    <aura:attribute name="togglehover" type="boolean" default="false"/>
    <aura:attribute name="data" type="Object"/> 
    <aura:attribute name="hoverRow" type="Integer" default="-1" />
    <aura:attribute name="billingCountryList" type="List"/> 
    <aura:attribute name="billingCityList" type="List"/>
    <aura:attribute name="columns" type="List"/>  
    <aura:attribute name="selectedAccountRecords" type="List" default="[]"/> 
    <aura:attribute name="unselectedAccountRecords" type="List" default="[]"/> 
    <aura:attribute name="BillingCountry" type="String"/>  
    <aura:attribute name="cityName" type="String"/>
    <aura:attribute name="profileLinkableName" type="String"/>
    <aura:attribute name="profileLinkableList" type="List" default="['Yes','No']"/>
    <aura:attribute name="successAlert" type="String" default=""/>
    <aura:attribute name="countryName" type="String"/> 
    <aura:attribute type="String" name="sortField" />
    <aura:attribute type="Boolean" name="sortAsc" />
    <aura:attribute name="allData" type="List"/>
    <aura:attribute name="currentPageNumber" type="Integer" default="1"/>
    <aura:attribute name="pageSize" type="Integer" default="50"/>
    <aura:attribute name="totalPages" type="Integer" default="0"/>
    <aura:attribute name="pageList" type="List"/>
    <aura:attribute name="issearching"    type="Boolean" default="false"/>
    <aura:attribute type="Boolean" name="showLoader" default="true"/>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
    
    <aura:if isTrue="{!v.showLoader}">
        <c:CTO_Loader></c:CTO_Loader>
    </aura:if>
    <br/> 
    <div class="slds-border_bottom">        
        <div class="demo-only demo-only--sizing slds-grid slds-wrap slds-text-align_center slds-m-around_x-small"> 
            <div class="slds-size_7-of-12">
                <div class="slds-grid slds-grid_align-spread" data-test="home-section-heading">
                    <h2 class="slds-text-heading_large">
                        <caption class="slds-headertab-sty">Corporate Traveller Onboarding</caption>
                    </h2>        
                </div>
            </div>
            <div class="slds-size_5-of-12">
                <div class="slds-clearfix">
                    <div class="slds-float_right">                        
                        <lightning:button label="Save" variant="brand" onclick="{!c.handleSelectedAccounts }"  />
                        <lightning:button label="Download as CSV" variant="brand" onclick="{!c.downloadCsv }"  />
                        <lightning:button label="Clear Filters" variant="brand" onclick="{!c.handleClearFilters }"/>
                        <lightning:button label="Cancel" variant="brand"  onclick="{!c.handleCancel }"/>                         
                    </div>
                </div>                 
            </div> 
        </div>
    </div>    
    <br/>
    
    <!--<c:CTOToastUtil  toastmsg="Hello Faz" toastType="error"/>-->
    <aura:if isTrue="{!v.successAlertFlag}">  
        <c:CTOToastUtil  toastmsg="{!v.successAlert}" toastType="success" successAlertFlag="{!v.successAlertFlag}"/>
    </aura:if>
    <!--<c:CTOToastUtil  toastmsg="Something is fishy" toastType="warning"/>-->
    
    <!--<div class="slds-scrollable"  style="overflow:auto;height:500px" >-->
    <aura:if isTrue="{!v.hubShowHideFlag}">            
        <lightning:layout multipleRows="true" horizontalAlign="center">
            <lightning:layoutItem padding="around-small" size="12">
                <div class="slds-box">
                    <table  style="table-layout:fixed;width:100%;border-collapse: collapse;" class="slds-table slds-border_left slds-border_right slds-table_cell-buffer slds-table_bordered slds-table_col-bordered">
                        <!--<caption class="slds-headertab-sty">Corporate Traveller Onboarding</caption>-->
                        <tr class="slds-text-title_caps">
                            <th scope="col" onclick="{!c.sortByCompanyName}">                                        
                                <strong><div class="slds-truncate">COMPANY NAME</div></strong>
                                <div onkeyup="{! c.searchcomanyName }">
                                    <lightning:input  aura:id="comanyName" placeholder="Search Company"
                                                     name="comanyName"
                                                     type="text"
                                                     />
                                </div>
                            </th>
                            <th scope="col" onclick="{!c.sortByCountry}">
                                <strong><div class="slds-truncate">Country</div></strong>
                                <lightning:select label="" aura:id="countryName" value="{!v.countryName}" onchange="{!c.searchcountryName}" name="BillingCountry">
                                    <option  disabled="true"  value="">Search Country</option>
                                    <aura:iteration items="{!v.billingCountryList}" var="country">
                                        <option value="{!country}" selected="{!country==v.countryName}">{!country}</option>
                                    </aura:iteration>
                                </lightning:select>
                            </th>                            
                            <th scope="col" onclick="{!c.sortByCity}">
                                <strong><div class="slds-truncate">City</div></strong>
                                <lightning:select  label=""  aura:id="cityName" value="{!v.cityName}" onchange="{!c.searchcityName}" name="cityName">
                                    <option disabled="true" value="">Search City</option>
                                    <aura:iteration items="{!v.billingCityList}" var="city">
                                        <option value="{!city}" selected="{!city==v.cityName}">{!city}</option>
                                    </aura:iteration>
                                </lightning:select>                                    
                            </th>
                            <th scope="col" onclick="{!c.sortByPayment}">
                                <strong><div class="slds-truncate">PAYMENT METHOD</div></strong>
                                <div onkeyup="{! c.searchpaymentMethod }">
                                    <lightning:input aura:id="paymentMethod"  placeholder="Search Payment"
                                                     name="paymentMethod"
                                                     type="text"
                                                     />
                                </div>
                            </th>
                            <th scope="col" onclick="{!c.sortByCreatedDate}">
                                <strong><div class="slds-truncate">Created Date</div></strong>
                                <div onkeyup="{! c.searchSearchDate }">
                                    <lightning:input aura:id="searchDate" placeholder="Search Date"
                                                     name="searchDate"
                                                     />      
                                </div>
                            </th>
                            <th scope="col" onclick="{!c.sortByIncludedKDNR}">  
                                <strong><div class="slds-truncate">Included KDNR</div></strong>                               
                                <lightning:select  label=""  aura:id="profileLinkable" value="{!v.profileLinkableName}" onchange="{!c.searchProfileLinkable}" name="profileLinkableName">
                                    <option disabled="true" value="">Search Included KDNR</option>
                                    <aura:iteration items="{!v.profileLinkableList}" var="profile">
                                        <option value="{!profile}" selected="{!profile==v.profileLinkableName}">{!profile}</option>
                                    </aura:iteration>
                                </lightning:select> 
                            </th>
                        </tr>
                    </table>
                    <div class="slds-scrollable"  style="overflow:auto;" >
                        <div style="display: block; height: 400px;overflow-y: auto;overflow-x: hidden;">
                            <table  style="table-layout:fixed;width:101%;border-collapse: collapse;" class="slds-table slds-border_left slds-border_right slds-table_cell-buffer slds-table_bordered slds-table_col-bordered">    
                                <tbody>
                                    <aura:if isTrue="{!not(empty(v.data))}">
                                        <aura:iteration items="{!v.data}" var="acc" indexVar="index"> 
                                            <tr  data-selected-Index="{!index}">
                                                <td scope="row" class="kdnrClass" data-label="sectIdx">
                                                    <a href="javascript:void(0)" style="color:#ff5f00;" onclick="{!c.redirectToAccount}" data-attriVal="{!acc.Id}">{!acc.KDNR}</a>
                                                </td>
                                                <td scope="row"  class="colomnsClass" data-label="sectIdx">
                                                    <div class="slds-truncate" title="{!acc.Name}">{!acc.Name}</div>
                                                </td>
                                                <td scope="row"   class="colomnsClass" data-label="sectIdx">
                                                    <div class="slds-truncate" title="{!acc.BillingCountry}">{!acc.BillingCountry}</div>
                                                </td>
                                                <td scope="row"    class="colomnsClass" data-label="sectIdx">
                                                    <div class="slds-truncate" title="{!acc.BillingCity}">{!acc.BillingCity}</div>
                                                </td>
                                                <td scope="row"   class="colomnsClass" data-label="sectIdx">
                                                    <div class="slds-truncate" title="{!acc.Payment_Type}">{!acc.Payment_Type}</div>
                                                </td>
                                                <td scope="row"   class="colomnsClass" data-label="sectIdx">
                                                    <div class="slds-truncate" title="{!acc.X12_Months_Rolling_Revenue}">{!acc.X12_Months_Rolling_Revenue}</div>
                                                </td>
                                                <td scope="row" class="kdnrClasss" data-label="sectIdx">
                                                    <div><a id="{!acc.Id}" style="color:#ff5f00;" onmouseenter="{!c.handleMouseHover}" onmouseout="{!c.handleMouseOut}" data-index="{!index}" tabindex="-1">{!acc.parentKDNR}</a></div>
                                                    <aura:if isTrue="{!v.hoverRow==index}">
                                                        <aura:if isTrue="{!v.togglehover==true}">
                                                            <section aria-labelledby="panel-heading-id" class="slds-popover slds-popover_panel slds-nubbin_top-left" role="dialog" style="position: absolute;padding: inherit;">                                                                
                                                                <div class="slds-popover__header">
                                                                    <header class="slds-media slds-media_center slds-m-bottom_small"> 
                                                                        <span class="slds-icon_container slds-icon-standard-account slds-media__figure">
                                                                            <lightning:icon iconName="standard:account"/> 
                                                                        </span>
                                                                        <div class="slds-media__body">
                                                                            <h2 class="slds-text-heading_medium slds-hyphenate" id="panel-heading-id">
                                                                                <a href="javascript:void(0);">
                                                                                    <p class="slds-truncate">
                                                                                        <a href="javascript:void(0);">{!v.mouseHoverData.Name}</a>
                                                                                    </p>
                                                                                </a>
                                                                            </h2>
                                                                        </div>
                                                                    </header>
                                                                    <footer class="slds-grid slds-wrap slds-grid_pull-padded">            
                                                                        <div class="slds-p-horizontal_small slds-size_2-of-2 slds-p-bottom_x-small">
                                                                            <dl>
                                                                                <dt>
                                                                                    <p class="slds-popover_panel__label slds-truncate">Owner</p>
                                                                                </dt>
                                                                                <dd>
                                                                                    <a href="javascript:void(0);">{!v.mouseHoverData.Owner.Name}</a>
                                                                                </dd>
                                                                            </dl>
                                                                        </div>
                                                                        
                                                                    </footer>
                                                                </div>
                                                                <div class="slds-popover__body">
                                                                    <dl class="slds-popover__body-list">
                                                                        <dd class="slds-m-top_x-small">
                                                                            <p class="slds-truncate">
                                                                                <a href="javascript:void(0);">{!v.mouseHoverData.Name}</a>
                                                                            </p>
                                                                            <dl class="slds-list_horizontal slds-wrap slds-text-body_small">
                                                                                <dt class="slds-item_label slds-text-color_weak slds-truncate">ABKZ</dt>
                                                                                <dd class="slds-item_detail slds-text-color_weak slds-truncate">{!v.mouseHoverData.ABKZ__c}</dd>
                                                                                <dt class="slds-item_label slds-text-color_weak slds-truncate">Mandant</dt>
                                                                                <dd class="slds-item_detail slds-text-color_weak slds-truncate">{!v.mouseHoverData.Mandant__c}</dd>
                                                                                <dt class="slds-item_label slds-text-color_weak slds-truncate">KDNR</dt>
                                                                                <dd class="slds-item_detail slds-text-color_weak slds-truncate">{!v.mouseHoverData.KDNR__c}</dd>
                                                                                <dt class="slds-item_label slds-text-color_weak slds-truncate">Profile Linkable</dt>
                                                                                <dd class="slds-item_detail slds-text-color_weak slds-truncate">{!v.mouseHoverData.Profile_Linkable__c}</dd>
                                                                            </dl>
                                                                        </dd>                                 
                                                                    </dl>
                                                                </div>
                                                            </section>
                                                        </aura:if>
                                                    </aura:if>
                                                    <!--<div class="slds-truncate" title="{!acc.parentKDNR}" alt="Google">{!acc.parentKDNR}</div>-->
                                                </td>
                                                <td scope="row"   class="colomnsClass" data-label="sectIdx">
                                                    <div class="slds-truncate" title="{!acc.CreatedDate}">{!acc.CreatedDate}</div>
                                                </td>
                                                <td scope="row"   class="colomnsClass" data-label="sectIdx">
                                                    <label class="slds-checkbox">
                                                        <ui:inputCheckbox  class="slds-checkbox--faux"  aura:id="checkAccountId" value="{!acc.Profile_Linkable}" text="{!acc.Id}"/>
                                                        <span class="slds-checkbox--faux"></span>
                                                        <span class="slds-form-element__label text"></span>
                                                    </label>
                                                </td>
                                            </tr>
                                        </aura:iteration>
                                    </aura:if>  
                                </tbody>
                            </table>
                            <aura:if isTrue="{!empty(v.data)}">
                                <div class="slds-align_absolute-center" style="height:5rem">No matching records to display</div>
                            </aura:if>
                        </div>
                    </div>
                </div>
            </lightning:layoutItem>
            <lightning:layoutItem padding="around-small" flexibility="auto">
                <!--
                <lightning:button label="First" iconName="utility:left" iconPosition="left" variant="brand"
                                  onclick="{!c.onFirst}" disabled="{! v.currentPageNumber == 1}"/>-->
                <lightning:button  label="Previous" iconName="utility:left" iconPosition="left" variant="brand"
                                  onclick="{!c.onPrev}" disabled="{! v.currentPageNumber == 1}"/>               
                <span class="slds-p-horizontal_x-small">
                    <a onclick="{!c.processMe}" name="1" 
                       class="{! (v.currentPageNumber == 1) ? 'slds-button slds-button_brand' : 'slds-button slds-button_neutral'}">1</a>
                </span>
                <aura:iteration items="{!v.pageList}" var="item">
                    <span class="slds-p-horizontal_x-small">
                        <a onclick="{!c.processMe}" name="{!item}"
                           class="{! (v.currentPageNumber == item) ? 'slds-button slds-button_brand' : 'slds-button slds-button_neutral'}">{!item}</a>
                    </span>
                </aura:iteration>                
                <span class="slds-p-horizontal_xxx-small">
                    <a>...</a>
                </span>
                <span class="slds-p-horizontal_x-small">
                    <a onclick="{!c.processMe}" name="{!v.totalPages}"
                       class="{! (v.currentPageNumber == v.totalPages) ? 'slds-button slds-button_brand' : 'slds-button slds-button_neutral'}">{!v.totalPages}</a>
                </span>                
                <lightning:button label="Next"  iconName="utility:right" iconPosition="right" variant="brand"
                                  disabled="{! v.currentPageNumber == v.totalPages}" onclick="{!c.onNext}"/>
                <!--
                <lightning:button label="Last" iconName="utility:right" iconPosition="right" variant="brand"
                                  disabled="{! v.currentPageNumber == v.totalPages}" onclick="{!c.onLast}"/>
          -->
            </lightning:layoutItem>
        </lightning:layout>
        <!--
        <div class="slds-clearfix">
            <div class="slds-float_right">                
                <lightning:button label="Save" variant="brand" onclick="{!c.handleSelectedAccounts }"  />
                <lightning:button label="Download as CSV" variant="brand" onclick="{!c.downloadCsv }"  />
                <lightning:button label="Clear Filters" variant="brand" onclick="{!c.handleClearFilters }"/>
                <lightning:button label="Cancel" variant="brand"/>                         
            </div>
        </div> 
        -->
    </aura:if>
    <!--</div>-->
</aura:component>

({
    doInit : function(component, event, helper) { 
        component.set("v.hubShowHideFlag",true);
        helper.onLoad(component, helper);
    },
    sortByKDNR : function(component, event, helper) { 
        helper.sortBy(component, "KDNR");
    },
    sortByIncludedKDNR : function(component, event, helper) { 
        helper.sortBy(component, "Profile_Linkable");
    },
    sortByCreatedDate : function(component, event, helper) { 
        helper.sortBy(component, "CreatedDate");
    },
    sortByParentKDNR : function(component, event, helper) { 
        helper.sortBy(component, "parentKDNR");
    },
    sortByRevenue : function(component, event, helper) { 
        helper.sortBy(component, "X12_Months_Rolling_Revenue");
    },
    sortByPayment : function(component, event, helper) { 
        helper.sortBy(component, "Payment_Type");
    },
    sortByCity : function(component, event, helper) { 
        helper.sortBy(component, "BillingCity");
    },
    sortByCountry : function(component, event, helper) { 
        helper.sortBy(component, "BillingCountry");
    },
    sortByCompanyName : function(component, event, helper) { 
        helper.sortBy(component, "Name");
    },
    handleMouseHover: function(component, event, helper) {
        component.set("v.accountIdHover",event.srcElement.id);
        helper.getMiniLayout(component, event, helper)
    },
    handleMouseOut: function(component, event, helper) {
        component.set("v.hoverRow",-1);
        component.set("v.togglehover",false);
    },
    redirectToAccount : function(component, event, helper) { 
        var classicURL = '/'+event.currentTarget.getAttribute("data-attriVal");        
        window.open(classicURL,'_blank');
    },
    onNext : function(component, event, helper) {        
        var pageNumber = component.get("v.currentPageNumber"); 
        component.set("v.currentPageNumber", pageNumber+1);
        helper.buildData(component, helper);
    },
    onPrev : function(component, event, helper) {        
        var pageNumber = component.get("v.currentPageNumber");
        component.set("v.currentPageNumber", pageNumber-1);
        helper.buildData(component, helper);
    },
    handleCancel :  function(component, event, helper) {
        component.set("v.showLoader",true);
        var accountId = component.get("v.accountId");
        var classicURL = '/'+accountId;        
        window.open(classicURL,'_self');
        component.set("v.showLoader",false);
    },
    processMe : function(component, event, helper) {
        component.set("v.currentPageNumber", parseInt(event.target.name));
        helper.buildData(component, helper);
    },    
    onFirst : function(component, event, helper) {        
        component.set("v.currentPageNumber", 1);
        helper.buildData(component, helper);
    },
    
    onLast : function(component, event, helper) {        
        component.set("v.currentPageNumber", component.get("v.totalPages"));
        helper.buildData(component, helper);
    },
    searchKDNRCompanyName : function (component, event, helper) {        
        var isEnterKey = event.keyCode === 13;
        if (isEnterKey) {
            component.set("v.showLoader",true);
            var queryTerm = component.find('searchKDNR').get('v.value');
            if(queryTerm) {
                component.set('v.issearching', true);
                setTimeout(function() {
                    helper.buildSearchData(component,helper,queryTerm);
                    component.set('v.issearching', false);
                }, 2000);
                
            }else{
                alert("Please enter KDNR, Company Name");
                component.set("v.showLoader",false);
            }
            
        }
    },
    searchparentKDNR :function(component, event, helper) {
        var queryTerm = component.find('parentKDNR').get('v.value');
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm, 'parentKDNR');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchKDNR: function(component, event, helper) {
        var queryTerm = component.find('KDNRName').get('v.value');
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm, 'KDNR');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchcomanyName: function(component, event, helper) {
        var queryTerm = component.find('comanyName').get('v.value');
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm.toUpperCase(), 'Name');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchcountryName: function(component, event, helper) {
        var queryTerm = component.get("v.countryName");
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm, 'BillingCountry');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchcityName: function(component, event, helper) {
        var queryTerm = component.get("v.cityName");
        debugger;
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm, 'BillingCity');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchpaymentMethod: function(component, event, helper) {
        var queryTerm = component.find('paymentMethod').get('v.value');
        if(queryTerm){            
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm.toUpperCase(), 'Payment_Type');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchProfileLinkable : function(component, event, helper) {
        var queryTerm = component.find('profileLinkable').get('v.value');
        if(queryTerm){
            var allDataArray = [];
            if(queryTerm === "Yes"){                
                allDataArray = helper.filterDataFromAllData(component,'true', 'Profile_Linkable');
            }else if(queryTerm === "No"){
                allDataArray = helper.filterDataFromAllData(component,'false', 'Profile_Linkable');
            } 
            helper.buildDataArray(component, helper,allDataArray);
        }
    }, 
    searchRevenueRM : function(component, event, helper) {
        var queryTerm = component.find('revenueRM').get('v.value');
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm, 'X12_Months_Rolling_Revenue');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    searchSearchDate : function(component, event, helper) {
        var queryTerm = component.find('searchDate').get('v.value');
        if(queryTerm){
            var allDataArray = [];
            allDataArray = helper.filterDataFromAllData(component,queryTerm, 'CreatedDate');
            helper.buildDataArray(component, helper,allDataArray);
        }
    },
    doCaptureChangedValue : function(component, event, helper) {
        var checkbox = event.getSource();
        var selectedAccountRecord = component.get("v.selectedAccountRecords");
        var unselectedAccountRecord = component.get("v.unselectedAccountRecords");
        if(checkbox.get("v.value")){
            selectedAccountRecord.push(checkbox.get("v.text"));   
            //unselectedAccountRecord.splice(checkbox.get("v.text"), 1);
        }else{
            unselectedAccountRecord.push(checkbox.get("v.text"));
            //selectedAccountRecord.splice(checkbox.get("v.text"), 1);
        }
        component.set("v.selectedAccountRecords",selectedAccountRecord);
        component.set("v.unselectedAccountRecords",unselectedAccountRecord);
    },
    searchBillingCountry : function(component, event, helper) {
        var BillingCountryValue = component.get("v.BillingCountry");
    },
    //Process the selected contacts
    handleSelectedAccounts: function(component, event, helper) {
        component.set("v.showLoader",true);
        var selectedAccounts = [];
        var unSelectedAccounts = [];
        var checkvalue = component.find("checkAccountId");        
        if(!Array.isArray(checkvalue)){
            if (checkvalue.get("v.value") == true) {                
                selectedAccounts.push(checkvalue.get("v.text"));
            }
        }else{
            for (var i = 0; i < checkvalue.length; i++) {
                if (checkvalue[i].get("v.value") == true) {
                    selectedAccounts.push(checkvalue[i].get("v.text"));
                }else{
                    unSelectedAccounts.push(checkvalue[i].get("v.text"));
                }
            }
        }
        console.log('unSelectedAccounts-' + unSelectedAccounts);
        console.log('selectedAccounts-' + selectedAccounts);
        
        var action = component.get("c.doUpdateSelectedUnsSelected");
        action.setParams({
            selectedAccounts   : selectedAccounts,
            unSelectedAccounts : unSelectedAccounts
        });
        action.setCallback(this,function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {   
                //console.log("success or failure ::"+response.getReturnValue());
                helper.removeFilters(component, helper);
                //$A.get("e.force:refreshView").fire();
                if(response.getReturnValue()){
                    component.set("v.successAlertFlag",true);
                    component.set("v.successAlert",response.getReturnValue());
                }
                //helper.onLoad(component, helper);
                component.set("v.showLoader",false);
            }else if(state === "ERROR"){
                var errors = action.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        alert(errors[0].message);
                    }
                }
                component.set("v.showLoader",false);
            }else if (status === "INCOMPLETE") {
                alert('No response from server or client is offline.');
                component.set("v.showLoader",false);
            }
        });
        $A.enqueueAction(action);
    },
    handleClearFilters : function(component, event, helper) {        
        component.set("v.showLoader",true);
        helper.removeFilters(component, helper);
        helper.onLoad(component, helper);
        //helper.buildDataArray(component, helper,allData);
        //component.set("v.showLoader",false);
    },
    downloadCsv : function(component,event,helper){
        var stockData = component.get("v.allData");  
        var csv = helper.convertArrayOfObjectsToCSV(component,stockData);   
        if (csv == null){
            return;
        }     
        var hiddenElement = document.createElement('a');
        hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
        hiddenElement.target = '_self';
        hiddenElement.download = 'ExportData.csv'; 
        document.body.appendChild(hiddenElement);
        hiddenElement.click();
    },
})

({
    onLoad : function(component, helper) {
        this.removeFilters(component, helper);
        var accountId = component.get("v.accountId") ? component.get("v.accountId") :component.get("v.recordId"); 
        var action = component.get("c.doGetHeirarchyAccounts");
        var billingCountryList = [];
        var billingCityList = [];
        action.setParams({
            accountId : accountId
        });
        action.setCallback(this,function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                if(response.getReturnValue() !== null){
                    component.set("v.totalPages", Math.ceil(response.getReturnValue().length/component.get("v.pageSize")));
                    component.set("v.allData", response.getReturnValue());
                    for (var key in response.getReturnValue()) {
                        if (response.getReturnValue().hasOwnProperty(key)) {
                            if(response.getReturnValue()[key].BillingCountry){
                                if(billingCountryList.indexOf(response.getReturnValue()[key].BillingCountry.toUpperCase()) === -1) {
                                    billingCountryList.push(response.getReturnValue()[key].BillingCountry);
                                }
                            }
                            if(response.getReturnValue()[key].BillingCity){
                                if(billingCityList.indexOf(response.getReturnValue()[key].BillingCity.toUpperCase()) === -1) {
                                    billingCityList.push(response.getReturnValue()[key].BillingCity);
                                }
                            }
                            
                        }
                    }
                    billingCountryList = [... new Set(billingCountryList)];
                    billingCityList = [... new Set(billingCityList)];
                    billingCountryList.sort();
                    billingCityList.sort();
                    component.set("v.billingCountryList",billingCountryList);
                    component.set("v.billingCityList",billingCityList);
                    component.set("v.currentPageNumber",1);
                    window.allData = component.get("v.allData");
                    helper.buildData(component, helper); 
                }else{
                    component.set("v.showLoader",false);
                }
            }else if(state === "ERROR"){
                var errors = action.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        alert(errors[0].message);
                    }
                }
                component.set("v.showLoader",false);
                
            }else if (status === "INCOMPLETE") {
                alert('No response from server or client is offline.');
                component.set("v.showLoader",false);
                
            }
        });
        var requestInitiatedTime = new Date().getTime();
        $A.enqueueAction(action);
    },
    buildSearchData : function(component, helper,queryTerm) {
        var accountId = component.get("v.accountId"); 
        var action = component.get("c.doSearchKDNRCompany");
        action.setParams({
            accountId : accountId,
            searchString : queryTerm
        });
        action.setStorable();
        action.setCallback(this,function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                component.set("v.totalPages", Math.ceil(response.getReturnValue().length/component.get("v.pageSize")));
                component.set("v.allData", response.getReturnValue());
                component.set("v.currentPageNumber",1);
                helper.buildData(component, helper);
            }else if(state === "ERROR"){
                var errors = action.getError();
                if (errors) {
                    if (errors[0] && errors[0].message) {
                        alert(errors[0].message);
                    }
                }
            }else if (status === "INCOMPLETE") {
                alert('No response from server or client is offline.');
            }
        });
        var requestInitiatedTime = new Date().getTime();
        $A.enqueueAction(action);
    },
    buildDataArray : function(component, helper,allDataArray) {
        var data = [];
        var pageNumber = component.get("v.currentPageNumber");
        var pageSize = component.get("v.pageSize");
        var allData = allDataArray;
        var x = (pageNumber-1)*pageSize;
        
        for(; x<=(pageNumber)*pageSize; x++){
            if(allData[x]){
                data.push(allData[x]);
            }
        }
        component.set("v.data", data);
        helper.generatePageList(component, pageNumber);
    },
    buildData : function(component, helper) {
        var data = [];
        var pageNumber = component.get("v.currentPageNumber");
        var pageSize = component.get("v.pageSize");
        var allData = component.get("v.allData");
        var x = (pageNumber-1)*pageSize;
        
        for(; x<=(pageNumber)*pageSize; x++){
            if(allData[x]){
                data.push(allData[x]);
            }
        }
        component.set("v.data", data); 
        helper.generatePageList(component, pageNumber);
    },
    generatePageList : function(component, pageNumber){
        pageNumber = parseInt(pageNumber);
        var pageList = [];
        var totalPages = component.get("v.totalPages");
        if(totalPages > 1){
            if(totalPages <= 10){
                var counter = 2;
                for(; counter < (totalPages); counter++){
                    pageList.push(counter);
                } 
            } else{
                if(pageNumber < 5){
                    pageList.push(2, 3, 4, 5, 6);
                } else{
                    if(pageNumber>(totalPages-5)){
                        pageList.push(totalPages-5, totalPages-4, totalPages-3, totalPages-2, totalPages-1);
                    } else{
                        pageList.push(pageNumber-2, pageNumber-1, pageNumber, pageNumber+1, pageNumber+2);
                    }
                }
            }
        }
        component.set("v.pageList", pageList);        
        component.set("v.showLoader",false);
    },  
    removeFilters : function(component,helper){
        component.find("parentKDNR").set("v.value", "");
        component.find("KDNRName").set("v.value", "");
        component.find("comanyName").set("v.value", "");
        component.find("paymentMethod").set("v.value", "");
        component.find("profileLinkable").set("v.value", "");
        component.find("searchDate").set("v.value", "");
        component.find("revenueRM").set("v.value", "");
        component.set("v.countryName","");
        component.set("v.cityName","");
    },
    convertArrayOfObjectsToCSV : function(component,objectRecords){
        var csvStringResult, counter, keys, columnDivider, lineDivider;
        if (objectRecords == null || !objectRecords.length) {
            return null;
        }
        columnDivider = ',';
        lineDivider =  '\n';
        keys = ['KDNR','Name','BillingCountry','BillingCity','Payment_Type','X12_Months_Rolling_Revenue','CreatedDate','Profile_Linkable','parentKDNR'];
        csvStringResult = '';
        //csvStringResult += keys.join(columnDivider);
        csvStringResult += ['KDNR Name','Company Name','Billing Country','Billing City','Payment Type','REVENUE R12M','Created Date','Included KDNR','Parent KDNR' ];
        csvStringResult += lineDivider;
        for(var i=0; i < objectRecords.length; i++){   
            counter = 0;
            for(var sTempkey in keys) {
                var skey = keys[sTempkey] ;  
                if(counter > 0){ 
                    csvStringResult += columnDivider; 
                } 
                console.log(objectRecords[i][skey]);
                if(objectRecords[i][skey] != undefined){
                    csvStringResult += '"'+ objectRecords[i][skey]+'"';
                }else{
                    csvStringResult += '"'+ '' +'"';
                }
                counter++;
            }
            csvStringResult += lineDivider;
        } 
        return csvStringResult;        
    },
    filterDataFromAllData: function(component,queryTerm, searchField){
        try {
            var tempArray = allData.filter(function(item){
                var temp = '';
                if(searchField === 'Profile_Linkable'){
                    temp = (item && item[searchField] && item[searchField].toString()) ? item[searchField].toString() : 'false';
                }else{
                    temp = (item && item[searchField] && item[searchField].toString()) || '' ? item[searchField].toString() : '';    
                }
                return temp.includes(queryTerm)
            });
            return tempArray;
        }
        catch(e) {
            alert(e);
        }
    },
    getMiniLayout:function(component, event, helper){ 
        var accountId = component.get("v.accountIdHover"); 
        var action = component.get("c.doMouseOverData");
        action.setParams({
            accountId : accountId
        });
        action.setStorable();
        action.setCallback(this,function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                console.log(JSON.stringify(response.getReturnValue()));
                component.set('v.mouseHoverData', response.getReturnValue());             
                component.set("v.hoverRow", parseInt(event.target.dataset.index));
                component.set("v.togglehover",true);
            }
        });
        $A.enqueueAction(action);
    },
    sortBy: function(component, field) {
        var sortAsc = component.get("v.sortAsc"),
            sortField = component.get("v.sortField"),
            data = window.allData,
            sortAsc = field == sortField? !sortAsc: true;
        data.sort(function(a,b){
            var t1 = a[field] == b[field],
                t2 = a[field] > b[field];
            return t1? 0: (sortAsc?-1:1)*(t2?-1:1);
        });
        component.set("v.sortAsc", sortAsc);
        component.set("v.sortField", field);
        component.set("v.data", data);
    }
});

.THIS .kdnrClass{
    font-family: 'Roboto', sans-serif;
    font-weight: 600;
    font-size: 12px;
    line-height: 1.42857;
    color: #ff5f00 !important;
    font-weight: bold !important;
}
.THIS .slds-text-title_caps{
    color:black;    
    background:#eeeeee;
}

public class OverviewDetailsCtrl {
    @AuraEnabled
    public static List<Account> getLimitedAccounts(){
        List<Account> accounts = [SELECT
               Id, Name
               FROM Account ORDER BY CreatedDate LIMIT 15000];
        return accounts;
    }
}



Featured

What is Cryptography in salesforce and what are all the algorithms provided by them ?

A). It is a security protocal between two systems. Lets say we are integration two systems without any encrytion mechanism then hackers wil...

Popular