Hello friends, today we are going to discuss Mass Delete Records in LWC Datatable. Delete Multiple Records in a DataTable is a crucial aspect of any web application, and providing users with the ability to delete multiple records in a DataTable can significantly enhance the user experience. In this blog, we’ll explore the process of implementing a feature that allows users to seamlessly delete multiple records from an LWC DataTable – a common requirement in many dynamic web applications.
Also, check this: Delete Records in Flow Salesforce
Key Highlights :
- User Empowerment: Give users the ability to manage data efficiently without relying on manual deletion processes.
- Efficiency Amplified: Quickly purge unwanted records, maintaining a lean and responsive Salesforce environment.
- Customizable Experience: Tailor the mass delete functionality to align with your organization’s specific requirements.
Code :
MassDeleteRecordInDatatableHandler.cls
public class MassDeleteRecordInDatatableHandler {
@AuraEnabled(cacheable = true)
public static List<Account> fetchAccount() {
return [ SELECT Id, Name, Fax, Phone FROM Account limit 10];
}
@AuraEnabled
public static void deleteSelectedAccounts(List<Account> accountList) {
delete accountList;
}
}
massDeleteRecordInDatatableLWC.html :
<template>
<lightning-card title="Mass Delete Records in LWC Datatable" icon-name="utility:recycle_bin_full">
<div style="width: auto;">
<template if:true={data}>
<lightning-layout>
<lightning-layout-Item padding="around-small" size="10">
<span><p> <b><i>Selected Records: {recordsCount}</i></b></p></span>
</lightning-layout-Item>
<lightning-layout-Item padding="around-small" size="2">
<lightning-button label={buttonLabel} icon-name="utility:delete" disabled={isTrue}
variant="destructive" onclick={deleteRecords}>
</lightning-button>
</lightning-layout-Item>
</lightning-layout>
<lightning-datatable data={data} columns={columns} key-field="id" onrowselection={getSelectedRecords}>
</lightning-datatable>
</template>
</div>
</lightning-card>
</template>
massDeleteRecordInDatatableLWC.js :
import { LightningElement, track, wire } from 'lwc';
import fetchAccount from '@salesforce/apex/MassDeleteRecordInDatatableHandler.fetchAccount';
import deleteSelectedAccounts from '@salesforce/apex/MassDeleteRecordInDatatableHandler.deleteSelectedAccounts';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { refreshApex } from '@salesforce/apex';
const columns = [
{
label: 'Name',
fieldName: 'Name'
}, {
label: 'Fax',
fieldName: 'Fax'
}, {
label: 'Phone',
fieldName: 'Phone',
type: 'phone'
}
];
export default class MassDeleteRecordInDatatableLWC extends LightningElement {
@track data;
@track columns = columns;
@track buttonLabel = 'Delete Records';
@track isDisableTrue = false;
@track recordsCount = 0;
selectedRecords = [];
refreshTable;
error;
@wire(fetchAccount)
Accounts(result) {
this.refreshTable = result;
if (result.data) {
this.data = result.data;
this.error = undefined;
} else if (result.error) {
this.error = result.error;
this.data = undefined;
}
}
getSelectedRecords(event) {
const selectedRows = event.detail.selectedRows;
this.recordsCount = event.detail.selectedRows.length;
this.selectedRecords = new Array();
selectedRows.forEach(ele=>{
this.selectedRecords.push(ele);
});
}
deleteRecords() {
if (this.selectedRecords) {
this.buttonLabel = 'Processing..';
this.isDisableTrue = true;
deleteSelectedAccounts({ accountList: this.selectedRecords }).then(result => {
console.log('result =>', result);
this.buttonLabel = 'Delete Records';
this.isDisableTrue = false;
this.dispatchEvent(
new ShowToastEvent({
title: 'Success!!',
message: this.recordsCount + ' Account records deleted.',
variant: 'success'
}),
);
this.template.querySelector('lightning-datatable').selectedRows = [];
this.recordsCount = 0;
return refreshApex(this.refreshTable);
}).catch(error => {
this.buttonLabel = 'Delete Records';
this.isDisableTrue = false;
this.dispatchEvent(
new ShowToastEvent({
title: 'Error while delete Accounts',
message: JSON.stringify(error),
variant: 'error'
}),
);
});
}
}
}
contactLIghtingDataTable.js-meta.xml
<?xml version="1.0"?> <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>57.0</apiVersion> <isExposed>true</isExposed> <targets> <target>lightning__HomePage</target> <target>lightning__Tab</target> </targets> </LightningComponentBundle>
