From 00e147ec892cb1e89d0698787a8c60da1014cdb7 Mon Sep 17 00:00:00 2001
From: binxie <137736985@qq.com>
Date: 星期一, 26 六月 2023 17:42:22 +0800
Subject: [PATCH] Community升级
---
force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js | 212 +++++++++++++++++++++++++++++-----------------------
1 files changed, 118 insertions(+), 94 deletions(-)
diff --git a/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js b/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js
index a6ede92..b201755 100644
--- a/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js
+++ b/force-app/main/default/lwc/lwcDatatableUtility/lwcDatatableUtility.js
@@ -1,35 +1,34 @@
-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';
@@ -38,32 +37,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;
@@ -71,95 +70,98 @@
//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;
}
@@ -168,7 +170,7 @@
handleKeyChange(event) {
window.clearTimeout(this.delayTimeout);
const searchKey = event.target.value;
- if(searchKey){
+ if (searchKey) {
this.delayTimeout = setTimeout(() => {
//this.paginationVisibility = HIDEDIV;
this.setPaginationControls();
@@ -177,97 +179,119 @@
//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