Skip to main content
added 8809 characters in body
Source Link
DimzeeD
  • 35
  • 2
  • 8

Component

<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,force:hasRecordId" 
            controller="ProductSelectionCtrl" access="global">


<aura:attribute name="products" type="Product__c[]"/>
<aura:attribute name="selectedProductId" type="String"/>
<aura:attribute name="asset_classes" type="Product__c[]"/>
<aura:attribute name="sub_asset_classes" type="Product__c[]"/>
<aura:attribute name="macro_strategies" type="Product__c[]"/>
<aura:attribute name="strategies" type="Product__c[]"/> 
<aura:attribute name="filterObject" type="Object" />
<aura:attribute name="pageSize" type="integer" default="18"/>
<aura:attribute name="page" type="integer"/>
<aura:attribute name="pages" type="integer"/>
<aura:attribute name="total" type="integer"/>
<aura:attribute name="openModalTrue" type="Boolean"/>




<aura:handler name="init" value="{!this}" action="{!c.doInit}" />

<aura:handler event="c:ProductFilterChange" action="{!c.productFilterChangeHandler}"/>

<!-- event that recieves the product Id from an onlcik action on the ProductTile cmp -->
<aura:handler event="c:ProductGetProdIdEvent" action="{!c.saveProductToOpportunity}"/>

<aura:handler name="change" value="{!v.asset_classes}" action="{!c.onAssetClassFilterChange}"/>
<aura:handler name="change" value="{!v.sub_asset_classes}" action="{!c.onSubAssetClassFilterChange}"/>
<aura:handler name="change" value="{!v.macro_strategies}" action="{!c.onMacroStrategyFilterChange}"/>
<aura:handler name="change" value="{!v.strategies}" action="{!c.onStrategyFilterChange}"/>
<aura:handler name="change" value="{!v.openModalTrue}" action="{!c.onModalInitialization}"/>




<aura:registerEvent name="ProductModalOpen" type="c:ProductSelectorInitialModal" />


<div class="slds-m-right_xx-large">
               <div>        
                   <ul aura:id="list" class="slds-grid slds-grid--pull-padded slds-wrap">          
                       <aura:iteration items="{!v.products}" var="product" indexVar="index">                    
                           <c:ProductTile product="{#product}" index="{#index}"/>                   
                       </aura:iteration>
                   </ul>                    
                   <c:Paginator page="{!v.page}" pages="{!v.pages}" total="{!v.total}" label="products"
                                previousPage="{!c.onPreviousPage}" nextPage="{!c.onNextPage}"/>
           
               </div>
             </div>

</aura:component>

Controller

 ({
doInit: function(component, event, helper) {
   
    
    var filterObject = {
        searchKey: '',
        assetClass: '',
        subAssetClass: '',
        strategy: '',
        macroStrategy : ''
    }

    component.set("v.filterObject", filterObject);
    //sets the openModal attribute to true which in turn will trigger an event to open the Initial Modal screen
    component.set("v.openModalTrue", "True");
   
    helper.loadProducts(component);
   
    
    
    
    
},

           onPreviousPage: function(component, event, helper) {
                          var page = component.get("v.page") || 1;
    var direction = event.getParam("direction");
    page = page - 1;
    helper.loadProducts(component, page);
           },

           onNextPage: function(component, event, helper) {
                          var page = component.get("v.page") || 1;
    var direction = event.getParam("direction");
    page = page + 1;
    helper.loadProducts(component, page);
    debugger;
           },


onModalInitialization: function(component, event, helper) {
    /*need to figure out a way to check if the opp (current record id) has a Product__c connected to it)*/
    var modalEventFire = $A.get("e.c:ProductSelectorInitialModal");        
    
    helper.getLinkedProduct(component);
    debugger;
    
    
                          /*
    if(modalCount == 0){
           modalEventFire.setParams({"openModal" : "True"});
           modalEventFire.fire();
       
    }else{
        component.set("openModalTrueCount", 1);
    }*/
},



productFilterChangeHandler: function(component, event, helper) {
    
    var filterObject = component.get("v.filterObject");
    if (event.getParam("searchKey") !== undefined) {
                   filterObject.searchKey = event.getParam("searchKey");
       
    }
    if (event.getParam("assetClass") !== undefined) {
        filterObject.assetClass = event.getParam("assetClass");
    }
    if (event.getParam("subAssetClass") !== undefined) {
        var subAssetClass = event.getParam("subAssetClass");
                   filterObject.subAssetClass = event.getParam("subAssetClass");
    }
    if (event.getParam("strategy") !== undefined) {
        var strategy = event.getParam("strategy");
     
                   filterObject.strategy = event.getParam("strategy");
    }
    if (event.getParam("macroStrategy") !== undefined) {
        var macroStrategy = event.getParam("macroStrategy");
                   filterObject.macroStrategy = event.getParam("macroStrategy");
    }
    if (event.getParam("focusFunds") !== undefined) {

                   filterObject.focusFund = event.getParam("focusFunds");
    }
    if (event.getParam("defendFunds") !== undefined) {

                   filterObject.defendFund = event.getParam("defendFunds");
    }
    
    if (event.getParam("introductionFunds") !== undefined) {

                   filterObject.introductionFund = event.getParam("introductionFunds");
    }
  
    console.log(filterObject);
    helper.loadProducts(component);
},

           onAssetClassFilterChange: function(component, event, helper){             
        
                   var acOptionChange = $A.get("e.c:ProductSelectorAssetClassFilterEvent");     
                   var resultingACs = component.get("v.asset_classes");     
                   var acOptionChangesValues = acOptionChange.getParam("assetClassTypes");
                   acOptionChange.setParams({"assetClassTypes" : resultingACs});
                   acOptionChange.fire(); 

           },
           
           onSubAssetClassFilterChange: function(component, event, helper){               

        var sacOptionChange = $A.get("e.c:ProductSelectorSubAssetClassFilterEvent");     
        var resultingSACs = component.get("v.sub_asset_classes");
        var sacOptionChangesValues = sacOptionChange.getParam("subAssetClassTypes");
        sacOptionChange.setParams({"subAssetClassTypes" : resultingSACs});            
        sacOptionChange.fire(); 
           },
           
           
           onMacroStrategyFilterChange: function(component, event, helper){                 
        var macStratOptionChange = $A.get("e.c:ProductSelectorMacroStrategyFilterEvent");
        var resultingMacStrats = component.get("v.macro_strategies");
        var macStratOptionChangesValues = macStratOptionChange.getParam("macroStrategyTypes");
        macStratOptionChange.setParams({"macroStrategyTypes" : resultingMacStrats});
        macStratOptionChange.fire(); 

           },
           
           
           onStrategyFilterChange: function(component, event, helper){  
        var stratOptionChange = $A.get("e.c:ProductSelectorStrategyFilterEvent");
        var resultingStrats = component.get("v.strategies");
        var stratOptionChangesValues = stratOptionChange.getParam("strategyTypes");
        stratOptionChange.setParams({"strategyTypes" : resultingStrats});
        stratOptionChange.fire(); 

           },
           
           
           saveProductToOpportunity: function(component, event, helper){
        var selectProdId = event.getParam("prodId");
        var oppId = component.get("v.recordId");
        helper.saveProductToOpportunity(component, selectProdId, oppId);
                          
           }
           

})

Helper

Apex Controller (part of it)

Helper

Apex Controller

Component

<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,force:hasRecordId" 
            controller="ProductSelectionCtrl" access="global">


<aura:attribute name="products" type="Product__c[]"/>
<aura:attribute name="selectedProductId" type="String"/>
<aura:attribute name="asset_classes" type="Product__c[]"/>
<aura:attribute name="sub_asset_classes" type="Product__c[]"/>
<aura:attribute name="macro_strategies" type="Product__c[]"/>
<aura:attribute name="strategies" type="Product__c[]"/> 
<aura:attribute name="filterObject" type="Object" />
<aura:attribute name="pageSize" type="integer" default="18"/>
<aura:attribute name="page" type="integer"/>
<aura:attribute name="pages" type="integer"/>
<aura:attribute name="total" type="integer"/>
<aura:attribute name="openModalTrue" type="Boolean"/>




<aura:handler name="init" value="{!this}" action="{!c.doInit}" />

<aura:handler event="c:ProductFilterChange" action="{!c.productFilterChangeHandler}"/>

<!-- event that recieves the product Id from an onlcik action on the ProductTile cmp -->
<aura:handler event="c:ProductGetProdIdEvent" action="{!c.saveProductToOpportunity}"/>

<aura:handler name="change" value="{!v.asset_classes}" action="{!c.onAssetClassFilterChange}"/>
<aura:handler name="change" value="{!v.sub_asset_classes}" action="{!c.onSubAssetClassFilterChange}"/>
<aura:handler name="change" value="{!v.macro_strategies}" action="{!c.onMacroStrategyFilterChange}"/>
<aura:handler name="change" value="{!v.strategies}" action="{!c.onStrategyFilterChange}"/>
<aura:handler name="change" value="{!v.openModalTrue}" action="{!c.onModalInitialization}"/>




<aura:registerEvent name="ProductModalOpen" type="c:ProductSelectorInitialModal" />


<div class="slds-m-right_xx-large">
               <div>        
                   <ul aura:id="list" class="slds-grid slds-grid--pull-padded slds-wrap">          
                       <aura:iteration items="{!v.products}" var="product" indexVar="index">                    
                           <c:ProductTile product="{#product}" index="{#index}"/>                   
                       </aura:iteration>
                   </ul>                    
                   <c:Paginator page="{!v.page}" pages="{!v.pages}" total="{!v.total}" label="products"
                                previousPage="{!c.onPreviousPage}" nextPage="{!c.onNextPage}"/>
           
               </div>
             </div>

</aura:component>

Controller

 ({
doInit: function(component, event, helper) {
   
    
    var filterObject = {
        searchKey: '',
        assetClass: '',
        subAssetClass: '',
        strategy: '',
        macroStrategy : ''
    }

    component.set("v.filterObject", filterObject);
    //sets the openModal attribute to true which in turn will trigger an event to open the Initial Modal screen
    component.set("v.openModalTrue", "True");
   
    helper.loadProducts(component);
   
    
    
    
    
},

           onPreviousPage: function(component, event, helper) {
                          var page = component.get("v.page") || 1;
    var direction = event.getParam("direction");
    page = page - 1;
    helper.loadProducts(component, page);
           },

           onNextPage: function(component, event, helper) {
                          var page = component.get("v.page") || 1;
    var direction = event.getParam("direction");
    page = page + 1;
    helper.loadProducts(component, page);
    debugger;
           },


onModalInitialization: function(component, event, helper) {
    /*need to figure out a way to check if the opp (current record id) has a Product__c connected to it)*/
    var modalEventFire = $A.get("e.c:ProductSelectorInitialModal");        
    
    helper.getLinkedProduct(component);
    debugger;
    
    
                          /*
    if(modalCount == 0){
           modalEventFire.setParams({"openModal" : "True"});
           modalEventFire.fire();
       
    }else{
        component.set("openModalTrueCount", 1);
    }*/
},



productFilterChangeHandler: function(component, event, helper) {
    
    var filterObject = component.get("v.filterObject");
    if (event.getParam("searchKey") !== undefined) {
                   filterObject.searchKey = event.getParam("searchKey");
       
    }
    if (event.getParam("assetClass") !== undefined) {
        filterObject.assetClass = event.getParam("assetClass");
    }
    if (event.getParam("subAssetClass") !== undefined) {
        var subAssetClass = event.getParam("subAssetClass");
                   filterObject.subAssetClass = event.getParam("subAssetClass");
    }
    if (event.getParam("strategy") !== undefined) {
        var strategy = event.getParam("strategy");
     
                   filterObject.strategy = event.getParam("strategy");
    }
    if (event.getParam("macroStrategy") !== undefined) {
        var macroStrategy = event.getParam("macroStrategy");
                   filterObject.macroStrategy = event.getParam("macroStrategy");
    }
    if (event.getParam("focusFunds") !== undefined) {

                   filterObject.focusFund = event.getParam("focusFunds");
    }
    if (event.getParam("defendFunds") !== undefined) {

                   filterObject.defendFund = event.getParam("defendFunds");
    }
    
    if (event.getParam("introductionFunds") !== undefined) {

                   filterObject.introductionFund = event.getParam("introductionFunds");
    }
  
    console.log(filterObject);
    helper.loadProducts(component);
},

           onAssetClassFilterChange: function(component, event, helper){             
        
                   var acOptionChange = $A.get("e.c:ProductSelectorAssetClassFilterEvent");     
                   var resultingACs = component.get("v.asset_classes");     
                   var acOptionChangesValues = acOptionChange.getParam("assetClassTypes");
                   acOptionChange.setParams({"assetClassTypes" : resultingACs});
                   acOptionChange.fire(); 

           },
           
           onSubAssetClassFilterChange: function(component, event, helper){               

        var sacOptionChange = $A.get("e.c:ProductSelectorSubAssetClassFilterEvent");     
        var resultingSACs = component.get("v.sub_asset_classes");
        var sacOptionChangesValues = sacOptionChange.getParam("subAssetClassTypes");
        sacOptionChange.setParams({"subAssetClassTypes" : resultingSACs});            
        sacOptionChange.fire(); 
           },
           
           
           onMacroStrategyFilterChange: function(component, event, helper){                 
        var macStratOptionChange = $A.get("e.c:ProductSelectorMacroStrategyFilterEvent");
        var resultingMacStrats = component.get("v.macro_strategies");
        var macStratOptionChangesValues = macStratOptionChange.getParam("macroStrategyTypes");
        macStratOptionChange.setParams({"macroStrategyTypes" : resultingMacStrats});
        macStratOptionChange.fire(); 

           },
           
           
           onStrategyFilterChange: function(component, event, helper){  
        var stratOptionChange = $A.get("e.c:ProductSelectorStrategyFilterEvent");
        var resultingStrats = component.get("v.strategies");
        var stratOptionChangesValues = stratOptionChange.getParam("strategyTypes");
        stratOptionChange.setParams({"strategyTypes" : resultingStrats});
        stratOptionChange.fire(); 

           },
           
           
           saveProductToOpportunity: function(component, event, helper){
        var selectProdId = event.getParam("prodId");
        var oppId = component.get("v.recordId");
        helper.saveProductToOpportunity(component, selectProdId, oppId);
                          
           }
           

})

Helper

Apex Controller (part of it)

Source Link
DimzeeD
  • 35
  • 2
  • 8

Apex Function Parameter is always null

Got an Apex function that takes in a String as a parameter (which is the current page's recordId - Opportunity Id) and I want to query the Opportunity for any Product__c objects its linked to via a lookup field. However I've noticed that the String Parameter of the Apex function is never populated and thus I always get the error 'Argument cannot be null'. Any ideas what I could be doing wrong?

Helper

getLinkedProduct: function(component){
           
    var action = component.get("c.getProducts");        
    var oppId = component.get("v.recordId");        
    action.setParam({
        "currentOppId": oppId            
    });        
    action.setCallback(this, function(response){
        if (state === 'SUCCESS') {
            var result = response.getReturnValue();                
        }    
    });        
    
    $A.enqueueAction(action);
   
},

Apex Controller

@AuraEnabled
public static List<Opportunity> getProducts(String currentOppId) {
    
    Id oppId = Id.valueOf(currentOppId);
    System.debug('oppId: ' + oppId);
    Opportunity[] linkedProduct = [Select Id, Product__c from Opportunity 
    where Id =: oppId];
    System.debug('linkedProduct: ' + linkedProduct);
    return linkedProduct;
}