From af7b716a60d889acea95560abba0e46eee008b8f Mon Sep 17 00:00:00 2001 From: buli <137736985@qq.com> Date: 星期三, 05 七月 2023 13:54:50 +0800 Subject: [PATCH] backup0705 --- force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js | 212 +++++++++++++++++++++++----------------------------- 1 files changed, 94 insertions(+), 118 deletions(-) diff --git a/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js b/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js index b201755..a6ede92 100644 --- a/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js +++ b/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js @@ -1,34 +1,35 @@ -import { LightningElement, api, track } from 'lwc'; +import { LightningElement, api,track } from 'lwc'; import customUnitTemplate from './templates/customUnit.html'; import customShipmentNumberTemplate from './templates/customShipmentNumber.html'; import customShippingUnitPriceTemplate from './templates/customShippingUnitPrice.html'; const DELAY = 300; -const recordsPerPage = [5, 10, 25, 50, 75, 100]; +const recordsPerPage = [5,10,25,50,75,100]; const pageNumber = 1; const SHOWDIV = 'visibility:visible'; -const HIDEDIV = 'visibility:hidden'; +const HIDEDIV = 'visibility:hidden'; const DEFAULTHEIGHT = '300'; export default class LwcDatatableUtility extends LightningElement { + static customTypes = { customUnit: { template: customUnitTemplate, standardCellLayout: true, - typeAttributes: ['Id'] + typeAttributes: ['Id'], }, customShipment: { template: customShipmentNumberTemplate, standardCellLayout: true, - typeAttributes: ['Id'] + typeAttributes: ['Id'], }, customShipmentUnitPrice: { template: customShippingUnitPriceTemplate, standardCellLayout: true, - typeAttributes: ['Id'] + typeAttributes: ['Id'], } // Other types here - }; + } // Input Attributes from Parent Componant @api keyField = 'Id'; @@ -37,32 +38,32 @@ @api pageSizeOptions = recordsPerPage; //Page size options; valid values are array of integers @api totalRecords; //Total no.of records; valid type is Integer @api records; //All records available in the data table; valid type is Array - @api maxRowSelection; //All records available in the data table; valid type is Array + @api maxRowSelection; //All records available in the data table; valid type is Array @api columns = []; //Records to be displayed on the page @api hidecheckboxcolumn = false; @api showrownumber = false; - - tableHeightStyle = 'height: ' + DEFAULTHEIGHT + 'px;'; // Set Default Height as 300px + + tableHeightStyle = 'height: '+ DEFAULTHEIGHT +'px;'; // Set Default Height as 300px @api get tableHeight() { return this.tableHeightStyle; } set tableHeight(value) { - this.tableHeightStyle = 'height: ' + value + 'px;'; - } + this.tableHeightStyle = 'height: '+ value +'px;'; + } pageSize; //No.of records to be displayed per page totalPages; //Total no.of pages pageNumber = pageNumber; //Page number searchKey; //Search Input - paginationVisibility = SHOWDIV; + paginationVisibility = SHOWDIV; rowNumberOffset; //Row number preSelected; //preSelectedOnDisplay recordsToDisplay = []; //Records to be displayed on the page - + filteredRecords = []; //Filtered records available in the data table; valid type is Array - selectedRecords = []; //OverallSelected records in the data table; valid type is Array + selectedRecords = []; //OverallSelected records in the data table; valid type is Array pageSelectedRecords = []; //Page Selected rows in the data table; valid type is Array filtredNum; // Total no.of Filtered records; valid type is Integer totalSelected = 0; @@ -70,98 +71,95 @@ //SORT defaultSortDirection = 'asc'; sortDirection = 'asc'; - sortedBy; + sortedBy; //Called after the component finishes inserting to DOM connectedCallback() { console.log('杩涘叆 瀛愮粍浠� connectedCallback '); - console.log('this.records = ' + JSON.stringify(this.records)); + console.log('this.records = ' + JSON.stringify(this.records)); console.log('keyField = ' + this.keyField); - if (this.pageSizeOptions && this.pageSizeOptions.length > 0) + if(this.pageSizeOptions && this.pageSizeOptions.length > 0) this.pageSize = this.pageSizeOptions[0]; - else { + else{ this.pageSize = this.totalRecords; this.showPagination = false; } - this.paginationVisibility = - this.showPagination === false ? HIDEDIV : SHOWDIV; - this.filteredRecords = this.records; + this.paginationVisibility = this.showPagination === false ? HIDEDIV : SHOWDIV; + this.filteredRecords = this.records; this.filtredNum = this.totalRecords; this.setRecordsOnPage(); } - handleRecordsPerPage(event) { + handleRecordsPerPage(event){ this.pageSize = event.target.value; this.setRecordsOnPage(); } - handlePageNumberChange(event) { - if (event.keyCode === 13) { + handlePageNumberChange(event){ + if(event.keyCode === 13){ this.pageNumber = event.target.value; this.setRecordsOnPage(); } } - - previousPage() { - this.pageNumber = this.pageNumber - 1; + + previousPage(){ + this.pageNumber = this.pageNumber-1; this.setRecordsOnPage(); } - nextPage() { - this.pageNumber = this.pageNumber + 1; + nextPage(){ + this.pageNumber = this.pageNumber+1; this.setRecordsOnPage(); } @api - setRecordsOnPage() { + setRecordsOnPage(){ this.recordsToDisplay = []; - if (!this.pageSize) this.pageSize = this.filtredNum; + if(!this.pageSize) + this.pageSize = this.filtredNum; - this.totalPages = Math.ceil(this.filtredNum / this.pageSize); + this.totalPages = Math.ceil(this.filtredNum/this.pageSize); this.setPaginationControls(); - for ( - let i = (this.pageNumber - 1) * this.pageSize; - i < this.pageNumber * this.pageSize; - i++ - ) { - if (i === this.filtredNum) break; + for(let i=(this.pageNumber-1)*this.pageSize; i < this.pageNumber*this.pageSize; i++){ + if(i === this.filtredNum) break; this.recordsToDisplay.push(this.filteredRecords[i]); } this.preSelected = []; this.selectedRecords.forEach((item) => { - if (item.selected) this.preSelected.push(item.Id); - }); + if(item.selected) + this.preSelected.push(item.Id); + }) let paginatedRecords = new Object(); paginatedRecords.recordsToDisplay = this.recordsToDisplay; paginatedRecords.preSelected = this.preSelected; - if (this.maxRowSelection === '1') { + if(this.maxRowSelection === '1' ){ this.totalSelected = 0; - } - if (this.selectedRecords && this.selectedRecords.length > 0) { + } + if(this.selectedRecords && this.selectedRecords.length > 0){ this.refreshCurrentData = true; - } + } } - setPaginationControls() { + setPaginationControls(){ // Previous/Next buttons visibility by Total pages - if (this.totalPages === 1) { + if(this.totalPages === 1){ this.showPrevious = HIDEDIV; this.showNext = HIDEDIV; - } else if (this.totalPages > 1) { - this.showPrevious = SHOWDIV; - this.showNext = SHOWDIV; + }else if(this.totalPages > 1){ + this.showPrevious = SHOWDIV; + this.showNext = SHOWDIV; } // Previous/Next buttons visibility by Page number - if (this.pageNumber <= 1) { + if(this.pageNumber <= 1){ this.pageNumber = 1; this.showPrevious = HIDEDIV; - } else if (this.pageNumber >= this.totalPages) { + }else if(this.pageNumber >= this.totalPages){ this.pageNumber = this.totalPages; this.showNext = HIDEDIV; } // Previous/Next buttons visibility by Pagination visibility - if (this.paginationVisibility === HIDEDIV) { + if(this.paginationVisibility === HIDEDIV){ this.showPrevious = HIDEDIV; this.showNext = HIDEDIV; } @@ -170,7 +168,7 @@ handleKeyChange(event) { window.clearTimeout(this.delayTimeout); const searchKey = event.target.value; - if (searchKey) { + if(searchKey){ this.delayTimeout = setTimeout(() => { //this.paginationVisibility = HIDEDIV; this.setPaginationControls(); @@ -179,119 +177,97 @@ //Use other field name here in place of 'Name' field if you want to search by other field //this.recordsToDisplay = this.records.filter(rec => rec.includes(searchKey)); //Search with any column value (Updated as per the feedback) - this.filteredRecords = this.records.filter((rec) => - JSON.stringify(rec) - .toLowerCase() - .includes(searchKey.toLowerCase()) - ); - this.filtredNum = this.filteredRecords.length; + this.filteredRecords = this.records.filter(rec => JSON.stringify(rec).toLowerCase().includes(searchKey.toLowerCase())); + this.filtredNum = this.filteredRecords.length; this.setRecordsOnPage(); }, DELAY); - } else { - this.filteredRecords = this.records; - this.filtredNum = this.totalRecords; + }else{ + this.filteredRecords = this.records; + this.filtredNum = this.totalRecords; this.paginationVisibility = SHOWDIV; this.setRecordsOnPage(); - } + } } handelRowsSelected(selectedRows) { console.log(selectedRows.length); this.totalSelected = 0; this.pageSelectedRecords = []; - if ( - this.maxRowSelection != '1' && - this.recordsToDisplay && - this.recordsToDisplay.length > 0 && - ((selectedRows.length === 0 && !this.refreshCurrentData) || - selectedRows.length > 0) - ) { - this.recordsToDisplay.forEach((item) => { - var row = new Object(); - row.Id = item.Id; - if (selectedRows.includes(item.Id)) { + if(this.maxRowSelection != '1' && this.recordsToDisplay && + this.recordsToDisplay.length > 0 && + ((selectedRows.length === 0 && !this.refreshCurrentData) || selectedRows.length > 0) ){ + this.recordsToDisplay.forEach((item)=>{ + var row = new Object(); + row.Id = item.Id; + if(selectedRows.includes(item.Id)){ row.selected = true; - } else { + }else{ row.selected = false; } - this.pageSelectedRecords.push(row); - }); + this.pageSelectedRecords.push(row) ; + }); } // To store previous row Selection - if (this.selectedRecords.length == 0) { + if(this.selectedRecords.length == 0 ){ this.selectedRecords = this.pageSelectedRecords; } - this.selectedRecords = this.mergeObjectArray( - this.selectedRecords, - this.pageSelectedRecords, - 'Id' - ); - if ( - this.maxRowSelection === '1' && - selectedRows && - selectedRows.length > 0 - ) { + this.selectedRecords = this.mergeObjectArray(this.selectedRecords, this.pageSelectedRecords, "Id"); + if(this.maxRowSelection === '1' && selectedRows && selectedRows.length > 0){ this.totalSelected = 1; - } else { - let i = 0; - this.selectedRecords.forEach((item) => { - if (item.selected) { + }else{ + let i=0; + this.selectedRecords.forEach(item => { + if(item.selected){ i++; this.totalSelected = i; } - }); - //this.totalSelected = this.totalSelected ===1 && selectedRows.length ===0? 0: this.totalSelected; + }) + //this.totalSelected = this.totalSelected ===1 && selectedRows.length ===0? 0: this.totalSelected; } - const filterSelected = this.selectedRecords.filter( - ({ selected }) => selected === true - ); - this.dispatchEvent( - new CustomEvent('setselectedrecords', { detail: filterSelected }) - ); //Send records to display on table to the parent component + const filterSelected = this.selectedRecords.filter(({ selected }) => selected === true ); + this.dispatchEvent(new CustomEvent('setselectedrecords', {detail: filterSelected})); //Send records to display on table to the parent component this.refreshCurrentData = false; } - mergeObjectArray(firstArray, secondArray, prop) { - var reduced = firstArray.filter( - (aitem) => !secondArray.find((bitem) => aitem[prop] === bitem[prop]) - ); + mergeObjectArray(firstArray, secondArray, prop){ + var reduced = firstArray.filter( aitem => ! secondArray.find ( bitem => aitem[prop] === bitem[prop]) ) //let arr3 = arr1.map((item, i) => Object.assign({}, item, arr2[i])); return reduced.concat(secondArray); - } + } getSelectedRows(event) { const selectedRows = event.detail.selectedRows; let selectedRecordIds = []; // Display that fieldName of the selected rows - for (let i = 0; i < selectedRows.length; i++) { + for (let i = 0; i < selectedRows.length; i++){ selectedRecordIds.push(selectedRows[i].Id); - } - this.handelRowsSelected(selectedRecordIds); - } + } + this.handelRowsSelected(selectedRecordIds); + } - handelSort(event) { + handelSort(event){ const { fieldName: sortedBy, sortDirection } = event.detail; const cloneData = [...this.filteredRecords]; cloneData.sort(this.sortBy(sortedBy, sortDirection === 'asc' ? 1 : -1)); - this.filteredRecords = cloneData; + this.filteredRecords = cloneData; this.sortDirection = sortDirection; - this.sortedBy = sortedBy; + this.sortedBy = sortedBy; this.setRecordsOnPage(); - } + } sortBy(field, reverse, primer) { const key = primer - ? function (x) { + ? function(x) { return primer(x[field]); } - : function (x) { + : function(x) { return x[field]; }; - return function (a, b) { + return function(a, b) { a = key(a); b = key(b); return reverse * ((a > b) - (b > a)); }; - } + } } \ No newline at end of file -- Gitblit v1.9.1