Get Selected Record Id from Custom Iteration in Lightning Web Component : sanketthoughts
by: sanketthoughts
blow post content copied from Salesforce Diaries
click here to view original post
A very common use-case in Lightning Web Component is iterating a list over an array in HTML file using for:each or iterator directive. Many times as a developer, we have to do something on the items based on user interaction. You would definitely require to get selected record id from custom iteration. Let’s see an working example:-
Problem Statement
You have to iterate over a list of contact records and show the contact names as list. The business wants to have a button to navigate to the contact record page in Salesforce on onclick of it.
Solution
We are going to build a Lightning Web Component to fetch contact list and iterate using for:each directive. Let’s create a Lightning Web Component with name renderList in your visual studio code.
renderList.html
The html file has a lightning card and for:each directive to iterate. We are using lightning-layout to show contact name and buttons to navigate. We have two buttons for each row. One of them has name attribute and another one has data attribute. Those attribute has been assigned with record id of the record.
<template>
<lightning-card title="HelloForEach" icon-name="custom:custom14">
<ul class="slds-m-around_medium">
<template for:each={contacts} for:item="contact">
<lightning-layout multiple-rows key={contact.Id}>
<lightning-layout-item size="12" small-device-size="6" medium-device-size="4" large-device-size="4" padding="around-small">
{contact.Name}
</lightning-layout-item>
<lightning-layout-item size="12" small-device-size="6" medium-device-size="4" large-device-size="4" padding="around-small">
<lightning-button name={contact.Id} label="Navigate - Approach 1" onclick={handleNavigateByNameAttribute}></lightning-button>
<lightning-button data-id={contact.Id} label="Navigate - Approach 1" onclick={handleNavigateByDataAttribute}></lightning-button>
</lightning-layout-item>
</lightning-layout>
</template>
</ul>
</lightning-card>
</template>
renderList.js
The JavaScript file imports NavigationMixin module and the apex method. It has connectedCallback to call the apex method and assign the returned value to a property. The two handlers which demonstrate the way to get id of the selected row and navigate to the record.
Approach 1 – We access the value of selected record id using event.target.name.Check handleNavigateByNameAttribute method.
Approach 2 – We access the value of selected record id using event.target.dataset.id as the name of data attribute was data-id. Check handleNavigateByDataAttribute method.
import { LightningElement } from 'lwc';
import fetchContact from '@salesforce/apex/ContactController.fetchContact';
import { NavigationMixin } from 'lightning/navigation';
export default class CustomIteration extends NavigationMixin(LightningElement) {
contacts;
error;
connectedCallback(){
fetchContact({}).then(result => {
this.contacts = result;
}).catch(error => {
this.error = error;
});
}
handleNavigateByNameAttribute(event){
//getting record id using name attribute
const selectedRecordId = event.target.name;
this[NavigationMixin.Navigate]({
type: 'standard__recordPage',
attributes: {
recordId: selectedRecordId,
objectApiName: 'Contact', // objectApiName is optional
actionName: 'view'
}
});
}
handleNavigateByDataAttribute(event){
//getting record id using using data-attributes
const selectedRecordId = event.target.dataset.id;
this[NavigationMixin.Navigate]({
type: 'standard__recordPage',
attributes: {
recordId: selectedRecordId,
objectApiName: 'Contact', // objectApiName is optional
actionName: 'view'
}
});
}
}
customIteration.js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>50.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__RecordPage</target>
<target>lightning__AppPage</target>
<target>lightning__HomePage</target>
</targets>
</LightningComponentBundle>
We have apex controller as well. The name of apex class is ContactController. Create the apex class with the same name and paste the below code.
public with sharing class ContactController {
@AuraEnabled
public static List<Contact> fetchContact(){
try {
List<Contact> contactList = new List<Contact>();
contactList = [select id, Name from Contact order by Name ASC limit 10];
return contactList;
} catch (Exception e) {
throw new AuraHandledException(e.getMessage());
}
}
}
Demo – Get Selected Record Id from Custom Iteration
The post Get Selected Record Id from Custom Iteration in Lightning Web Component appeared first on Salesforce Diaries.
November 16, 2020 at 03:30PM
Click here for more details...
=============================
The original post is available in Salesforce Diaries by sanketthoughts
this post has been published as it is through automation. Automation script brings all the top bloggers post under a single umbrella.
The purpose of this blog, Follow the top Salesforce bloggers and collect all blogs in a single place through automation.
============================
Post a Comment