Debug, logging, about added to ADMIN dropdown
[osm/UI.git] / skyquake / framework / widgets / skyquake_nav / skyquakeNav.jsx
index a61ee54..1aaaf4d 100644 (file)
@@ -25,6 +25,7 @@ import 'style/common.scss';
 import './skyquakeNav.scss';
 import SelectOption from '../form_controls/selectOption.jsx';
 import {FormSection} from '../form_controls/formControls.jsx';
+import SkyquakeRBAC from 'widgets/skyquake_rbac/skyquakeRBAC.jsx';
 
 //Temporary, until api server is on same port as webserver
 var rw = require('utils/rw.js');
@@ -63,21 +64,28 @@ class SelectProject extends React.Component {
     render() {
         let props = this.props;
         let currentValue = JSON.stringify(props.currentProject);
-        let projects = this.props.projects.map((p,i) => {
+        let projects = this.props.projects && this.props.projects.map((p,i) => {
             return {
                 label: p.name,
                 value: p.name
             }
         });
+        let hasProjects = (this.props.projects && (this.props.projects.length > 0))
         return (
             <div className="userSection app">
-                Project:
-                <SelectOption
-                    options={projects}
-                    value={currentValue}
-                    defaultValue={currentValue}
-                    onChange={props.onSelectProject}
-                    className="projectSelect" />
+                {
+                    hasProjects ?  'Project:' : 'No Projects Assigned'
+                }
+                {
+                    hasProjects ?
+                    <SelectOption
+                        options={projects}
+                        value={currentValue}
+                        defaultValue={currentValue}
+                        onChange={props.onSelectProject}
+                        className="projectSelect" />
+                    : null
+                }
             </div>
         )
     }
@@ -96,12 +104,16 @@ class UserNav extends React.Component {
     }
     render() {
         let props = this.props;
+        let userProfileLink = '';
+        this.props.nav['user_management'] && this.props.nav['user_management'].routes.map((r) => {
+            if(r.unique) {
+                userProfileLink = returnLinkItem(r, props.currentUser)
+            }
+        })
         return (
             <div className="app">
                 <h2>
-                    <a>
-                        {props.currentUser}
-                    </a>
+                    USER: {userProfileLink}
                     <span className="oi" data-glyph="caret-bottom"></span>
                 </h2>
                 <ul className="menu">
@@ -205,12 +217,12 @@ export function buildNavListItem (k, link, index) {
  * @param  {object} link Routing information from nav object.
  * @return {object}  component   returns a react component that links to a new route.
  */
-export function returnLinkItem(link) {
+export function returnLinkItem(link, label) {
     let ref;
     let route = link.route;
     if(link.isExternal) {
         ref = (
-            <a href={route}>{link.label}</a>
+            <a href={route}>{label || link.label}</a>
         )
     } else {
         if(link.path && link.path.replace(' ', '') != '') {
@@ -225,8 +237,8 @@ export function returnLinkItem(link) {
             }
         }
         ref = (
-           <Link to={route}>
-                {link.label}
+            <Link to={route}>
+                {label || link.label}
             </Link>
         )
     }
@@ -245,17 +257,31 @@ export function buildNav(nav, currentPlugin, props) {
     let navList = [];
     let navListHTML = [];
     let secondaryNav = [];
+    let adminNav = [];
     let self = this;
     self.hasSubNav = {};
     let secondaryNavHTML = (
         <div className="secondaryNav" key="secondaryNav">
             {secondaryNav}
+            <div className="app admin">
+                <h2>
+                    <a>
+                        ADMIN <span className="oi" data-glyph="caret-bottom"></span>
+                    </a>
+                </h2>
+                <ul className="menu">
+                    {
+                        adminNav
+                    }
+                </ul>
+            </div>
             <SelectProject
                 onSelectProject={props.store.selectActiveProject}
                 projects={props.projects}
                 currentProject={props.currentProject} />
             <UserNav
-                currentUser={props.currentUser}  />
+                currentUser={props.currentUser}
+                nav={nav}  />
         </div>
     )
     for (let k in nav) {
@@ -285,17 +311,26 @@ export function buildNav(nav, currentPlugin, props) {
             NavList = nav[k].routes.map(buildNavListItem.bind(self, k));
             navItem.priority = nav[k].priority;
             navItem.order = nav[k].order;
-            navItem.html = (
-                <div key={k} className={navClass}>
+            if(nav[k].admin_link) {
+                adminNav.push((
+                    <li key={nav[k].name}>
+                        {dashboardLink}
+                    </li>
+                ))
+            } else {
+                            navItem.html = (
+                <SkyquakeRBAC allow={nav[k].allow || ['*']} key={k} className={navClass}>
                     <h2>{dashboardLink} {self.hasSubNav[k] ? <span className="oi" data-glyph="caret-bottom"></span> : ''}</h2>
                     <ul className="menu">
                         {
                             NavList
                         }
                     </ul>
-                </div>
+                </SkyquakeRBAC>
             );
             navList.push(navItem)
+            }
+
         }
     }
     //Sorts nav items by order and returns only the markup