SCENARIO
While working on one of the requirements for an Automobile sector project for a client based out of Dallas, Texas, there was a requirement to add data using a form in LWC and display it into the dataTable without storing it into sObject/database.
CHALLENGE
Although the requirement seems easy, we faced challenges while displaying records into the dataTable and reRendering it when a new record is added.
APPROACH
To display records without storing them into sObject/database, We used a JSON object that will be responsible to store all the data to be displayed in the dataTable.
Also, we declared that JSON object as a reactive property using the @track decorator. So the table can be reRendered automatically when the value of that variable is changed/updated.
Also, we declared that JSON object as a reactive property using the @track decorator. So the table can be reRendered automatically when the value of that variable is changed/updated.
Data.html
<template> <lightning-card title="Add data into Datatable"> <lightning-layout> <lightning-input class="slds-p-around_medium" label="Make" type="string" name="Make" onchange={makeChangedHandler} required="true"> </lightning-input> <lightning-input class="slds-p-around_medium" label="Model" type="string" name="Model" onchange={modelChangedHandler} required="true"> </lightning-input> <lightning-input class="slds-p-around_medium" label="Year" type="date" name="Year" onchange={yearChangedHandler} required="true"> </lightning-input> </lightning-layout> <lightning-button class="slds-m-left_x-small" label="Display" variant="brand" onclick={handleClick}> </lightning-button> <lightning-datatable key-field="id" id="datatable" data={fields} columns={columns}> </lightning-datatable> </lightning-card> </template>
Data.js
import { LightningElement,track } from 'lwc'; export default class Data extends LightningElement { columns = [{ label: 'Make', fieldName: 'Make', type: 'text', sortable: true }, { label: 'Model', fieldName: 'Model', type: 'text', sortable: true }, { label: 'Year', fieldName: 'Year', type: 'Date', sortable: true }, ]; strMake; strModel; strYear; @track fields =[]; makeChangedHandler(event){ this.strMake = event.target.value; } modelChangedHandler(event){ this.strModel = event.target.value; } yearChangedHandler(event){ this.strYear = event.target.value; } handleClick(){ if(this.strMake && this.strModel && this.strYear) { this.fields = [...this.fields,{'Make' : this.strMake, 'Model' : this.strModel, 'Year' : this.strYear}]; } this.strMake =''; this.strModel =''; this.strYear =''; //code to clear field once values are entered this.template.querySelectorAll('lightning-input').forEach(element => { element.value = null; }); } }
There are 3 input fields in the form. Whenever the values will be entered in these fields, it will get stored in their respective variables (strMake, strModel, strYear).
On click of Display button, these 3 inputs will be validated and pushed into an array, which is then used to display data in the data table. Also, it will clear these 3 input fields and allow users to enter another record.
As the array is declared as a reactive property, it will reRender the table automatically to display the newly created record.
If you have any questions you can reach out to our Salesforce Consulting team
here.
No comments:
Post a Comment