Changed layout to a be a function component.

This commit is contained in:
Harrison Deng 2022-04-05 18:47:06 -05:00
parent 4aced5ed2d
commit 5c393cb73d

View File

@ -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>
} );
} }