In this blog post, we’ll explore the process of showcasing a list of cases using the wire service. I trust you’ll find this article engaging.
Ready to dive in? Let’s get started!
caseManager.html
<template>
<div class="slds-box slds-p-around_small" style="background-color:rgb(102 255 187);">
<lightning-input label="Enter Case Number"
placeholder="Case Number"
value={searchCaseNumber}
onchange={caseNumberChange}>
</lightning-input>
<lightning-button label="Search" onclick={searchRecords}></lightning-button>
<template if:true={cases.data}>
<div class="slds-grid slds-wrap sds-gutters">
<template for:each={cases.data} for:item="eachCase">
<div class="slds-col slds-size_1-of-3 slds-p-around_small" key={eachCase.Id}>
<lightning-card title={eachCase.CaseNumber} key={eachCase.Id}>
<div slot="actions">
<template if:true={eachCase.IsClosed}>
<span style="color: green;font-weight: bold;">Already Closed</span>
</template>
<template if:false={eachCase.IsClosed}>
<lightning-button variant="success"
name={eachCase.Id}
value={eachCase.Id}
label="Close Case"
onclick={passCaseToClose}
></lightning-button>
</template>
</div>
<p class="slds-p-horizontal_small">
<span style="color: green;">Description:</span>{eachCase.Description}
</p>
<p class="slds-p-horizontal_small">
<span style="color: green;">Status:</span>{eachCase.Status}
</p>
<p class="slds-p-horizontal_small">
<span style="color: green;">Priority:</span>{eachCase.Priority}
</p>
<p style="color: green;" slot="footer">
{eachCase.Subject}
</p>
</lightning-card>
</div>
</template>
</div>
</template>
</div>
</template>
caseManager.js
import { LightningElement,wire } from 'lwc';
import fetchAllCases from '@salesforce/apex/CasesManager.fetchAllCases';
import fetchCaseDetails from '@salesforce/apex/CasesManager.fetchCaseDetails';
import closeCase from '@salesforce/apex/CasesManager.closeCase';
export default class CaseManager extends LightningElement {
searchCaseNumber='';
cases;
errorDetails;
caseCloseMessage;
@wire(fetchAllCases) cases;
caseNumberChange(event){
this.searchCaseNumber = event.target.value;
}
searchRecords(){
fetchCaseDetails({caseNumber:this.searchCaseNumber})
.then(result=>{
this.cases.data = result;
})
.catch(error=>{
this.errorDetails = error;
});
}
passCaseToClose(event){
this.caseId = event.target.name;
closeCase({caseId:this.caseId})
.then(result=>{
this.caseCloseMessage = result;
})
.catch(error=>{
this.errorDetails = error;
});
}
}
CaseManager.apxc
public with sharing class CasesManager {
@AuraEnabled(cacheable=true)
public static list<case> fetchAllCases(){
return [SELECT Id,Account.Name,CaseNumber,IsClosed,Origin,Description,Priority,Subject,Status
FROM CASE];
}
@AuraEnabled(cacheable=true)
public static list<case> fetchCaseDetails(string caseNumber){
if(string.isNotBlank(caseNumber)){
string searchCase ='%'+caseNumber+'%';
return [SELECT Id,Account.Name,CaseNumber,IsClosed,Origin,Description,Priority,Subject,Status
FROM CASE
where caseNumber like :searchCase];
}
else{
return NULL;
}
}
@AuraEnabled
public static string closeCase(string caseId){
string message;
try{
case cs = new case(Id=caseId);
cs.status='Closed';
update cs;
message = 'Success';
}
catch(Exception ex){
message = ex.getMessage();
}
return message;
}
}
