Я новичок в разработке LWC. У меня проблема с обработкой поиска на реверсе. Значение, обработка возврата и удаление, сделанные пользователем. Когда пользователь вводит название продукта, он выполняет функцию поиска. Однако, когда они делают возврат и изменяют значение поиска, данные из таблицы данных больше не существуют. Их нужно будет перезагрузить снова. Я думал о чистой кнопке для повторной синхронизации. Однако это даст пользователю дополнительные шаги.

Вот мой JS:

import { api, LightningElement, track, wire } from 'lwc';
import fetchProducts from '@salesforce/apex/productPartnersView.fetchProducts';
import { NavigationMixin } from 'lightning/navigation';

const columns = [
    { label: 'Product Name', fieldName: 'NameURL', type: 'url',
        typeAttributes: {label: { fieldName: 'Name' }, target: '_blank'}
    },
    { label: 'Product Code', fieldName: 'ProductCode',
        cellAttributes: { 
            iconName: { fieldName: 'icon' }, iconPosition: 'left' , 
        }
    },
    { label: 'Brand', fieldName: 'Brand', 
        cellAttributes: { 
            iconName: { fieldName: 'icon' }, iconPosition: 'left' , 
        }
    },
    { label: 'Product Family', fieldName: 'Family',
        cellAttributes: { 
            iconName: { fieldName: 'icon' }, iconPosition: 'left' , 
        }
    },
    { label: 'Generic Name', fieldName: 'Generic',
        cellAttributes: { 
            iconName: { fieldName: 'icon' }, iconPosition: 'left' , 
        }
    },
    { label: 'Barcode', fieldName: 'Barcode',
        cellAttributes: { 
            iconName: { fieldName: 'icon' }, iconPosition: 'left' , 
        }
    }
];

export default class ProductPartnersView extends NavigationMixin(LightningElement) {
    @api title;
    @api showDetails;
    @api showsync;
    //@api recordId;
    @api usedInCommunity;  

    @track dataList;
    @track columnsList = columns;
    isLoading = false;

    connectedCallback() {
 
        this.handleSync();
    }

    getBaseUrl(){
        let baseUrl = 'https://'+location.host+'/';
        return baseUrl;
    }

    handleSync(){
        this.isLoading = true;
        fetchProducts()
        .then(result => {
            let parsedData = JSON.parse(result);
            let stringifiedData = JSON.stringify(parsedData);
            let finalData = JSON.parse(stringifiedData);
            let baseUrl = this.getBaseUrl();
            finalData.forEach(dataRec => {
                dataRec.Name = dataRec.Name;
                dataRec.NameURL = baseUrl + 'lightning/r/Product2/' + dataRec.Id + '/view';
                dataRec.ProductCode = dataRec.ProductCode;
                dataRec.Brand = dataRec.Brand_Name__c;
                dataRec.Family = dataRec.Family;
                dataRec.Generic = dataRec.Generic_Name__c;
                dataRec.Barcode = dataRec.StockKeepingUnit;
            });
            
            this.dataList = finalData;
        })
        .catch(error => {
            console.error('**** error **** \n ',error)
        })
        .finally(()=>{
            this.isLoading = false;
        });
    }

    handleSearch(event){
        
        let name  = event.target.name;
        let value = event.target.value;

        if( name === 'Name' ){
            this.dataList = this.dataList.filter( dataRec => {
                return dataRec.Name.toLowerCase().includes(value.toLowerCase());
            });
        } 
    }
}
0
Jeff Lrzn 31 Май 2021 в 14:05

1 ответ

Лучший ответ

Что вы можете сделать, так это, когда вы извлекаете данные в handleSync, вы можете добавить данные в два атрибута. Например:

this.dataList = finalData;
this.databackupList = finalData; //to save the backup of data you are retriving using handleSync function

А затем вы можете фильтровать с помощью this.databackupList. Например:

this.dataList = this.databackupList.filter( dataRec => {
                return dataRec.Name.toLowerCase().includes(value.toLowerCase());
            });
1
Shagun Sharma 31 Май 2021 в 14:11
1
Вау, это сработало. Спасибо! :)
 – 
Jeff Lrzn
31 Май 2021 в 14:55