Add username in navbar
This commit is contained in:
parent
0ed8759bab
commit
1bb5433b0d
@ -1,5 +1,6 @@
|
|||||||
export const ADD_MOVIES = 'ADD_MOVIES'
|
export const ADD_MOVIES = 'ADD_MOVIES'
|
||||||
export const SELECT_MOVIE = 'SELECT_MOVIE'
|
export const SELECT_MOVIE = 'SELECT_MOVIE'
|
||||||
|
export const IS_USER_LOGGED_IN = 'IS_USER_LOGGED_IN'
|
||||||
|
|
||||||
// Select Movie
|
// Select Movie
|
||||||
export function selectMovie(index) {
|
export function selectMovie(index) {
|
||||||
@ -15,3 +16,9 @@ export function addMovies(movies) {
|
|||||||
movies
|
movies
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isUserLoggedIn() {
|
||||||
|
return {
|
||||||
|
type: IS_USER_LOGGED_IN,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -19,7 +19,7 @@ class Main extends React.Component {
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="navbar navbar-inverse navbar-fixed-top">
|
<div className="navbar navbar-inverse navbar-fixed-top">
|
||||||
<NavBar />
|
<NavBar {...this.props}/>
|
||||||
</div>
|
</div>
|
||||||
<div className="container-fluid">
|
<div className="container-fluid">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
@ -1,8 +1,15 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { Link } from 'react-router'
|
import { Link } from 'react-router'
|
||||||
|
import { store } from '../store'
|
||||||
|
import { isUserLoggedIn } from '../actions/actionCreators'
|
||||||
|
|
||||||
export default class NavBar extends React.Component {
|
export default class NavBar extends React.Component {
|
||||||
|
componentDidMount() {
|
||||||
|
this.props.isUserLoggedIn()
|
||||||
|
}
|
||||||
render() {
|
render() {
|
||||||
|
const username = this.props.userStore.username;
|
||||||
|
const isLoggedIn = username !== "" ? true : false;
|
||||||
return (
|
return (
|
||||||
<div className="container-fluid">
|
<div className="container-fluid">
|
||||||
<div className="navbar-header">
|
<div className="navbar-header">
|
||||||
@ -14,10 +21,20 @@ export default class NavBar extends React.Component {
|
|||||||
</button>
|
</button>
|
||||||
<a className="navbar-brand" href="#">Canape</a>
|
<a className="navbar-brand" href="#">Canape</a>
|
||||||
</div>
|
</div>
|
||||||
<div className="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
<div className="collapse navbar-collapse">
|
||||||
<ul className="nav navbar-nav">
|
<ul className="nav navbar-nav">
|
||||||
<li><Link to="/movies/popular">Movies</Link></li>
|
<li><Link to="/movies/popular">Movies</Link></li>
|
||||||
|
</ul>
|
||||||
|
<ul className="nav navbar-nav navbar-right">
|
||||||
|
{isLoggedIn &&
|
||||||
|
<li><Link to="/users/details">{username} / Edit</Link></li>
|
||||||
|
}
|
||||||
|
{isLoggedIn ||
|
||||||
<li><Link to="/users/login">Login</Link></li>
|
<li><Link to="/users/login">Login</Link></li>
|
||||||
|
}
|
||||||
|
{isLoggedIn &&
|
||||||
|
<li><Link to="/users/logout">Logout</Link></li>
|
||||||
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
|
import { IS_USER_LOGGED_IN } from '../actions/actionCreators'
|
||||||
|
import jwtDecode from 'jwt-decode'
|
||||||
|
|
||||||
const defaultState = {
|
const defaultState = {
|
||||||
userLoading: false,
|
userLoading: false,
|
||||||
|
username: "",
|
||||||
|
isAdmin: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
// This actions are generated from the promise middleware
|
// This actions are generated from the promise middleware
|
||||||
@ -11,10 +16,32 @@ export default function userStore(state = defaultState, action) {
|
|||||||
userLoading: true,
|
userLoading: true,
|
||||||
})
|
})
|
||||||
case 'USER_LOGIN_FULFILLED':
|
case 'USER_LOGIN_FULFILLED':
|
||||||
return Object.assign({}, state, {
|
if (action.payload.data.type === "error") {
|
||||||
userLoading: false,
|
return logoutUser(state)
|
||||||
})
|
}
|
||||||
|
return updateFromToken(state, action.payload.data.token)
|
||||||
|
case IS_USER_LOGGED_IN:
|
||||||
|
let localToken = localStorage.getItem('token');
|
||||||
|
if (localToken === "") {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
return updateFromToken(state, localToken)
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function logoutUser(state) {
|
||||||
|
localStorage.removeItem('token');
|
||||||
|
return Object.assign({}, state, defaultState)
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateFromToken(state, token) {
|
||||||
|
const decodedToken = jwtDecode(token);
|
||||||
|
localStorage.setItem('token', token);
|
||||||
|
return Object.assign({}, state, {
|
||||||
|
userLoading: false,
|
||||||
|
isAdmin: decodedToken.isAdmin,
|
||||||
|
username: decodedToken.username,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user