function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
ShaikAShaikA 

how to displaying queried data on detailscomponent

Hi All,

Facing issues on displaying record details on detailscomponent.

Event: contactDetailNavgiation:
<aura:event type="APPLICATION">
<aura:attribute name="Contactlist" type="contact[]"/>
</aura:event>

Main component:
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes" access="global">
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<aura:handler event="c:contactDetailNavgiation" action="{!c.NavigateComponent}"/>
    <div aura:id="div1">
          {!v.body}
   </div>
</aura:component>

Main component controller.js
({
doInit : function(component, event, helper) {
$A.createComponent(
"c:LoginScreen",
{
 
},
function(newCmp){
if (component.isValid()) {
component.set("v.body", newCmp);
}
}
);
},
NavigateComponent : function(component,event,helper) {
    alert('details 1');
$A.createComponent(
"c:detailContact",
{
"contacts" : event.getParam("v.Contactlist")

},          
function(newCmp){
        alert('details 2');

if (component.isValid()) {
    //var cmp = component.find("div1");
component.set("v.body", newCmp);
}
}
);
}
})

Login component:
<aura:component controller="loginController">
        <aura:attribute name="Contactlist" type="Contact[]"/>
    <aura:registerEvent name="navigate" type="c:contactDetailNavgiation"/>

  <div class="slds-col slds-col--padded slds-p-top--large">
  <div aria-labelledby="newcontactform">

  <!-- BOXED AREA -->
  <fieldset class="slds-box slds-theme--default slds-container--small">
     <form class="slds-form--stacked">
      <div class="slds-form-element slds-is-required">
          <div class="slds-form-element__control">
              <ui:inputText aura:id="email" label="Email"
                  class="slds-input"
                  labelClass="slds-form-element__label"
                  value=""
                  required="true"/>
          </div>
     </div>

     <div class="slds-form-element slds-is-required">
          <div class="slds-form-element__control">
              <ui:inputText aura:id="pwd" label="Password"
                  class="slds-input"
                  labelClass="slds-form-element__label"
                  value=""
                  required="true"/>
          </div>
      </div>
           <div class="slds-form-element">
          <ui:button label="Submit"
              class="slds-button slds-button--brand"
              press="{!c.clicktoLogin}"/>
      </div>
    </form>
      </fieldset>
</div>
</div>
</aura:component>

login controller.js:
({
    clicktoLogin: function(component, event, helper) {
   alert('in client-Side-process');
        // Simplistic error checking
        var validExpense = true;

        // Name must not be blank
       var emailField = component.find("email");
        var emailid = emailField.get("v.value");
        if ($A.util.isEmpty(emailid)){
            validExpense = false;
            emailField.set("v.errors", [{message:"Email can't be blank."}]);
        }
        else {
            // If the amount looks good, unset any errors...
            emailField.set("v.errors", null);
        }
          var pwdField = component.find("pwd");
        var password = pwdField.get("v.value");
        if ($A.util.isEmpty(password)){
            validExpense = false;
            pwdField.set("v.errors", [{message:"Password can't be blank."}]);
        }
        else {
            pwdField.set("v.errors", null);
        }

        // ... hint: more error checking here ...

        // If we pass error checking, do some real work
        if(validExpense){
            var newContact = component.get("v.Contactlist");
           console.log("login : " + JSON.stringify(newContact));
            helper.loginHelper(component);
        }
    },
})

Login Helper.js
({
    loginHelper: function(component,Callback) {
           alert('in client-Side-Helper');
    var action = component.get("c.login");
        console.log('after method called123');
        action.setParams({ strEmail : component.find("email").get("v.value") , strpwd : component.find("pwd").get("v.value")});       

action.setCallback(this, function(response){
        var state = response.getState();
        if (component.isValid() && state === "SUCCESS") {
            var contacts = component.get("v.Contactlist");
            console.log("helper Contact: " + JSON.stringify(contacts));
            contacts.push(response.getReturnValue());
            component.set("v.Contactlist", contacts);
             var evt = $A.get("e.c:contactDetailNavgiation");
            evt.fire();
        }
    }); 
    $A.enqueueAction(action);
},      
})

Details Component:
<aura:component controller="loginController" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes" access="global">
    <!--aura:handler name="init" value="{!this}" action="{!c.doInit}"/-->    
        <aura:attribute name="contacts" type="contact[]"/> 
my details:{!v.contacts}
     <aura:iteration items="{!v.contacts}" var="singleCon">
       
 <article class="slds-card">
  <div class="slds-card__header slds-grid">
    <header class="slds-media slds-media--center slds-has-flexi-truncate">
        <h2>Detail contact:
          <a href="javascript:void(0);" class="slds-text-link--reset">
            <span class="slds-text-heading--small">{!singleCon.FirstName} &nbsp;{!singleCon.LastName}</span>
          </a>
        </h2>
    </header>
  </div>
  <div class="slds-card__body">
      <p>Email: {!singleCon.Email}</p>
      <p>Phone: {!singleCon.Phone}</p>
      <p>MailingStreet: {!singleCon.MailingStreet}</p>
      <p>MailingCity: {!singleCon.MailingCity}</p>
      <p>MailingState: {!singleCon.MailingState}</p>
      <p>MailingPostalCode: {!singleCon.MailingPostalCode}</p>
      <p>MailingCountry: {!singleCon.MailingCountry}</p>
      <p>Password: {!singleCon.Password__c}</p>
      <p>Account Name: {!singleCon.Account.Name}</p>
  </div>
</article>
    
    </aura:iteration>
</aura:component>

Server side controller:
public class loginController {

    @AuraEnabled
    public static Contact login(string strEmail, string strpwd)
    {
        return [SELECT FirstName,LastName,Account.Name,Email,Phone,MailingStreet,MailingCity,MailingState,MailingPostalCode,MailingCountry,Password__c ,accountId FROM contact where  Email=:strEmail AND Password__c=:strpwd limit 1];
     }
      
}

Please help me to know what i am missing here and also help me to show error message on login page if user entered email or password is not invalid.

Regards,
Shaik
Best Answer chosen by ShaikA
sfdcMonkey.comsfdcMonkey.com
Hi
try this
component
<aura:component controller="contactRegistrationController"> 
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>    
    <aura:attribute name="contacts" type="Contact[]"/>   
    <aura:attribute name="newContact" type="Contact"
         default="{ 'sobjectType': 'Contact',
                                 'Email': '',
                                 'Password__c': '' 
                          }"/>
        <aura:attribute name="loginFlag" type="boolean" default="true"/>
        <aura:attribute name="DetailFlag" type="boolean" default="false"/>
        
      <aura:if isTrue="{!v.loginFlag}">
        <!-- PAGE HEADER -->
        <div class="slds-page-header" role="banner">
          <div class="slds-grid">
            <div class="slds-col">
              <h1 class="slds-text-heading--medium">LogIn Page</h1>
            </div>
          </div>
        </div>
        <!-- NEW Contact FORM -->
        <div class="slds-col slds-col--padded slds-p-top--large">
    
      <div aria-labelledby="newcontactform">
    
      <!-- BOXED AREA -->
      <fieldset class="slds-box slds-theme--default slds-container--small">
    
        <legend id="newcontactform" class="slds-text-heading--small 
          slds-p-vertical--medium">
          Add Contact
        </legend>
    
        <!-- CREATE NEW Contact FORM -->
        <form class="slds-form--stacked">
             
             <div class="slds-form-element slds-is-required">
              <div class="slds-form-element__control">
                  <ui:inputText aura:id="email" label="Email"
                      class="slds-input"
                      labelClass="slds-form-element__label"
                      value="{!v.newContact.Email}"
                      required="true"/>
              </div>
             </div>
     
        <div class="slds-form-element slds-is-required">
              <div class="slds-form-element__control">
                  <ui:inputText aura:id="pwd" label="Password"
                      class="slds-input"
                      labelClass="slds-form-element__label"
                      value="{!v.newContact.Password__c}"
                      required=""/>
              </div>
       </div>
          
          <div class="slds-form-element">
              <ui:button label="Log In"
                  class="slds-button slds-button--brand"
                  press="{!c.clickLogIn}"/>    
          </div>
        </form>
      </fieldset>
    </div>
        </div>
    
       </aura:if>     
      
     <aura:if isTrue="{!v.DetailFlag}">
      <!--Detail page start-->
        <ui:button label="Log Out"
                  class="slds-button slds-button--brand"
                  press="{!c.doInit}"/>   
       <aura:iteration items="{!v.contacts}" var="singleCon">
           
     <article class="slds-card">
      <div class="slds-card__header slds-grid">
        <header class="slds-media slds-media--center slds-has-flexi-truncate">
            <h2>
              <a href="javascript:void(0);" class="slds-text-link--reset">
                <span class="slds-text-heading--small">{!singleCon.FirstName} &nbsp;{!singleCon.LastName}</span>
              </a>
            </h2>
        </header>
      </div>
      <div class="slds-card__body">
          <p>Email: {!singleCon.Email}</p>
          <p>Phone: {!singleCon.Phone}</p>
          <p>MailingStreet: {!singleCon.MailingStreet}</p>
          <p>MailingCity: {!singleCon.MailingCity}</p>
          <p>MailingState: {!singleCon.MailingState}</p>
          <p>MailingPostalCode: {!singleCon.MailingPostalCode}</p>
          <p>MailingCountry: {!singleCon.MailingCountry}</p>
          <p>Password: {!singleCon.Password__c}</p>
          <p>Account Name: {!singleCon.Account.Name}</p>
      </div>
    </article>
        
        </aura:iteration>
        </aura:if>
    </aura:component>
controller
({
    doInit : function(component,event,helper){
       component.set("v.loginFlag", true);
       component.set("v.DetailFlag", false);
     },
    
    clickLogIn : function(component,event,helper){
        var getLogIn  = component.get("v.newContact");
          //alert(getLogIn.Email);
         //alert(getLogIn.Password__c);
        if(getLogIn.Email != null && getLogIn.Password__c != null){
          alert('both are not null');  
        var action = component.get("c.logIn");
           action.setParams({
           strEmail : getLogIn.Email ,
           strpwd : getLogIn.Password__c
           });
         action.setCallback(this, function(response){
             var state = response.getState();
        if (component.isValid() && state === "SUCCESS") {
            component.set("v.loginFlag", false);
            component.set("v.DetailFlag", true);
            component.set("v.contacts", response.getReturnValue());
           
        }
    }); 
    $A.enqueueAction(action);
    
          }
      }
  
})
apex class
public with sharing class contactRegistrationController {
    
 
    
     @AuraEnabled 
    public static List<Contact> logIn(String strEmail , string strpwd){
        return [SELECT FirstName,LastName,Account.Name,Email,Phone,MailingStreet,MailingCity,MailingState,MailingPostalCode,MailingCountry,Password__c ,accountId 
                FROM contact where  Email=:strEmail AND Password__c=:strpwd limit 1];
    } 
    
    
    
}
I hop its helps you
Thannks :)



 

All Answers

ShaikAShaikA
Hi Piyush,

My requirement is, i have a login screen(you can see login component above) with email and password(fields in contact), once user enter a valid details it should take to details screen(you can see detail component above) of that contact record.  if user enters a invalid data need to show error message on login screen.

Regards,
Shaik
sfdcMonkey.comsfdcMonkey.com
yup so here is workaroud you can create a single component for it and your contact detail code should be in <aura:if> tag byDefault isTrue="flase"  when the conditon are meet (email and password was match) <aura:if> isTrue set to true and you can see your contact detail part .
and hide logIn part of your page :)
is any issue ask here
Thanks
ShaikAShaikA
Hi Piyush,

if u have sample code, please provide me.

Regards,
Shaik
sfdcMonkey.comsfdcMonkey.com
Hi
try this
component
<aura:component controller="contactRegistrationController"> 
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>    
    <aura:attribute name="contacts" type="Contact[]"/>   
    <aura:attribute name="newContact" type="Contact"
         default="{ 'sobjectType': 'Contact',
                                 'Email': '',
                                 'Password__c': '' 
                          }"/>
        <aura:attribute name="loginFlag" type="boolean" default="true"/>
        <aura:attribute name="DetailFlag" type="boolean" default="false"/>
        
      <aura:if isTrue="{!v.loginFlag}">
        <!-- PAGE HEADER -->
        <div class="slds-page-header" role="banner">
          <div class="slds-grid">
            <div class="slds-col">
              <h1 class="slds-text-heading--medium">LogIn Page</h1>
            </div>
          </div>
        </div>
        <!-- NEW Contact FORM -->
        <div class="slds-col slds-col--padded slds-p-top--large">
    
      <div aria-labelledby="newcontactform">
    
      <!-- BOXED AREA -->
      <fieldset class="slds-box slds-theme--default slds-container--small">
    
        <legend id="newcontactform" class="slds-text-heading--small 
          slds-p-vertical--medium">
          Add Contact
        </legend>
    
        <!-- CREATE NEW Contact FORM -->
        <form class="slds-form--stacked">
             
             <div class="slds-form-element slds-is-required">
              <div class="slds-form-element__control">
                  <ui:inputText aura:id="email" label="Email"
                      class="slds-input"
                      labelClass="slds-form-element__label"
                      value="{!v.newContact.Email}"
                      required="true"/>
              </div>
             </div>
     
        <div class="slds-form-element slds-is-required">
              <div class="slds-form-element__control">
                  <ui:inputText aura:id="pwd" label="Password"
                      class="slds-input"
                      labelClass="slds-form-element__label"
                      value="{!v.newContact.Password__c}"
                      required=""/>
              </div>
       </div>
          
          <div class="slds-form-element">
              <ui:button label="Log In"
                  class="slds-button slds-button--brand"
                  press="{!c.clickLogIn}"/>    
          </div>
        </form>
      </fieldset>
    </div>
        </div>
    
       </aura:if>     
      
     <aura:if isTrue="{!v.DetailFlag}">
      <!--Detail page start-->
        <ui:button label="Log Out"
                  class="slds-button slds-button--brand"
                  press="{!c.doInit}"/>   
       <aura:iteration items="{!v.contacts}" var="singleCon">
           
     <article class="slds-card">
      <div class="slds-card__header slds-grid">
        <header class="slds-media slds-media--center slds-has-flexi-truncate">
            <h2>
              <a href="javascript:void(0);" class="slds-text-link--reset">
                <span class="slds-text-heading--small">{!singleCon.FirstName} &nbsp;{!singleCon.LastName}</span>
              </a>
            </h2>
        </header>
      </div>
      <div class="slds-card__body">
          <p>Email: {!singleCon.Email}</p>
          <p>Phone: {!singleCon.Phone}</p>
          <p>MailingStreet: {!singleCon.MailingStreet}</p>
          <p>MailingCity: {!singleCon.MailingCity}</p>
          <p>MailingState: {!singleCon.MailingState}</p>
          <p>MailingPostalCode: {!singleCon.MailingPostalCode}</p>
          <p>MailingCountry: {!singleCon.MailingCountry}</p>
          <p>Password: {!singleCon.Password__c}</p>
          <p>Account Name: {!singleCon.Account.Name}</p>
      </div>
    </article>
        
        </aura:iteration>
        </aura:if>
    </aura:component>
controller
({
    doInit : function(component,event,helper){
       component.set("v.loginFlag", true);
       component.set("v.DetailFlag", false);
     },
    
    clickLogIn : function(component,event,helper){
        var getLogIn  = component.get("v.newContact");
          //alert(getLogIn.Email);
         //alert(getLogIn.Password__c);
        if(getLogIn.Email != null && getLogIn.Password__c != null){
          alert('both are not null');  
        var action = component.get("c.logIn");
           action.setParams({
           strEmail : getLogIn.Email ,
           strpwd : getLogIn.Password__c
           });
         action.setCallback(this, function(response){
             var state = response.getState();
        if (component.isValid() && state === "SUCCESS") {
            component.set("v.loginFlag", false);
            component.set("v.DetailFlag", true);
            component.set("v.contacts", response.getReturnValue());
           
        }
    }); 
    $A.enqueueAction(action);
    
          }
      }
  
})
apex class
public with sharing class contactRegistrationController {
    
 
    
     @AuraEnabled 
    public static List<Contact> logIn(String strEmail , string strpwd){
        return [SELECT FirstName,LastName,Account.Name,Email,Phone,MailingStreet,MailingCity,MailingState,MailingPostalCode,MailingCountry,Password__c ,accountId 
                FROM contact where  Email=:strEmail AND Password__c=:strpwd limit 1];
    } 
    
    
    
}
I hop its helps you
Thannks :)



 
This was selected as the best answer
ShaikAShaikA
Thanks piyush.
ShaikAShaikA
Hi Piyush,

Please help me on below scenario, i have a table with list of data along with delete button, need to pass record id once delete button get click.

Compenet:
<aura:iteration items="{!v.lstProducts}" var="p" indexVar="idx">

    <tr>
         <th class="slds-cell-shrink" scope="col">
        <label class="slds-checkbox">

        <ui:inputCheckbox aura:id="InputSelect" value="{!p.selected}"  change="{!c.onChange}" />

            <span class="slds-checkbox--faux"></span>
          <span class="slds-assistive-text">Select All</span>
        </label>
      </th>
      <td data-label="Account Name">
        <div class="slds-truncate" title="Cloudhub">    

            <ui:outputText value="{!p.pro.Name}" />
</div>
      </td>
    <td data-label="Account Name">
        <div class="slds-truncate" title="Cloudhub">        
            <ui:outputText value="{!p.pro.ProductCode}" />
</div>
      </td>
      <td data-label="Account Name">
        <div class="slds-truncate" title="Cloudhub">        
            <ui:inputText value="{!p.pro.Quantity__c}" />
</div>
      </td>
          <td data-label="Account Name">
        <div class="slds-truncate" title="Cloudhub">        
            <ui:outputText value="{!p.pro.Description}" />
</div>
      </td>
      <td>
         <div class="slds-form-element">
            <div class="slds-card"  data-record="{!idx}" >
<ui:button label="Delete" class="slds-button slds-button--brand"  aura:id="mylink" press="{!c.deleteProduct}"/>
            </div> 
        </div>      
      </td>
    </tr>            
    </aura:iteration>                 

JS Controller:
({
   deleteProduct : function(component, event, helper) {
   
    }
})

Thanks in Advance
Shaik