-
Taneli Riihimäki authoredTaneli Riihimäki authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Header.js 3.22 KiB
import React from "react";
import LoginForm from "./LoginForm";
import RegisterForm from "./RegisterForm";
import TaskListButton from "./TaskListButton";
import GameSidebar from "./GameSidebar";
class Header extends React.Component {
constructor(props) {
super(props);
}
state = {
form: "", // Popup form (login, register etc.)
username: null,
token: null,
sidebar: false
};
// toggles the login/register view
toggleView = view => {
this.setState({
form: view
});
};
handleState = data => {
sessionStorage.setItem("name", data.name);
sessionStorage.setItem("token", data.token);
this.setState({ username: data.name, token: data.token });
};
handleLogout = () => {
this.setState({ username: null, token: null });
sessionStorage.removeItem("token");
};
// verifies the token (if it exists) on element mount with backend server
componentDidMount() {
let token = sessionStorage.getItem("token");
if (token) {
fetch(`${process.env.REACT_APP_API_URL}/user/verify`, {
headers: {
Authorization: "Bearer " + token
}
})
.then(res => res.json())
.then(
result => {
// if token is still valid, login user
if (result === true) {
this.setState({
username: sessionStorage.getItem("name"),
token: token
});
// logout user if token has expired / is invalid
} else {
this.handleLogout();
}
},
error => {
console.log(error);
}
);
}
}
render() {
return (
<div>
<div className="header">
{!this.state.username && (
<button
id="registerButton"
onClick={() => this.toggleView("register")}
>
register
</button>
)}
{!this.state.username && (
<button id="loginButton" onClick={() => this.toggleView("login")}>
login
</button>
)}
{this.state.username && (
<button id="logoutButton" onClick={this.handleLogout}>
logout
</button>
)}
{this.state.username && <button>{this.state.username}</button>}
<button id="changeLayerButton" onClick={this.props.handleLayerChange}>
change layer
</button>
{this.state.username && <TaskListButton />}
<button
id="sidebarButton"
onClick={() => this.setState({ sidebar: !this.state.sidebar })}
>
Tools
</button>
{this.state.sidebar && (
<GameSidebar loggedIn={this.state.username ? true : false} />
)}
</div>
{this.state.form === "register" && (
<RegisterForm
view=""
handleState={this.handleState}
toggleView={this.toggleView}
/>
)}
{this.state.form === "login" && (
<LoginForm
view=""
handleState={this.handleState}
toggleView={this.toggleView}
/>
)}
</div>
);
}
}
export default Header;