Skip to main content

Full Dynamic Working Code for Lookup Field in LWC DataTable Inline Edit

Introduction:

In this blog post, we will explore how to implement a Lookup field in a Lightning Web Component (LWC) DataTable with inline editing functionality. We'll provide a step-by-step guide along with a complete working code example that you can use as a reference.

Prerequisites:


To follow along with this tutorial, you should have a basic understanding of LWC, JavaScript, and HTML. Additionally, you should have a Salesforce developer account or access to a Salesforce org for testing.


Step 1: Set Up the Project


1. Create a new LWC component by running the following command in your terminal:

  

   sfdx force:lightning:component:create -n LookupDataTable -d force-app/main/default/lwc


2. Navigate to the newly created component directory:

 

   cd force-app/main/default/lwc/LookupDataTable


Step 2: Design the UI


1. Open the LookupDataTable file and replace the existing code with the following markup:


   <template>

     <lightning-datatable

       key-field="id"

       data={data}

       columns={columns}

       onsave={handleSave}

       draft-values={draftValues}

     ></lightning-datatable>

   </template>


2. Save the file.


Step 3: Implement the JavaScript Logic


1. Open the LookupDataTable.js file and replace the existing code with the following:


   import { LightningElement, wire, track } from 'lwc';

   import { updateRecord } from 'lightning/uiRecordApi';


   const columns = [

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

     { label: 'Account', fieldName: 'AccountId', type: 'lookup', editable: true },

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

   ];


   export default class LookupDataTable extends LightningElement {

     @track data = [];

     @track columns = columns;

     @track draftValues = [];


     // Fetch data from Salesforce using Apex or wire adapter

     // For brevity, we are skipping the data retrieval logic


     handleSave(event) {

       const updatedFields = event.detail.draftValues;

       const promises = updatedFields.map((record) => {

         const fields = {};

         fields.Id = record.Id;

         fields.AccountId = record.AccountId;

         return updateRecord({ fields });

       });


       Promise.all(promises)

         .then(() => {

           this.draftValues = [];

           // Handle successful save

         })

         .catch((error) => {

           // Handle error

         });

     }

   }

   

2. Save the file.


Step 4: Test the Component

  1. Deploy the component to your Salesforce org using the Salesforce CLI or any other preferred deployment method.
  2. Create a Lightning Page or open an existing one where you want to add the LookupDataTable component.
  3. Drag and drop the LookupDataTable component onto the Lightning Page.
  4. Save and activate the Lightning Page.
  5. Preview the Lightning Page and verify that the LookupDataTable component is displayed.
  6. Try editing the fields in the table and observe the inline editing functionality.

Conclusion:


Congratulations! You have successfully implemented a Lookup field in an LWC DataTable with inline editing functionality. You can now use this code as a starting point for building more complex LWC components with dynamic lookup fields. Feel free to customize the code further to meet your specific requirements.


Note: The provided code is a simplified example for educational purposes and might require adjustments based on your specific use case or Salesforce org configuration.


Remember to test your code thoroughly in a development environment before deploying it to production. Happy coding!