mirror of
https://github.com/gabehf/BudgetBuddy.git
synced 2026-03-17 03:06:40 -07:00
navbar finished
This commit is contained in:
parent
edf43f30da
commit
8cbb8ee963
5 changed files with 61 additions and 41 deletions
|
|
@ -11,12 +11,15 @@
|
||||||
.nav-brand {
|
.nav-brand {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
text-decoration: none;
|
|
||||||
color: inherit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-brand:hover {
|
.nav-header {
|
||||||
color: inherit;
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-header:hover {
|
||||||
|
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…
Add table
Add a link
Reference in a new issue