In this blog, I am going to show how to use the lightning:overlayLibrary component to create custom modals.This component requires API version 41.0 and later.

Modals can be used to display messages on the current app window by displaying  a dialog in the foreground of the app, interrupting a user’s workflow and drawing attention to the message.

In the example given below, the modal displays the text written in the lightning input on the click of a button.The content of the modal can be formatted as per requirements.

In this example, following components are used:

Main Component (Modal.cmp) – Will contain lightning:overlayLibrary tag with aura:id attribute and a lightning:button to open the modal on click.

Modal Content (ModalContent.cmp) – This component contains all the content to show in the Modal as content.

Modal footer (ModalFooter.cmp) – This component contains all the footer part of the modal.

Modal.cmp

<aura:component implements="flexipage:availableForAllPageTypes,flexipage:availableForRecordHome" access="global">
    <aura:attribute name="modalText" type="String"/>
    <lightning:overlayLibrary aura:id="overlayLibModal"/>
    
    <lightning:input name="text" label="Modal Text" value="{!v. modalText }" />
    <lightning:button name="modal" label="ShowModal" onclick="{!c.showModal}"/>
</aura:component>

 

ModalController.js

({
    showModal : function (component, event, helper) {
        var modalText = component.get("v.modalText");
        var modalBody;
        var modalFooter;
        $A.createComponents([
            ["c:modalContent",{
                modalText : modalText
            }],
            ["c:ModalFooter",{}]
        ],
                            function(content, status){
                                if (status === "SUCCESS") {
                                    modalBody = content[0];
                                    modalFooter = content[1];
                                    component.find('overlayLibModal').showCustomModal({
                                        header: "Modal",
                                        body: modalBody,
                                        footer: modalFooter,
                                        showCloseButton: true,
                                        
                                        closeCallback: function() {
                                            console.log('You closed the alert!');
                                        }
                                    })
                                }
                            }
                           );
    }
})

 

ModalContent.cmp

<aura:component >
    <aura:attribute name="modalText" type="String"/>
    
    <lightning:icon size="medium" iconName="action:approval" alternativeText="Approved" />
    Your Modal text is {!v.modalText} .
</aura:component>

ModalFooter.cmp

<aura:component>
    <lightning:overlayLibrary aura:id="overlayLib"/>
    <lightning:button name="ok" label="OK" variant="brand" onclick="{!c.handleOK}"/>
</aura:component>

ModalFooterController.js

({
    handleOK : function(component, event, helper) {
        //closes the modal or popover from the component
        component.find("overlayLib").notifyClose();
    },
})


modalText

modal

Leave A Reply

Please verify that you are not a robot.

Tell us about Your Company

How can we help you with your business?




    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home