10

Title says it all. Does a Lightning Component know if it is in a Community or a standard Lightning Salesforce page?

I have a component that implements both the interface for Community as Standard Lightning: <aura:component implements="forceCommunity:availableForAllPageTypes,flexipage:availableForAllPageTypes,force:hasRecordId" />

I want this component to behave differently depending on if it is on the Community or in standard Lightning. I can solve this by adding an attribute to the component and setting it through the property editor in the Lightning App Builder/Community Builder. But I'm wondering if I can solve this without this attribute.

8

I have made a blog about how to resolve this issue without having to add a design attribute. Link: http://kevansfdc.blogspot.com/2017/02/does-lightning-component-know-if-it-is.html

The solution I propose is to use a aura enabled method which return whether you are in a site context using the Site class that come natively with Salesforce.

@AuraEnabled
public static boolean isCommunity(){
    Id siteId = Site.getSiteId(); // take a look at the apex class Site, you may find more useful method concerning site/community
    if (siteId != null) {
        return true;
    }
    return false;
}

And simply calling this method through an action in Lightning.

var action = component.get("c.isCommunity");
action.setCallback(this, function(response) {
var isCommunity = response.getReturnValue(); // do any operation needed here
});
$A.enqueueAction(action);

Hope this is useful as an answer. Cheers!

2
  • 2
    Link only answers can break over time and are not very valuable to the community. If your link answers the question, please add the relevant content here. Just imagine if the link were removed or broke, your question should still hold up. – Adrian Larson Feb 9 '17 at 15:28
  • I looked at your blog post, and I think it's a pretty good solution. Why don't you edit your answer to include that content (in addition to the link). – John Thompson Feb 9 '17 at 15:41
4

We ended up going for the attribute/property editor route.

Component:

<aura:attribute name="environmentType" type="String" description="This variable is used to indicate which environment this component is displayed on, f.i. community vs standard lightning" />

Design file:

<design:attribute name="environmentType" label="Environment Type" datasource="Community,Standard" required="true" description="Please indicate which environment this component is hosted on."/>

Use the property editor in the Lightning App Builder to set the attribute to the right value for the environment it is on.

Property Editor

Then in your controller/helper you can check which environment the component is viewed on.

var environment = component.get('v.environmentType');
if (environment == 'Community') {
    // Do Community logic
} else if (environment == 'Standard') {
    // Do Standard Lightning logic
}
1

You can use the UI Theme to check which theme you are on right now:

Introducing UI Theme Detection for Lightning

I do not know which theme is for community - maybe the PortalDefault.

2
  • Interesting thought. Just quickly tested it, Community gives Theme3, which is the Salesforce Classic 2010 user interface theme. Not sure yet if I prefer this solution to the solution with attribute, because using this Lightning Component in SF classic would also give Theme3. – Folkert Oct 5 '16 at 10:09
  • Yes, this is strange, it seems like Salesforce needs to add another UI Theme for the community container. – Itai Shmida Oct 5 '16 at 11:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.