Skip to content

Commit

Permalink
fixes bug 1393024 - nav replaced with navbar in bulma 0.5 (#341)
Browse files Browse the repository at this point in the history
* fixes bug 1393024 - nav replaced with navbar in bulma 0.5

* Nav observe the store
  • Loading branch information
Peter Bengtsson committed Aug 23, 2017
1 parent 2ae37ee commit f36922a
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 78 deletions.
89 changes: 11 additions & 78 deletions frontend/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import './App.css'
import {
BrowserRouter as Router,
Route,
NavLink,
Redirect
} from 'react-router-dom'
import Raven from 'raven-js'
import { observer } from 'mobx-react'
import 'bulma/css/bulma.css'

import Nav from './Nav'
import Home from './Home'
import Help from './Help'
import Tokens from './Tokens'
Expand Down Expand Up @@ -38,6 +38,10 @@ const App = observer(
}

componentWillMount() {
this._fetchAuth()
}

_fetchAuth = () => {
Fetch('/api/_auth/', { credentials: 'same-origin' }).then(r => {
if (r.status === 200) {
if (store.fetchError) {
Expand Down Expand Up @@ -97,6 +101,8 @@ const App = observer(
message: 'Signed out',
success: true
})
// This'll refetch the signInUrl
this._fetchAuth()
})
}

Expand All @@ -114,83 +120,10 @@ const App = observer(
return (
<Router>
<div>
<nav className="nav has-shadow" id="top">
<div className="container">
<div className="nav-left">
<a className="nav-item" href="/">
Mozilla Symbol Server
</a>
</div>
<span className="nav-toggle">
<span />
<span />
<span />
</span>
<div className="nav-right nav-menu">
<NavLink
to="/"
exact
className="nav-item is-tab"
activeClassName="is-active"
>
Home
</NavLink>
{store.currentUser && store.currentUser.is_superuser
? <NavLink
to="/users"
className="nav-item is-tab"
activeClassName="is-active"
>
User Management
</NavLink>
: null}
{store.currentUser &&
store.hasPermission('tokens.manage_tokens') &&
<NavLink
to="/tokens"
className="nav-item is-tab"
activeClassName="is-active"
>
API Tokens
</NavLink>}
{store.currentUser &&
store.hasPermission('upload.upload_symbols') &&
<NavLink
to="/uploads"
className="nav-item is-tab"
activeClassName="is-active"
>
Uploads
</NavLink>}
<NavLink
to="/help"
className="nav-item is-tab"
activeClassName="is-active"
>
Help
</NavLink>
<span className="nav-item">
{store.currentUser
&& <button
onClick={this.signOut}
className="button is-info"
title={`Signed in as ${store.currentUser.email}`}
>
Sign Out
</button>
}
{!store.currentUser && store.signInUrl &&
<button
onClick={this.signIn}
className="button is-info"
>
Sign In
</button>
}
</span>
</div>
</div>
</nav>
<Nav
signIn={this.signIn}
signOut={this.signOut}
/>
<section className="section">
<div className="container">
<DisplayNotificationMessage
Expand Down
3 changes: 3 additions & 0 deletions frontend/src/Nav.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
a.navbar-item.is-active {
font-weight: bold;
}
120 changes: 120 additions & 0 deletions frontend/src/Nav.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import React, { Component } from 'react'
import { NavLink, Link } from 'react-router-dom'
import { observer } from 'mobx-react'
import './Nav.css'
import store from './Store'

const Nav = observer(
class Nav extends Component {
constructor(props) {
super(props)

this.state = {
menuToggled: true
}
}

toggleMenu = event => {
event.preventDefault()
this.setState({ menuToggled: !this.state.menuToggled })
}

render() {
return (
<nav className="navbar has-shadow" id="top">
<div className="navbar-brand">
<Link className="navbar-item" to="/">
Mozilla Symbol Server
</Link>

<div
data-target="navMenubd-example"
className={
this.state.menuToggled
? 'navbar-burger'
: 'navbar-burger is-active'
}
onClick={this.toggleMenu}
>
<span />
<span />
<span />
</div>
</div>

<div
id="navMenubd-example"
className={
this.state.menuToggled ? 'navbar-menu' : 'navbar-menu is-active'
}
>
<div className="navbar-end">
<NavLink
to="/"
exact
className="navbar-item"
activeClassName="is-active"
>
Home
</NavLink>
{store.currentUser && store.currentUser.is_superuser
? <NavLink
to="/users"
className="navbar-item"
activeClassName="is-active"
>
User Management
</NavLink>
: null}
{store.currentUser &&
store.hasPermission('tokens.manage_tokens') &&
<NavLink
to="/tokens"
className="navbar-item"
activeClassName="is-active"
>
API Tokens
</NavLink>}
{store.currentUser &&
store.hasPermission('upload.upload_symbols') &&
<NavLink
to="/uploads"
className="navbar-item"
activeClassName="is-active"
>
Uploads
</NavLink>}
<NavLink
to="/help"
className="navbar-item"
activeClassName="is-active"
>
Help
</NavLink>
<span className="navbar-item">
{store.currentUser &&
<button
onClick={this.props.signOut}
className="button is-info"
title={`Signed in as ${store.currentUser.email}`}
>
Sign Out
</button>}
{!store.currentUser &&
store.signInUrl &&
<button
onClick={this.props.signIn}
className="button is-info"
>
Sign In
</button>}
</span>
</div>
</div>
</nav>
)
}
}
)

export default Nav

0 comments on commit f36922a

Please sign in to comment.