Skip to content

Commit

Permalink
Improved loading of navigation (#1555)
Browse files Browse the repository at this point in the history
* Improved loading of navigation

Has a loading indicator and does not load until permissions are
fulfilled.  This should make it easier to tell when there is a network
issue from the users perspective instead of just loading the dashboard
link and nothing else.

Remove navigation controller which as far as I can tell was never used.

* Collapse if blocks into single block for clarity

These are all controlled by the same permissions so it makes sense for
them to be in the same block.
  • Loading branch information
jrjohnson authored and stopfstedt committed Apr 8, 2016
1 parent d2f736d commit 64494f4
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 49 deletions.
21 changes: 19 additions & 2 deletions app/components/ilios-navigation.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
import Ember from 'ember';

const { Component } = Ember;
const { Component, inject, computed, RSVP } = Ember;
const { service } = inject;
const { Promise } = RSVP;

export default Component.extend({
i18n: Ember.inject.service(),
i18n: service(),
currentUser: service(),
isMenuVisible: false,
permissions: computed('currentUser.model.roles.[]', function(){
return new Promise(resolve => {
this.get('currentUser.model').then(user => {
user.get('roles').then(roles => {
let ids = roles.mapBy('id');
let permissions = {
isFaculty: ids.contains('1')||ids.contains('2')||ids.contains('3'),
isAdmin: ids.contains('2'),
};
resolve(permissions);
});
});
});
}),
actions: {
toggleMenuVisibility: function(){
this.toggleProperty('isMenuVisible');
Expand Down
6 changes: 0 additions & 6 deletions app/controllers/navigation.js

This file was deleted.

14 changes: 10 additions & 4 deletions app/styles/components/_navigation.scss
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ $sliding-menu-color-hover: #fff;
text-align: center;
width: 120px;
z-index: 201;

@include media($giant-screen) {
display: none;
}

i {
@include transform(rotate(-90deg));
margin-right: 10px;
Expand All @@ -61,7 +61,7 @@ $sliding-menu-color-hover: #fff;
-webkit-overflow-scrolling: touch;
padding-top: 2em;
z-index: 201;

@include media($giant-screen) {
@include transform(translateX(0));
}
Expand All @@ -82,6 +82,12 @@ $sliding-menu-color-hover: #fff;
}
}

.loading-indicator {
font-size: 2em;
text-align: center;
width: 100%;
}

&.is-menu-visible {
@include transform(translateX(0));
}
Expand All @@ -97,7 +103,7 @@ $sliding-menu-color-hover: #fff;

&.is-menu-visible {
visibility: visible;

@include media($giant-screen) {
visibility: hidden;
}
Expand Down
40 changes: 19 additions & 21 deletions app/templates/components/ilios-navigation.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,25 @@
{{fa-icon 'bars'}} {{t 'navigation.menu'}}
</a>
<nav {{action 'toggleMenuVisibility'}} class="sliding-menu-content {{if isMenuVisible 'is-menu-visible'}}">
<ul>
<li id='slidingnavmenu-dashboard'>{{#link-to 'dashboard'}}{{fa-icon 'home'}} {{t 'navigation.dashboard'}}{{/link-to}}</li>
{{#if (can 'edit courses')}}
<li id='slidingnavmenu-courses'>{{#link-to 'courses'}}{{fa-icon 'book'}} {{t 'navigation.courses'}}{{/link-to}}</li>
{{/if}}
{{#if (can 'edit learnerGroups')}}
<li id='slidingnavmenu-learnergroups'>{{#link-to 'learnerGroups'}}{{fa-icon 'mortar-board'}} {{t 'navigation.learnerGroups'}}{{/link-to}}</li>
{{/if}}
{{#if (can 'edit instructorGroups')}}
<li id='slidingnavmenu-instructorgroups'>{{#link-to 'instructorGroups'}}{{fa-icon 'user-md'}} {{t 'navigation.instructorGroups'}}{{/link-to}}</li>
{{/if}}
{{#if (can 'edit schools')}}
<li id='slidingnavmenu-schools'>{{#link-to 'schools'}}{{fa-icon 'university'}} {{t 'general.schools'}}{{/link-to}}</li>
{{/if}}
{{#if (can 'edit programs')}}
<li id='slidingnavmenu-programs'>{{#link-to 'programs'}}{{fa-icon 'list-alt'}} {{t 'navigation.programs'}}{{/link-to}}</li>
{{/if}}
{{#if (can 'view adminDashboard')}}
<li id='slidingnavmenu-admindashboard'>{{#link-to 'admin-dashboard'}}{{fa-icon 'cogs'}} {{t 'navigation.admin'}}{{/link-to}}</li>
{{/if}}
</ul>
{{#if (is-fulfilled permissions)}}
<ul>
<li id='slidingnavmenu-dashboard'>{{#link-to 'dashboard'}}{{fa-icon 'home'}} {{t 'navigation.dashboard'}}{{/link-to}}</li>
{{#if (get (await permissions) 'isFaculty')}}
<li id='slidingnavmenu-courses'>{{#link-to 'courses'}}{{fa-icon 'book'}} {{t 'navigation.courses'}}{{/link-to}}</li>
<li id='slidingnavmenu-learnergroups'>{{#link-to 'learnerGroups'}}{{fa-icon 'mortar-board'}} {{t 'navigation.learnerGroups'}}{{/link-to}}</li>
<li id='slidingnavmenu-instructorgroups'>{{#link-to 'instructorGroups'}}{{fa-icon 'user-md'}} {{t 'navigation.instructorGroups'}}{{/link-to}}</li>
<li id='slidingnavmenu-schools'>{{#link-to 'schools'}}{{fa-icon 'university'}} {{t 'general.schools'}}{{/link-to}}</li>
<li id='slidingnavmenu-programs'>{{#link-to 'programs'}}{{fa-icon 'list-alt'}} {{t 'navigation.programs'}}{{/link-to}}</li>
{{/if}}
{{#if (get (await permissions) 'isAdmin')}}
<li id='slidingnavmenu-admindashboard'>{{#link-to 'admin-dashboard'}}{{fa-icon 'cogs'}} {{t 'navigation.admin'}}{{/link-to}}</li>
{{/if}}
</ul>
{{else}}
<div class='loading-indicator'>
{{fa-icon 'spinner' spin=true}}
</div>
{{/if}}
</nav>
<div {{action 'toggleMenuVisibility'}} class="menu-screen {{if isMenuVisible 'is-menu-visible'}}"></div>
</div>
16 changes: 0 additions & 16 deletions tests/unit/controllers/navigation-test.js

This file was deleted.

0 comments on commit 64494f4

Please sign in to comment.