1

I need to know how I can make a @wire run when a condition is met, in this case it is selecting 2 values ​​from a combobox list and displaying a combobox list. I store the values ​​in variables to pass it to the wire, but I don't know how to execute the wire conditionally

JS

    /*se usa la etiqueta wire para llamar al metodo de la clase apex. se le pasan los paramentros de la siguiente forma:
la variable de JS primero y despues entre comillas y con un dolar la variable de apex a la que se pasa el dato*/
@wire(getInstallation,{
    zona: '$zoneInstallation',
    ciudad: '$locationInstallation'
})

//se le asigna una nombre a este metodo condicional que extraera datos de la clase apex para pintarlos en lwc
instalationData({error, data}){
    //si hay datos, se almacenan en un array usando un blucle for
    if(data){
        console.log('datos de instalaciones -----> ', data);
        try{
            for(i = 0; i<data.length; i++){
                this.installations = [{label: data[i].Name, value: data[i].Name}];
            }
        }catch(error){
            console.error('instalaciones -> catch, esto pasa -----> ', error );
        }
    //si no hay datos pinta un error
    }else if (error){
        console.error('instalaciones -> if, error ------------------> ' + error);
       
    }
}


//metodo que retorna los valores obtenidos del wire para monstrar las instalaciones disponibles.
get filtroInstalaciones(){
    return this.installations;
}

APEX

 /*Extraer Instalaciones de una Zona seleccionada*/
@AuraEnabled(cacheable=true)
public static List<CC_Instalacion__c> getInstallation(String zoneInstallation, String locationInstallation){

    String[] zoneSplit = zoneInstallation.split('-'); 
    String zoneSummerOrWinter = zoneSplit[0];
    String zoneNumber = zoneSplit[1];

    String queryZone;
    
    if(zoneSummerOrWinter == 'Verano'){
        system.debug('zoneSummerOrWinter: ' + zoneSummerOrWinter);
        queryZone = 'WHERE GO_summerZone__c = :zoneNumber ';
    }else{
        system.debug('zoneSummerOrWinter: ' + zoneSummerOrWinter);
        queryZone = 'WHERE GO_winterZone__c = :zoneNumber ';
    }

    String queryLocation;

    queryLocation = 'AND CC_Provincia__c = :locationInstallation ';


    List<CC_Instalacion__c> listInstallation = new List<CC_Instalacion__c>();          
    
    listInstallation = Database.query(  'SELECT Name  ' +
                                        'FROM CC_Instalacion__c '+
                                        queryZone + 
                                        queryLocation);  
                                        
    System.debug('listInstallation: ----------------- ' + zoneInstallation + listInstallation);
        
    return listInstallation;
}

HTML

<lightning-combobox name="instalacion" label="Instalación" value={value}
                            placeholder="Selecciona una instalación'" options={filtroInstalaciones} onchange={handleKeyChange} disabled={enableInstallation}>
                        </lightning-combobox>

1 Answer 1

1

@wire methods re-run when the input properties change. In your case zona and ciudad.

If you want to only "run" the @wire when there are values, you'll need to adjust your apex code to return null or and empty array when empty values for zona and ciudad are passed.

@AuraEnabled(Cacheable=true)
public static List<CC_Instalacion__c> getInstallation(String zoneInstallation, String locationInstallation) {
    if (String.isEmpty(zoneInstallation) || String.isEmpty(locationInstallation) {
        return null;
    }
    // rest of your code here 
}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .