Skip to main content

Latest Post

Record Types & Page Layout Strategy

  Record Types & Page Layout Strategy 💬 In plain words:   Record Types let one object act like different forms for different teams. Different picklist values, page layouts, and processes — same Account object. Use them for truly different business processes. Not for cosmetic layout changes. 📌 Example:   One Account object, two businesses: 'Retail Customer' record type shows B2C picklist values and layout. 'Enterprise Client' shows contract fields and a different sales process. Same table, two costumes. 🧠 One object, many costumes:   A Record Type is a costume on the same object — different picklists and layouts, same table underneath. Concept Record Types split one object into business variants. •   Each type can carry its own subset of picklist values, its own business process — Lead, Case and Opportunity stages — and its own page layout per profile. •   Lightning has changed the calculus. Dynamic Forms and conditional comp...

Building a Full Dynamic LWC with Selected Rows Persistent in Filter Search - LWC DataTable

Introduction:

In this blog post, we will explore how to build a Lightning Web Component (LWC) that includes a dynamic datatable. We will focus on implementing a feature where selected rows persist even when filtering the search results. By the end of this tutorial, you will have a better understanding of how to create a fully functional and dynamic LWC datatable.


Prerequisites:


To follow along with this tutorial, you should have a basic understanding of Lightning Web Components (LWC) and have a Salesforce Developer Edition or any Salesforce environment with the necessary permissions to create and modify Lightning components.


Step 1: Setting up the LWC Component


First, let's create a new LWC component by navigating to the appropriate directory in your Salesforce DX project. Use the following command in the terminal:


sfdx force:lightning:component:create -n datatableWithSelection


This command will create a new LWC component with the name "datatableWithSelection" in your project's default LWC directory.


Step 2: Implementing the LWC DataTable


Open the newly created LWC component in your preferred code editor. Inside the HTML file (datatableWithSelection), replace the default code with the following:


<template>

    <lightning-card title="Data Table with Selected Rows Persistence">

        <div class="slds-m-around_medium">

            <lightning-input type="text" label="Filter" onchange={handleFilterChange}></lightning-input>

            <lightning-datatable

                key-field="id"

                data={filteredData}

                columns={columns}

                onrowselection={handleRowSelection}

                selected-rows={selectedRows}

            ></lightning-datatable>

        </div>

    </lightning-card>

</template>


Here, we have created a basic structure for our datatable component. We have included a lightning-input element for filtering, a lightning-datatable to display the data, and a lightning-card for overall styling.


Step 3: Defining JavaScript Functions and Variables


Switch to the JavaScript file (datatableWithSelection.js) and replace the default code with the following:


import { LightningElement, wire } from 'lwc';

import fetchData from '@salesforce/apex/DataTableController.fetchData';


export default class DatatableWithSelection extends LightningElement {

    filterText = '';

    data = [];

    selectedRows = [];

    columns = [

        { label: 'Name', fieldName: 'Name' },

        { label: 'Email', fieldName: 'Email' },

        { label: 'Phone', fieldName: 'Phone' }

    ];


    @wire(fetchData)

    wiredData({ error, data }) {

        if (data) {

            this.data = data;

        }

        // Handle error if necessary

    }


    get filteredData() {

        return this.data.filter((row) => {

            return row.Name.toLowerCase().includes(this.filterText.toLowerCase());

        });

    }


    handleFilterChange(event) {

        this.filterText = event.target.value;

    }


    handleRowSelection(event) {

        this.selectedRows = event.detail.selectedRows;

    }

}


In the above code, we import the fetchData Apex method to retrieve the data for our datatable. You will need to create an Apex class and method named DataTableController.fetchData to fetch the data from your Salesforce org. The filteredData getter filters the data based on the filter text entered in the input field. The handleFilterChange function updates the filter text whenever it changes. Lastly, the handleRowSelection function updates the selected rows array whenever a row is selected or deselected.


Step 4: Styling the Component (Optional)


If you want to add custom styles to your component, you can modify the CSS file (datatableWithSelection.css) as per your requirements.


Step 5: Using the Component


To use your newly created LWC component, add it to a Lightning page or any other appropriate location in your Salesforce org. For example, you can add it to a Lightning App Builder page by dragging and dropping the component into a desired location.


Conclusion:


Congratulations! You have successfully built a dynamic LWC datatable that allows selected rows to persist even when filtering the search results. By following this tutorial, you have learned how to create a functional and reusable component to enhance user experience when working with large datasets in Salesforce.


Feel free to customize this component further based on your specific requirements, such as adding pagination, sorting, or additional columns. Happy coding!

Popular Posts

Salesforce LWC Code for Multi-Select Lookup

Introduction: In Salesforce Lightning Web Components (LWC), implementing a multi-select lookup field can enhance the user experience and provide greater flexibility for selecting multiple related records. In this blog post, we will walk through the process of creating a multi-select lookup field using LWC. We will cover the required code snippets and provide step-by-step instructions to help you implement this functionality in your Salesforce org.