navbar finished

main
jveebs 3 years ago
parent edf43f30da
commit 8cbb8ee963

@ -11,12 +11,15 @@
.nav-brand { .nav-brand {
display: flex; display: flex;
align-items: center; align-items: center;
}
.nav-header {
text-decoration: none; text-decoration: none;
color: inherit; color: black;
} }
.nav-brand:hover { .nav-header:hover {
color: inherit; color: black;
} }
.nav-login-control { .nav-login-control {

@ -4,31 +4,29 @@ import { Toolbar, Typography, Button, IconButton, Link } from "@material-ui/core
import AccountCircle from '@mui/icons-material/AccountCircle'; import AccountCircle from '@mui/icons-material/AccountCircle';
import logo from "../assets/BudgetBuddyLogo.png" import logo from "../assets/BudgetBuddyLogo.png"
import "./NavBar.css" import "./NavBar.css"
import {checkLogin, getFirstName} from "../utils/utils"; import {checkLogin, getName, handleLogout} from "../utils/utils";
import NavDropdown from 'react-bootstrap/NavDropdown'; import NavDropdown from 'react-bootstrap/NavDropdown';
import { useEffect, useState } from "react";
import { async } from "q";
export default function NavBar() { export default function NavBar() {
const handleLogin = () => { const [name, setName] = useState(null);
window.location.href='/login';
}
const handleSignup = () => {
window.location.href='/signup';
}
const handleLogout= () => {
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
window.location.href='/welcome';
}
useEffect(() => {
async function fetchName() {
const name = await getName();
setName(name);
}
fetchName();
}, []);
return ( return (
<Toolbar position="sticky" className="bar"> <Toolbar position="sticky" className="bar">
<Link href="/" className="nav-brand"> <Link href="/" className="nav-brand" underline="none">
<img src={logo} className="logo w-100"/> <img src={logo} className="logo w-100"/>
<Typography <Typography
className="nav-header" variant="h5"
variant="h5" > className="nav-header">
BudgetBuddy BudgetBuddy
</Typography> </Typography>
</Link> </Link>
@ -36,17 +34,17 @@ export default function NavBar() {
{checkLogin() {checkLogin()
? // Logged In ? // Logged In
<div> <div>
<NavDropdown title={`Logged in as ${getFirstName()}`}> <NavDropdown title={`Logged in as ${name}`}>
<NavDropdown.Item>Profile</NavDropdown.Item> <NavDropdown.Item href="/settings">Settings</NavDropdown.Item>
<NavDropdown.Item>My account</NavDropdown.Item> <NavDropdown.Item href="/about-us">About Us</NavDropdown.Item>
<NavDropdown.Item onClick={handleLogout}>Sign Out</NavDropdown.Item> <NavDropdown.Item onClick={handleLogout}>Sign Out</NavDropdown.Item>
</NavDropdown> </NavDropdown>
</div> </div>
: // Logged Out : // Logged Out
<span className="mx-0" style={{display: "flex"}}> <span className="mx-0" style={{display: "flex"}}>
<Button className="mx-0" onClick={handleLogin}>Login</Button> <Button className="mx-0" href="/login">Login</Button>
<p style={{marginTop: "9px"}}>or</p> <p style={{marginTop: "9px"}}>or</p>
<Button className="mx-0" onClick={handleSignup}>Signup</Button> <Button className="mx-0" href="/signup">Signup</Button>
</span> </span>
} }
</div> </div>

@ -9,9 +9,21 @@ import LogoutIcon from '@mui/icons-material/Logout';
import { Avatar, Typography } from '@material-ui/core'; import { Avatar, Typography } from '@material-ui/core';
import { Link, Divider } from '@material-ui/core'; import { Link, Divider } from '@material-ui/core';
import './SideNav.css' import './SideNav.css'
import { useState, useEffect } from 'react'
import {getName, handleLogout} from "../utils/utils";
export default function SideNav() { export default function SideNav() {
const [firstName, setFirstName] = useState(null);
useEffect(() => {
async function fetchFirstName() {
const name = await getName();
setFirstName(name.split(" ")[0]);
}
fetchFirstName();
}, []);
return( return(
<Sidebar className="sidebar" backgroundColor='transparent' style={{border:"none"}}> <Sidebar className="sidebar" backgroundColor='transparent' style={{border:"none"}}>
<div className='sidebar-header'> <div className='sidebar-header'>
@ -19,7 +31,7 @@ export default function SideNav() {
<Avatar /> <Avatar />
</div> </div>
<div className='sidebar-text'> <div className='sidebar-text'>
<Typography className='sidebar-welcome' variant='h6'>Welcome, Jacob</Typography> <Typography className='sidebar-welcome' variant='h6'>Welcome, {firstName}</Typography>
<Typography variant='subtitle2'> Your Budget Overiew</Typography> <Typography variant='subtitle2'> Your Budget Overiew</Typography>
</div> </div>
</div> </div>
@ -61,6 +73,7 @@ export default function SideNav() {
</MenuItem> </MenuItem>
*/} */}
<MenuItem <MenuItem
onClick={handleLogout}
icon={<LogoutIcon/>}> icon={<LogoutIcon/>}>
Sign Out Sign Out
</MenuItem> </MenuItem>

@ -12,7 +12,7 @@ import AddIncome from '../components/AddIncome'
export default function Dashboard() { export default function Dashboard() {
return ( return (
<AppProvider> <AppProvider>
<div className='container'> <div className='container-fluid'>
<h1 className='mt-3'>My Budget Planner</h1> <h1 className='mt-3'>My Budget Planner</h1>
<div className='row mt-3'> <div className='row mt-3'>
<div className='col-sm'> <div className='col-sm'>

@ -16,24 +16,30 @@ function getSessionKey() {
for (let i = 0; i < cookies.length; i++) { for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim(); // Remove any leading or trailing whitespace const cookie = cookies[i].trim(); // Remove any leading or trailing whitespace
if (cookie.startsWith('session=')) { if (cookie.startsWith('session=')) {
console.log(cookie.substring('session='.length, cookie.length));
return cookie.substring('session='.length, cookie.length); // Extract the value of the cookie return cookie.substring('session='.length, cookie.length); // Extract the value of the cookie
} }
} }
return null; return null;
} }
export function getFirstName() { export async function getName() {
fetch('http://127.0.0.1:3030/userinfo', { try {
method: 'GET', const response = await fetch('http://127.0.0.1:3030/userinfo', {
headers: { method: 'GET',
'x-session-key' : "b36efa01-7824-4f61-a274-63131b58d8fe", headers: {
} 'x-session-key': getSessionKey(),
}) },
.then(response => response.json()) });
.then(data => { const data = await response.json();
const name = data.name; const firstName = data.name;
return name; // Return firstname console.log(firstName); // Logs the first name correctly
}) return firstName;
.catch(error => console.error(error)); } catch (error) {
console.error(error);
}
}
export function handleLogout() {
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
window.location.href='/welcome';
} }
Loading…
Cancel
Save