Hello friends, I am sharing the code for creating custom lead conversion popup in lightning web component. I hope you enjoy the blog post.
Create Custom Quick Action – Convert

Add “Convert” to Lead Page Layout

Start Coding
leadCreation.html
<template>
<header class="slds-modal__header">
Convert Lead
</header>
<div class="slds-m-top_medium"
style="text-align: center">
<lightning-button
class="buttonClass"
type="submit"
name="save"
label="Convert"
onclick={convertL}
></lightning-button>
<lightning-button
type="submit"
name="save"
label="Cancel"
onclick={closepopup}
></lightning-button>
</div>
<div class="standards">
<lightning-messages></lightning-messages>
<br/>
<h2>Convert Lead</h2>
<br/>
<div class="slds-grid">
<div class="slds-col" >
<span><lightning-input type="text" label="Record Owner" value={owner} readonly></lightning-input>
</span>
</div>
<div class="slds-col">
<span><lightning-input type="Checkbox" label="Send Email To Owner" onchange={checkSendEmail}></lightning-input>
</span></div>
</div>
<div class="slds-grid">
<div class="slds-col slds-size_1-of-2 ">
<span>
<lightning-combobox
name="CreateOption"
label="Create Option"
placeholder="Select One"
options={createOptions}
onchange={handleChange}
></lightning-combobox>
</span> </div>
<template if:true={showAttachTo}> <div class="slds-col slds-size_1-of-2 test">
<span><c-lwc-Custom-Lookup objectname="Account" fieldname="Name" selectrecordid={selectRecordId}
selectrecordname={selectrecordname} iconname = "action:new_account" onselected={selectedrecords}></c-lwc-Custom-Lookup>
</span>
</div></template>
</div>
<div class="slds-grid">
<div class="slds-col slds-size_1-of-2">
<lightning-combobox
name="status"
label="Converted Status"
value={value}
placeholder="Qualified"
options={optionsStatus}
></lightning-combobox>
</div>
<div class="slds-col slds-size_1-of-2">
<lightning-input name='opportunityName' type="text" label="Opportunity Name" onchange={checkinput} value={oppName}></lightning-input>
</div>
</div>
<br/>
<div class="slds-grid">
<div class="slds-col slds-size_1-of-2">
<lightning-input name='noOpp' type="Checkbox" label="Do not create new opportunity upon conversion" onchange={checkSendEmail}></lightning-input>
</div>
</div>
</div>
<br/>
<div class="slds-m-top_medium"
style="text-align: center">
<lightning-button
type="submit"
name="save"
label="Convert"
onclick={convertL}
></lightning-button>
<lightning-button
class="buttonClass"
type="submit"
name="save"
label="Cancel"
onclick={closepopup}
></lightning-button>
<br/>
<br/>
</div>
</template>
leadCreation.js
/* eslint-disable no-undef */
/* eslint-disable no-restricted-globals */
/* eslint-disable no-console */
/* eslint-disable no-alert */
/* eslint-disable no-dupe-class-members */
import { LightningElement,api,track} from 'lwc';
//import {getRecord,getFieldValue} from 'lightning/uiRecordApi';
import {ShowToastEvent} from 'lightning/platformShowToastEvent';
import Subject_FIELD from '@salesforce/schema/Task.Subject';
import ActivityDate_FIELD from '@salesforce/schema/Task.ActivityDate';
import { NavigationMixin } from 'lightning/navigation';
//import CallDurationInSeconds_FIELD from '@salesforce/schema/Task.CallDurationInSeconds';
//import Type_FIELD from '@salesforce/schema/Task.Type';
import Description_FIELD from '@salesforce/schema/Task.Description';
import Status_FIELD from '@salesforce/schema/Task.Status';
import Priority_FIELD from '@salesforce/schema/Task.Priority';
//import IsReminderSet_FIELD from '@salesforce/schema/Task.IsReminderSet';
import convertLead from '@salesforce/apex/leadConversion.convertLead';
export default class LeadCreation extends NavigationMixin(LightningElement) {
@track error;
@track selectRecordId;
@track selectrecordname;
@track hasValue=false;
hastrue=true;
hasfalse=false;
@track showAttachTo=true;
// this object have record information
@track taskRecord = {
Subject : Subject_FIELD,
ActivityDate : ActivityDate_FIELD,
// CallDurationInSeconds : CallDurationInSeconds_FIELD,
Description : Description_FIELD,
Status:Status_FIELD,
Priority:Priority_FIELD,
//IsReminderSet:IsReminderSet_FIELD,
// convertLead:convertLead
};
@track sendEmailCheckbox;
@api recordId;
@api company;
@api owner;
@api LeadSource;
//@track recordId;
@track Task;
@track oppName;
accName;
productid;
accRecordId;
donotcreateopp=false;
selectedRec;
get createOptions(){
return[
{ label: 'Create New', value: 'CreateNew' },
{ label: 'Attach to exsisting Client/prospect', value: 'Existing' }
]
}
get options() {
return [
{ label: 'Create New: Test Lead', value: 'New' },
{ label: 'In Progress', value: 'In Progress' },
{ label: 'Completed', value: 'Completed' },
];
}
get optionsStatus() {
return [
{ label: 'Not Started', value: 'Not Started' },
{ label: 'In Progress', value: 'In Progress' },
{ label: 'Completed', value: 'Completed' },
{ label: 'Deferred', value: 'Deferred' },
];
}
get optionsType1() {
return [
{ label: 'Low', value: 'Low' },
{ label: 'Normal', value: 'Normal' },
{ label: 'High', value: 'High' },
];
}
get optionsSubject() {
return [
{ label: 'Call', value: 'Call' },
{ label: 'Email', value: 'Email' },
{ label: 'Send Letter', value: 'Send Letter' },
{ label: 'Send Quote', value: 'Send Quote' },
];
}
get optionsType() {
return [
{ label: 'Call', value: 'Call' },
{ label: 'Meeting', value: 'Meeting' },
{ label: 'Other', value: 'Other' },
{ label: 'Email', value: 'Email' },
];
}
openTask(){
this.hasValue=this.hastrue;
}
checkSendEmail(event){
this.sendEmailCheckbox=event.target.checked;
if(event.target.name==='noOpp'){
this.donotcreateopp=event.target.checked;
}
}
convertL(){
if(this.hasValue===false){
this.taskRecord=null;
}
console.log(this.taskRecord);
convertLead({'recordId':this.recordId,'sendEmailCheckbox':this.sendEmailcheckbox,'donotcreateopp':this.donotcreateopp,'ExistingAccount':this.selectedRec,
'ProductId':this.productid,'oppName':this.oppName,'taskRec':this.taskRecord})
.then(result => {
// Clear the user enter values
this.taskRecord = {};
this.accRecordId=result;
window.console.log('result ===> '+result);
// Show success messsage
this[NavigationMixin.Navigate]({
type: 'standard__recordPage',
attributes: {
recordId: this.accRecordId,
objectApiName: 'Account',
actionName: 'view'
}
});
this.dispatchEvent(new ShowToastEvent({
title: 'Success!!',
message: 'Lead Converted Successfully!!',
variant: 'success'
}),);
})
.catch(error => {
this.error = error.message;
console.log(this.error);
});
}
selectedrecords(event){
this.selectedRec = event.detail.currentRecId;
}
checkinput(event){
if(event.target.name==='createOption'){
this.accName=event.target.value;
}
if(event.target.name==='productid'){
this.productid=event.target.value;
}
if(event.target.name==='opportunityName'){
this.oppName=event.target.value;
}
}
handleChange(event){
if(event.target.name==='Subject'){
this.taskRecord.Subject=event.target.value;
}
if(event.target.name==='ActivityDate'){
this.taskRecord.ActivityDate=event.target.value;
}
if(event.target.name==='CallDurationInSeconds'){
this.taskRecord.CallDurationInSeconds=event.target.value;
}
if(event.target.name==='Description'){
this.taskRecord.Description=event.target.value;
}
if(event.target.name==='Status'){
this.taskRecord.Status=event.target.value;
}
if(event.target.name==='Priority'){
this.taskRecord.Priority=event.target.value;
}
if(event.target.name==='IsReminderSet'){
this.taskRecord.IsReminderSet=event.target.value;
}
if(event.target.name==='CreateOption'){
if(event.target.value==='CreateNew'){
this.showAttachTo=this.hasfalse;
}
if(event.target.value==='Existing'){
this.showAttachTo=this.hastrue;
}
}
}
}
leadCreation.css
h1{
background-color: #F3F2F2;
font-weight: bold;
margin-left: -24px;
}
h2{
background-color: #F3F2F2;
font-weight: bold;
margin-left: -185px;
}
.slds-modal__container{
max-width: 70rem !important;
width:80% !important;
}
.modal-body.scrollable.slds-modal__content.slds-p-around--medium{
max-height:700px;
}
.test{
margin-top: -25px;
}
.slds-input:required{
max-width: 200px !important;
}
.slds-form-element{
width: 200px !important;
}
.standards{
padding-left: 160px;
}
leadCreation.js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>47.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__AppPage</target>
<target>lightning__RecordPage</target>
<target>lightning__HomePage</target>
<target>lightning__UtilityBar</target>
</targets>
</LightningComponentBundle>
leadCreation.apxc
public class leadConversion {
@auraEnabled
Public static Id convertLead(Id recordId,string sendEmailCheckbox,boolean donotcreateopp,Id ExistingAccount,string productId,String oppName,Task taskRec){
system.debug('---'+taskRec);
system.debug('---'+oppName);
system.debug('---'+ExistingAccount);
system.debug('---'+donotcreateopp);
Database.LeadConvert lc=new Database.LeadConvert();
lc.setLeadId(recordId);
if(ExistingAccount!=null){
lc.setAccountId(ExistingAccount);
}
if(sendEmailCheckbox=='options'){
lc.setSendNotificationEmail(true);
}
if(donotcreateopp){
lc.setDoNotCreateOpportunity(true);
}
else{
System.debug('--->'+oppName);
lc.setOpportunityName(oppName);
}
leadstatus ls=[select id,MasterLabel,IsConverted from LeadStatus where IsConverted=true limit 1];
lc.setConvertedStatus(ls.MasterLabel);
Database.LeadConvertResult lcr=Database.convertLead(lc);
id accid=lcr.getAccountId();
Id conid=lcr.getContactId();
Id oppId=lcr.getOpportunityId();
try{
if(taskRec!=null){
taskRec.whoId=conid;
taskRec.whatId=oppid;
insert taskRec;
}
system.debug('id---'+taskRec);
}
catch(Exception ex) {
System.debug('test'+ex.getMessage());
throw new AuraHandledException(ex.getMessage());
}
return accid;
}
@auraEnabled
Public static Lead getLeadInformation(Id recordId){
Lead IsLead=[Select Id,Company,LeadSource,owner.Name from lead where Id=:recordId];
return IsLead;
}
@auraEnabled
Public static Id CreateTask(Id recordId,Task taskRec,Id ownerId){
try{
if(taskRec!=null){
taskRec.WhatId=recordId;
taskRec.ownerId=ownerId;
insert taskRec;
}
system.debug('id---'+taskRec);
}
catch(Exception ex) {
System.debug('test'+ex.getMessage());
throw new AuraHandledException(ex.getMessage());
}
return taskRec.Id;
}
@auraEnabled
Public static Account getAccountInformation(Id recordId){
Account IsAccount=[Select Id,Name,Type,phone,(select Id,Name from opportunities),(Select Id,Name from contacts) from Account where Id=:recordId];
return IsAccount;
}
@AuraEnabled(cacheable=true)
public static List<SObJectResult> getResults(String ObjectName, String fieldName, String value) {
List<SObJectResult> sObjectResultList = new List<SObJectResult>();
system.debug(fieldName+'-------------'+ObjectName+'---++----------'+value);
if(String.isNotEmpty(value))
for(sObject so : Database.Query('Select Id,'+fieldName+' FROM '+ObjectName+' WHERE '+fieldName+' LIKE \'%' + value + '%\'')) {
String fieldvalue = (String)so.get(fieldName);
sObjectResultList.add(new SObjectResult(fieldvalue, so.Id));
}
return sObjectResultList;
}
public class SObJectResult {
@AuraEnabled
public String recName;
@AuraEnabled
public Id recId;
public SObJectResult(String recNameTemp, Id recIdTemp) {
recName = recNameTemp;
recId = recIdTemp;
}
}
}
Together we can learn faster
You can join Whatsapp Group
You can join Facebook group
You can join Twitter
You can join Instagram