How To Create Expand/Collapse Sections In Salesforce Lightning Component

How To Create Expand/Collapse Sections In Salesforce Lightning Component

Lightning Component : collapseSections.cmp

<aura:component implements=”force:appHostable” access=”global” >

    <!–section 1 start–>  

    <div class=”slds-section slds-is-open” aura:id=”fruitsSection”>

        <!–section header–>

        <h3 class=”slds-section__title”>

            <button aria-controls=”fruitsList” class=”slds-button slds-section__title-action”>

                <span onclick=”{!c.toggleSection}” data-auraId=”fruitsSection”>

                    <lightning:icon iconName=”utility:switch”

                                    size=”x-small”

                                    class=”slds-section__title-action-icon slds-button__icon_left”

                                    alternativeText=”button icon”

                                    />

                </span>

                <span class=”slds-truncate” title=”Fruits”>Fruits</span>

            </button>

        </h3>

        <!–section body–>

        <div class=”slds-section__content” id=”fruitsList”>

            <p>Apple</p>

            <p>Apricots</p>

            <p>Banana</p>

            <p>Cherimoya</p>

            <p>Grapefruit</p>

        </div>

    </div>

    <!–section 1 end–>

    <!–section 2 start–>  

    <div class=”slds-section slds-is-open” aura:id=”VegetablesSection”>

        <!–section header–>

        <h3 class=”slds-section__title”>

            <button aria-controls=”VegetablesId” class=”slds-button slds-section__title-action”>

                <span onclick=”{!c.toggleSection}” data-auraId=”VegetablesSection”>

                    <lightning:icon iconName=”utility:switch”

                                    alternativeText=”button icon”

                                    size=”x-small”

                                    class=”slds-section__title-action-icon slds-button__icon_left”/>

                </span>

                <span class=”slds-truncate” title=”Vegetables”>Vegetables</span>

            </button>

        </h3>

        <!–section body–>

        <div class=”slds-section__content” id=”VegetablesId”>

            <p>Broccoli</p>

            <p>Corn</p>

            <p>Pumpkin</p>

            <p>Tomato</p>

            <p>Beetroot</p>

        </div>

    </div>

    <!–section 2 end–>

    <!–section 3 start–>  

    <div class=”slds-section slds-is-open” aura:id=”colorSection”>

        <!–section header–>

        <h3 class=”slds-section__title”>

            <button aria-controls=”VegetablesId” class=”slds-button slds-section__title-action”>

                <span onclick=”{!c.toggleSection}” data-auraId=”colorSection”>

                    <lightning:icon iconName=”utility:switch”

                                    alternativeText=”button icon”

                                    size=”x-small”

                                    class=”slds-section__title-action-icon slds-button__icon_left”/>

                </span>

                <span class=”slds-truncate” title=”Vegetables”>Colors</span>

            </button>

        </h3>

        <!–section body–>

        <div class=”slds-section__content” id=”VegetablesId”>

            <p>Red</p>

            <p>Green</p>

            <p>Blue</p>

        </div>

    </div>

    <!–section 3 end–>

</aura:component>

Note:- Section aura:id and data-auraId attributes must be same.

JavaScript Controller : collapseSectionsController.js

({

// common reusable function for toggle sections

    toggleSection :function(component, event, helper) {

        //dynamically get aura:id name from ‘data-auraId’ attribute

        var sectionAuraId = event.target.getAttribute(“data-auraId”);

         // get section Div element using aura:id

        var sectionDiv = component.find(sectionAuraId).getElement();

        /* The search() method searches for ‘slds-is-open’ class, and returns the position of the match.

      *  This method returns -1 if no match is found. */

        var sectionState = sectionDiv.getAttribute(‘class’).search(‘slds-is-open’);

               // -1 if ‘slds-is-open’ class is missing…then set ‘slds-is-open’ class else set slds-is-close class to element

        if(sectionState == -1){

            sectionDiv.setAttribute(‘class’, ‘slds-section slds-is-open’);

        }else{

            sectionDiv.setAttribute(‘class’, ‘slds-section slds-is-close’);

        }

    }

})

 TestApp :

<aura:application extends=”force:slds”>

    <c:collapseSections/>

<!– here c: is org. default namespace prefix–></span>

</aura:application>