function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
LinThawLinThaw 

Paging Sorting Error

Hi there,

I got following error when I press column header to sort.
I got error when my data records are between 10 and 19 records.
but when i have less than 10 or more than 19 records, there is no error occur.

I pressed Name column 2 times and Reporting Date column 1 time.

Error:
--------
Sorry to interrupt
This page has an error. You might just need to refresh it.
rerender threw an error in 'aura:iteration' [Failed to execute 'insertBefore' on 'Node': The new child element contains the parent.]
Failing descriptor: {aura:iteration}
--------

Source
-------
public class PagingSortingController2 {
	@AuraEnabled
    public static List<DailyReport__c> getDailyReports() {

        String usrId = '0057F000002T3GuQAK';
        String strDate = '2018-2-6';
        Date dt = Date.valueOf(strDate);
        
        List<DailyReport__c> dReports = [SELECT Id, Name, ReportingDate__c FROM DailyReport__c Where ReportingDate__c =: dt AND Applicant__c =: usrId];
       
        return dReports;
    }
}

pagingSorting2.app
<aura:application extends="force:slds" controller="PagingSortingController2">
    <aura:attribute type="DailyReport__c[]"    name="allAccounts" />
    <aura:attribute type="DailyReport__c[]"    name="currentList" />
    <aura:attribute type="Integer"      name="pageNumber"		default="1" />
    <aura:attribute type="Integer"      name="maxPage"			default="1" />
    <aura:attribute type="String"       name="sortField" />
    <aura:attribute type="Boolean"		name="sortAsc" />
    <aura:handler name="init"			value="{!this}"			action="{!c.doInit}" />
    <aura:handler name="change"			value="{!v.pageNumber}"	action="{!c.renderPage}" />
    
    <table class="slds-table slds-table--bordered slds-table--cell-buffer">
        <thead>
            <tr class="slds-text-title--caps">
                <th scope="col">
                    <div onclick="{!c.sortByName}"
                         class="slds-truncate"
                         title="Report Name">
                        Report Name
                        <aura:if isTrue="{!v.sortField=='Name'}">
                            <span>
                                <aura:if isTrue="{!v.sortAsc}">
                                    &#8593;
                                    <aura:set attribute="else">
                                        &#8595;
                                    </aura:set>
                                </aura:if>
                            </span>
                        </aura:if>
                    </div>
                </th>
                <th scope="col">
                    <div onclick="{!c.sortByReportingDate}"
                         class="slds-truncate"
                         title="Reporting Date">
                        Reporting Date
                        <aura:if isTrue="{!v.sortField=='ReportingDate__c'}">
                            <span>
                                <aura:if isTrue="{!v.sortAsc}">
                                    &#8593;
                                    <aura:set attribute="else">
                                        &#8595;
                                    </aura:set>
                                </aura:if>
                            </span>
                        </aura:if>
                    </div>
                </th>
            </tr>
        </thead>
        <tbody>
            <aura:iteration items="{!v.currentList}"
                            var="record">
                <tr>
                    <th data-label="Report Name">
                        <div class="slds-truncate" title="{!record.Name}">
                            {!record.Name}
                        </div>
                    </th>
                    <th data-label="Reporting Date">
                        <div class="slds-truncate" title="{!record.ReportingDate__c}">
                            {!record.ReportingDate__c}
                        </div>
                    </th>
                </tr>
            </aura:iteration>
        </tbody>
    </table>
    
    <c:pagination2 currentPageNumber="{!v.pageNumber}" 
                  maxPageNumber="{!v.maxPage}" />
</aura:application>

pagingSorting2Controller.js
({
	doInit: function(component, event, helper) {
        var action = component.get("c.getDailyReports");
        action.setCallback(this, function(result) {
            var records = result.getReturnValue();
            component.set("v.allAccounts", records);
            component.set("v.maxPage", Math.floor((records.length+9)/10));
            helper.sortBy(component, "Name");
        });
        $A.enqueueAction(action);
	},
    sortByName: function(component, event, helper) {
        helper.sortBy(component, "Name");
    },
    sortByReportingDate: function(component, event, helper) {
        helper.sortBy(component, "ReportingDate__c");
    },
    renderPage: function(component, event, helper) {
        helper.renderPage(component);
    },
})

pagingSorting2Helper.js

({
    sortBy: function(component, field) {
        var sortAsc = component.get("v.sortAsc"),
            sortField = component.get("v.sortField"),
            records = component.get("v.allAccounts");
        sortAsc = sortField != field || !sortAsc;
        records.sort(function(a,b){
            var t1 = a[field] == b[field],
                t2 = (!a[field] && b[field]) || (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.allAccounts", records);
        this.renderPage(component);
    },
	renderPage: function(component) {
		var records = component.get("v.allAccounts"),
            pageNumber = component.get("v.pageNumber"),
            pageRecords = records.slice((pageNumber-1)*10, pageNumber*10);
        component.set("v.currentList", pageRecords);
	}
})

pagination2.cmp
<aura:component >
    <aura:attribute name="currentPageNumber" type="Integer" required="true" />
    <aura:attribute name="maxPageNumber" type="Integer" required="true" />

    <div class="slds-button-group" role="group">
        <button onclick="{!c.firstPage}" class="slds-button slds-button--neutral">
            First
        </button>
        <button onclick="{!c.prevPage}" class="slds-button slds-button--neutral">
            Prev
        </button>
        <button class="slds-button slds-button--neutral">
            {!v.currentPageNumber} / {!v.maxPageNumber}
        </button>
        <button onclick="{!c.nextPage}" class="slds-button slds-button--neutral">
            Next
        </button>
        <button onclick="{!c.lastPage}" class="slds-button slds-button--neutral">
            Last
        </button>
    </div>
</aura:component>

pagination2Controller.js
({
    firstPage: function(component, event, helper) {
        component.set("v.currentPageNumber", 1);
    },
    prevPage: function(component, event, helper) {
        component.set("v.currentPageNumber", Math.max(component.get("v.currentPageNumber")-1, 1));
    },
    nextPage: function(component, event, helper) {
        component.set("v.currentPageNumber", Math.min(component.get("v.currentPageNumber")+1, component.get("v.maxPageNumber")));
    },
    lastPage: function(component, event, helper) {
        component.set("v.currentPageNumber", component.get("v.maxPageNumber"));
    }
})


-------
Thanks,
Regards,
LinThaw
 
LinThawLinThaw
How?