This blog article will illustrate how the various social links are specified in the the footer of Open Event Frontend, using the settings API. Open Event Frontend, offers high flexibility to the admins regarding the settings of the App, and hence the media links are not hard coded, and can be changed easily via the admin settings panel.
The primary end point of Open Event API with which we are concerned with for fetching the settings for the app is
GET /v1/settings
The model for settings has the following fields which concern the social links.
googleUrl : attr('string'), githubUrl : attr('string'), twitterUrl : attr('string')
Next we define them as segmented URL(s) so that they can make use of the link input widget.
segmentedTwitterUrl : computedSegmentedLink.bind(this)('twitterUrl'), segmentedGoogleUrl : computedSegmentedLink.bind(this)('googleUrl'), segmentedGithubUrl : computedSegmentedLink.bind(this)('githubUrl'),
Now it is required for us to fetch the data from the API, by making the corresponding call to the API. Since the footer is present in every single page of the app, it is necessary that we make the call from the application route itself. Hence we add the following to the application route modal.
socialLinks: this.get('store').queryRecord('setting', { })
Next we need to iterate over these social links, and add them to the footer as per their availability.So we will do so by first passing the model to the footer component, and then iterating over it in footer.hbs
{{footer-main socialLinks=model.socialLinks footerPages=footerPages}}
And thus we have passed the socialLinks portion of the model, under the alias socialLinks.Next, we iterate over them and each time check, if the link exists before rendering it.
<div class="three wide column"> <div class="ui inverted link list"> <strong class="item">{{t 'Connect with us'}}</strong> {{#if socialLinks.supportUrl}} <a class="item" href="{{socialLinks.supportUrl}}" target="_blank" rel="noopener noreferrer"> <i class="info icon"></i> {{t 'Support'}} </a> {{/if}} {{#if socialLinks.facebookUrl}} <a class="item" href="{{socialLinks.facebookUrl}}" target="_blank" rel="noopener noreferrer"> <i class="facebook f icon"></i> {{t 'Facebook'}} </a> {{/if}} {{#if socialLinks.youtubeUrl}} <a class="item" href="{{socialLinks.youtubeUrl}}" target="_blank" rel="noopener noreferrer"> <i class="youtube icon"></i> {{t 'Youtube'}} </a> {{/if}} {{#if socialLinks.googleUrl}} <a class="item" href="{{socialLinks.googleUrl}}" target="_blank" rel="noopener noreferrer"> <i class="google plus icon"></i> {{t 'Google +'}} </a> {{/if}} </div> </div>
Thus all the links in the app are easily manageable, from the admin settings menu, without the need of hard coding them. This approach also, makes it easy to preserve the configuration in a central location.
Resources
- Ember JS-models – Official ember documentation
- Open Event API Docs – authored by Fossasia project open-event-orga-server contributors