In my LWC I am using an Apex Class to return a Map<String,List> containing lists for Leads and Contacts.
I want to iterate this Map and use the individual lists in separate datatables.
I have this working when I configure the apex class to return just the lead List. However I cannot figure out the syntax for iterating the Map and returning the specific lists based on the Key. Below is the code
LWC .js
leadData = [];
leadWiredList;
count = 0;
@wire(getCampaignMemberList, {
campaignId: '$campaignId',
leadSearchKey: '$searchKey',
leadSortBy: '$sortedBy',
leadSortDirection: '$sortedDirection'
})
wiredLeads(leadResponse){
this.leadWiredList = leadResponse;
const error = leadResponse.error;
if(leadResponse.data){
let tempList = [];
leadResponse.data.forEach((record) => {
let r = Object.assign({}, record);
r.LeadLink = '/' + r.Id;
r.SdrOwner = r.SDR_Owner__r?.Name;
tempList.push(r);
});
this.leadData = tempList;
console.log('Leads ' + this.leadData.length);
}else{
this.leadData = [];
}
}
Apex
@AuraEnabled(cacheable=true)
public static Map<String,List<Sobject>> getLeadsContacts(
//public static List<Sobject> getLeadsContacts(
String campaignId,
String leadSearchKey,
String leadSortBy,
String leadSortDirection
){
Map<String,List<Sobject>> leadsContactsMap = new Map<String,List<Sobject>>();
List<CampaignMember> campaignMembers = [
SELECT Id, Campaign.Name, LeadId, ContactId
FROM CampaignMember
WHERE CampaignId = :campaignId
AND (
Lead.OwnerId = :runningUserId
OR Contact.OwnerId = :runningUserId
)
];
List<String> leadIds = new List<String>();
List<String> contactIds = new List<String>();
for(CampaignMember cm : campaignMembers){
if(cm.LeadId != null){
leadIds.add('\'' + cm.LeadId + '\'');
}else{
contactIds.add('\'' + cm.ContactId + '\'');
}
}
String leadQuery =
'SELECT Id,'
+ 'Lead_Status_sort_order__c, SDR_Owner__r.Name, Name, email, Title, Company '
+ 'FROM Lead '
+ 'WHERE Id IN ' + leadIds;
if(leadSearchKey != null && leadSearchKey != '') {
String key = '%' + leadSearchKey + '%';
leadQuery +=
' AND Name LIKE :key';
}
if(leadSortBy != null && leadSortDirection != null) {
leadQuery += ' ORDER BY ' + leadSortBy + ' ' + leadSortDirection;
}
system.debug('Lead Query = ' + leadQuery);
List<Lead> leadlist = Database.query(leadQuery);
List<Contact> contactList = [
SELECT Id, Name, Email
FROM Contact
WHERE ID IN :contactIds
];
leadsContactsMap.put('leads', leadlist);
leadsContactsMap.put('contacts', contactList);
system.debug('leadsContactsMap = ' + leadsContactsMap);
return leadsContactsMap;
}