Changed layout to a be a function component.
This commit is contained in:
parent
4aced5ed2d
commit
5c393cb73d
@ -1,7 +1,7 @@
|
|||||||
import "./styles/Layout.css";
|
import "./styles/Layout.css";
|
||||||
import "./styles/extra.css";
|
import "./styles/extra.css";
|
||||||
import React from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import { NavLink, Route, Routes } from "react-router-dom";
|
import { NavLink, Route, Routes, useNavigate } from "react-router-dom";
|
||||||
import Welcome from "./pages/Welcome";
|
import Welcome from "./pages/Welcome";
|
||||||
import Navbar from "react-bootstrap/Navbar";
|
import Navbar from "react-bootstrap/Navbar";
|
||||||
import { Container, Nav, NavbarBrand } from "react-bootstrap";
|
import { Container, Nav, NavbarBrand } from "react-bootstrap";
|
||||||
@ -9,11 +9,56 @@ import NavbarToggle from "react-bootstrap/esm/NavbarToggle";
|
|||||||
import NavbarCollapse from "react-bootstrap/esm/NavbarCollapse";
|
import NavbarCollapse from "react-bootstrap/esm/NavbarCollapse";
|
||||||
import Dashboard from "./pages/Dashboard";
|
import Dashboard from "./pages/Dashboard";
|
||||||
import Login from "./pages/Login";
|
import Login from "./pages/Login";
|
||||||
|
import { apiClient } from "./utils/httpClients";
|
||||||
|
|
||||||
export default class Layout extends React.Component {
|
|
||||||
render() {
|
export default function layout() {
|
||||||
return (
|
const navigate = useNavigate();
|
||||||
<div id="app">
|
const navigationContext = React.createContext(navigate);
|
||||||
|
const [state, setState] = useState({
|
||||||
|
user: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(async () => {
|
||||||
|
await updateAuthStatus();
|
||||||
|
});
|
||||||
|
|
||||||
|
async function updateAuthStatus() {
|
||||||
|
const getUserResponse = await apiClient.get("/user");
|
||||||
|
if (getUserResponse !== 200) {
|
||||||
|
setState({ user: null });
|
||||||
|
} else {
|
||||||
|
setState({ user: getUserResponse.data });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let indentityDisplay = (
|
||||||
|
<Nav>
|
||||||
|
<li className="nav-item">
|
||||||
|
<NavLink className="nav-link" to="/login" >Login</NavLink>
|
||||||
|
</li>
|
||||||
|
<li className="nav-item">
|
||||||
|
<NavLink className="nav-link" to="/signup" >Sign up!</NavLink>
|
||||||
|
</li>
|
||||||
|
</Nav>
|
||||||
|
);
|
||||||
|
|
||||||
|
if (state.user) {
|
||||||
|
indentityDisplay = (
|
||||||
|
<Nav>
|
||||||
|
<li className="nav-item">
|
||||||
|
<NavLink className="nav-link" to="/" >Hi, {this.state.user.firstName}</NavLink>
|
||||||
|
</li>
|
||||||
|
<li className="nav-item">
|
||||||
|
<NavLink className="nav-link" to="/logout" >Logout</NavLink>
|
||||||
|
</li>
|
||||||
|
</Nav>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div id="app">
|
||||||
|
<navigationContext.Provider value={navigate}>
|
||||||
<header>
|
<header>
|
||||||
<Navbar bg="light" expand="md">
|
<Navbar bg="light" expand="md">
|
||||||
<Container>
|
<Container>
|
||||||
@ -25,6 +70,7 @@ export default class Layout extends React.Component {
|
|||||||
<NavLink className="nav-link" to="/" >Home</NavLink>
|
<NavLink className="nav-link" to="/" >Home</NavLink>
|
||||||
</li>
|
</li>
|
||||||
</Nav>
|
</Nav>
|
||||||
|
{indentityDisplay}
|
||||||
</NavbarCollapse>
|
</NavbarCollapse>
|
||||||
</Container>
|
</Container>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
@ -39,7 +85,7 @@ export default class Layout extends React.Component {
|
|||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</navigationContext.Provider>
|
||||||
);
|
</div>
|
||||||
}
|
);
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user