Saturday, 17 October 2020

LWC Multiple Records Select

public with sharing class OpportunityController {

  public static list<wrapperClass> listWrapper;

  @AuraEnabled(cacheable=true)  

  public static List<opportunity> fetchRecordList(){  

    return [SELECT Id, Name, StageName,Amount,owner.name From Opportunity LIMIT 5];  

  }  

  @AuraEnabled  

  public static void updateRecords(object[] recordList){  

    system.debug('...data...'+recordList);

    list<id> lstId = new list<id>();

    list<opportunity> lstopp = new list<opportunity>();

    if(!recordList.isEmpty() && recordList.size() > 0){        

        for(object objRecord : recordList){

          String jsonstring = Json.serialize(objRecord); 

          wrapperClass n = (wrapperClass)JSON.deserialize(jsonstring, wrapperClass.class);

          ID vID = String.valueof((n.BidNumber).Right(18));

          lstId.add(vID);

        }

        if(!lstId.isEmpty()){

          for(ID vID : lstId){

            opportunity objOpp = new opportunity();

            objOpp.id = vID;

            lstopp.add(objOpp);

          }

        }

    }

    delete lstopp;  

  }  

  class wrapperClass {

    string BidNumber;

  }

}


=====================================================================================================================

import { LightningElement,track,wire } from 'lwc';

import {refreshApex} from '@salesforce/apex';  

import getAllRecords from '@salesforce/apex/OpportunityController.fetchRecordList';  

import updateRecords from '@salesforce/apex/OpportunityController.updateRecords';  

/*const COLS=[  

  {label:'Name',fieldName:'Name', type:'text'},  

  {label:'Stage',fieldName:'StageName', type:'text'},  

  {label:'Amount',fieldName:'Amount', type:'ownerName'}  

];*/

const columns =[{

  label: 'Bid Number',

  fieldName: 'BidNumber',

  type: 'url',

  typeAttributes: {

      label: {

          fieldName: 'BidNumberLabel'

      },

      target: '_blank'

  },

  sortable:true

},{

  label: 'Total Bid Amount',

  fieldName: 'TotalBidAmount',

  type: 'Currency',

  sortable:true

}, {

  label: 'Owner Name',

  fieldName: 'OwnerName',

  type: 'text',

  sortable:true

}];  

export default class DataTableInLwcCheckbox extends LightningElement {

  @track data = [];

  @track recordList = [];

  @track columns = columns;

  wiredAccountsResult;

  //@track recordCount =0;

  @track sortBy;

  @track sortDirection;  

  @wire(getAllRecords)

  opp({error, data}) {

    this.wiredAccountsResult = data;

      if(data) {

          let currentData = [];

          let url = 'https://'+location.host+'/';

          data.forEach((row) => {

              let rowData = {};

              rowData.TotalBidAmount = row.Amount;

              rowData.BidNumber = url+row.Id; 

              rowData.BidNumberLabel = row.Name;              

              if (row.Owner) {

                  rowData.OwnerName = row.Owner.Name;

              }              

              currentData.push(rowData);

              

          });


          this.data = currentData; 

          this.recordList = currentData;

          //this.recordCount = currentData.length;

      }

      else if(error) {

        //  window.console.log(error);

      }

  }

  @wire(getAllRecords) refreshData;  

  handleSortdata(event) {

      this.sortBy = event.detail.fieldName;

      this.sortDirection = event.detail.sortDirection;

      this.sortData(event.detail.fieldName, event.detail.sortDirection);

  }


  sortData(fieldname, direction) {

      let parseData = JSON.parse(JSON.stringify(this.data));

      let keyValue = (a) => {

          return a[fieldname];

      };


      let isReverse = direction === 'asc' ? 1: -1;


      parseData.sort((x, y) => {

          x = keyValue(x) ? keyValue(x) : ''; // handling null values

          y = keyValue(y) ? keyValue(y) : '';

          return isReverse * ((x > y) - (y > x));

      });


      this.data = parseData;


  }

   deleteRecord(){ 

    console.log("getSelectedRows => ", this.template.querySelector('lightning-datatable').getSelectedRows()); 

     var selectedRecords =  this.template.querySelector("lightning-datatable").getSelectedRows();  

     console.log('...this.wiredAccountsResult...',this.wiredAccountsResult);

     updateRecords({recordList: selectedRecords})  

     .then(result=>{

       eval("$A.get('e.force:refreshView').fire();");  

       return refreshApex(this.refreshData);  

     })  

     .catch(error=>{  

       alert('Cloud not update'+JSON.stringify(error));  

     })  

   }  

}

=========================================================================

<template>

  <lightning-card title="Opportunity">  

      <lightning-button variant="brand" 

                        slot="actions" 

                        label="Approve" 

                        onclick={deleteRecord}

                        >

      </lightning-button>  

      <div class="slds-box">  

        <lightning-datatable columns={columns} 

                            data={data} 

                            key-field="id"

                            sorted-by={sortBy}

                            sorted-direction={sortDirection}

                            onsort={handleSortdata}></lightning-datatable>

      </div>  

    </lightning-card>  

</template>

=========================================================================

<?xml version="1.0" encoding="UTF-8"?>

<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">

    <apiVersion>49.0</apiVersion>

    <isExposed>true</isExposed>

    <targets>

        <target>lightning__HomePage</target>

        <target>lightning__RecordPage</target>

    </targets>

</LightningComponentBundle>

=========================================================================

No comments:

Post a Comment