Files
old-svijetlastrana-front/src/components/Sidenav/SidenavContent.js
2018-05-30 08:52:10 +02:00

177 lines
6.5 KiB
JavaScript

import React from 'react';
import { Link, hashHistory } from 'react-router';
import FlatButton from 'material-ui/FlatButton';
import 'jquery-slimscroll/jquery.slimscroll.min';
import {
loggedUser,
planScheduler,
providerScheduler,
visitReporter,
} from 'utils/authorization';
class SidebarContent extends React.Component {
state = {
user: {
user_uuid: '',
},
}
componentDidMount() {
const nav = this.nav;
const $nav = $(nav);
// scroll
$nav.slimscroll({
height: '100%'
});
// Append icon to submenu
// Append to child `div`
$nav.find('.prepend-icon').children('div').prepend('<i class="material-icons">keyboard_arrow_right</i>');
// AccordionNav
const slideTime = 250;
const $lists = $nav.find('ul').parent('li');
$lists.append('<i class="material-icons icon-has-ul">arrow_drop_down</i>');
const $As = $lists.children('a');
// Disable A link that has ul
$As.on('click', event => event.preventDefault());
// Accordion nav
$nav.on('click', (e) => {
const target = e.target;
const $parentLi = $(target).closest('li'); // closest, insead of parent, so it still works when click on i icons
if (!$parentLi.length) return; // return if doesn't click on li
const $subUl = $parentLi.children('ul');
// let depth = $subUl.parents().length; // but some li has no sub ul, so...
const depth = $parentLi.parents().length + 1;
// filter out all elements (except target) at current depth or greater
const allAtDepth = $nav.find('ul').filter(function () {
if ($(this).parents().length >= depth && this !== $subUl.get(0)) {
return true;
}
return false;
});
allAtDepth.slideUp(slideTime).closest('li').removeClass('open');
// Toggle target
if ($parentLi.has('ul').length) {
$parentLi.toggleClass('open');
}
$subUl.stop().slideToggle(slideTime);
});
// HighlightActiveItems
const $links = $nav.find('a');
const currentLocation = hashHistory.getCurrentLocation();
function highlightActive(pathname) {
const path = `#${pathname}`;
$links.each((i, link) => {
const $link = $(link);
const $li = $link.parent('li');
const href = $link.attr('href');
// console.log(href);
if ($li.hasClass('active')) {
$li.removeClass('active');
}
if (path.indexOf(href) === 0) {
$li.addClass('active');
}
});
}
highlightActive(currentLocation.pathname);
hashHistory.listen((location) => {
highlightActive(location.pathname);
});
const user = JSON.parse(localStorage.getItem('loggedUser'));
if (user) {
this.setState(Object.assign(this.state, { user: user }));
}
}
render() {
return (
<ul className="nav" ref={(c) => { this.nav = c; }}>
{loggedUser.anyOf(visitReporter) &&
<li>
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">schedule</i><span className="nav-text">Visits</span></FlatButton>
<ul>
<li><FlatButton className="prepend-icon" href={"#/app/form/visit/" + this.state.user.useruuid}><span>Add Visit</span></FlatButton></li>
</ul>
</li>
}
{!loggedUser.anyOf(visitReporter) &&
<li>
<FlatButton href="#/app/form"><i className="nav-icon material-icons cyan-text text-lighter-4">directions_car</i><span className="nav-text">Rides</span></FlatButton>
<ul>
<li><FlatButton className="prepend-icon" href={"#/app/form/steppers/" + this.state.user.useruuid}><span>Book Rides</span></FlatButton></li>
<li><FlatButton className="prepend-icon" href="#/app/table/rides"><span>Manage Rides</span></FlatButton></li>
</ul>
</li>
}
{!loggedUser.anyOf(visitReporter) &&
<li>
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">people_outline</i><span className="nav-text">Members</span></FlatButton>
<ul>
<li><FlatButton className="prepend-icon" href="#/app/page/eligibility"><span>Verify Eligibility</span></FlatButton></li>
<li><FlatButton className="prepend-icon" href="#/app/table/members"><span>Manage Members</span></FlatButton></li>
</ul>
</li>
}
{!loggedUser.anyOf(visitReporter) &&
<li>
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">schedule</i><span className="nav-text">Visits</span></FlatButton>
<ul>
<li><FlatButton className="prepend-icon" href={"#/app/form/visit/" + this.state.user.useruuid}><span>Create Visit</span></FlatButton></li>
<li> <FlatButton className="prepend-icon" href="#/app/table/visits"><span className="nav-text">Manage Visits</span></FlatButton></li>
</ul>
</li>
}
{!loggedUser.anyOf(visitReporter) &&
<li>
<FlatButton href="#/app/chart"><i className="nav-icon material-icons">settings</i><span className="nav-text">Manage</span></FlatButton>
<ul>
{!loggedUser.anyOf(planScheduler, providerScheduler) &&
<li>
<FlatButton href="#/app/table/authorizedusers"><i className="nav-icon material-icons">people</i><span className="nav-text">Authorized Users</span></FlatButton>
</li>
}
<li>
<FlatButton href="#/app/table/organizations"><i className="nav-icon material-icons">assignment</i><span className="nav-text">Organizations</span></FlatButton>
</li>
<li>
<FlatButton href="#/app/table/provider"><i className="nav-icon material-icons">local_hospital</i><span className="nav-text">Participating Providers</span></FlatButton>
</li>
<li>
<FlatButton href={"#/app/authorizedusers/" + this.state.user.useruuid}><i className="nav-icon material-icons">account_circle</i><span className="nav-text">Profile</span></FlatButton>
</li>
{/* <li>
<FlatButton href="#/app/dashboard"><i className="nav-icon material-icons">equalizer</i><span className="nav-text">Reports</span></FlatButton>
</li> */}
</ul>
</li>
}
<li className="nav-divider" />
<li><FlatButton className="prepend-icon" href={"#/login"}><span>Log Out</span></FlatButton></li>
</ul>
);
}
}
module.exports = SidebarContent;