2024-03-24 18:02:40 -04:00
|
|
|
import "./styles/App.css";
|
2024-04-11 16:48:58 -04:00
|
|
|
import { Link, useNavigate } from 'react-router-dom';
|
2024-04-12 15:50:28 -04:00
|
|
|
import { Outlet } from "react-router-dom";
|
2024-04-11 16:48:58 -04:00
|
|
|
import { SessionContext, destroySessionCookie, getSessionCookie } from "./contexts/session";
|
|
|
|
|
import { useState, useEffect, useContext } from "react";
|
2024-04-22 01:39:25 -04:00
|
|
|
import { usePoll } from "./hooks/usePoll";
|
2024-03-12 16:21:30 -04:00
|
|
|
|
2024-03-24 18:02:40 -04:00
|
|
|
export default function App() {
|
2024-04-11 16:48:58 -04:00
|
|
|
const [session, setSession] = useState(getSessionCookie());
|
|
|
|
|
const navigate = useNavigate();
|
2024-04-22 01:39:25 -04:00
|
|
|
usePoll();
|
2024-04-11 16:48:58 -04:00
|
|
|
// Redirect to login if session is undefined
|
|
|
|
|
useEffect(
|
|
|
|
|
() => {
|
|
|
|
|
setSession(getSessionCookie());
|
2024-04-22 14:07:15 -04:00
|
|
|
if (session === null) {
|
2024-04-11 16:48:58 -04:00
|
|
|
navigate("/login");
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
[session, navigate]
|
|
|
|
|
);
|
2024-03-12 16:21:30 -04:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
2024-04-11 16:48:58 -04:00
|
|
|
<SessionContext.Provider value={session}>
|
|
|
|
|
<Navbar />
|
2024-04-21 15:42:12 -04:00
|
|
|
<div className="App">
|
2024-04-12 15:50:28 -04:00
|
|
|
<Outlet />
|
2024-04-11 16:48:58 -04:00
|
|
|
</div>
|
|
|
|
|
</SessionContext.Provider>
|
2024-03-12 16:21:30 -04:00
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}
|
2024-03-24 18:02:40 -04:00
|
|
|
function Navbar() {
|
2024-04-20 23:22:45 -04:00
|
|
|
const linkStyle = {
|
|
|
|
|
textDecoration: 'none',
|
|
|
|
|
color: 'black',
|
|
|
|
|
background: '#B1D4E0',
|
|
|
|
|
padding: '8px 16px',
|
|
|
|
|
borderRadius: '5px',
|
2024-04-21 00:21:25 -04:00
|
|
|
// margin: '0 5px'
|
2024-04-20 23:22:45 -04:00
|
|
|
};
|
2024-04-11 16:48:58 -04:00
|
|
|
const session = useContext(SessionContext);
|
2024-04-20 23:22:45 -04:00
|
|
|
const logout = () => {
|
|
|
|
|
destroySessionCookie();
|
|
|
|
|
window.location.reload();
|
|
|
|
|
}
|
2024-03-12 16:21:30 -04:00
|
|
|
|
2024-04-11 16:48:58 -04:00
|
|
|
const links = session ? (
|
|
|
|
|
<>
|
2024-04-21 00:21:25 -04:00
|
|
|
<div>
|
|
|
|
|
<img src="/PeerNotes.png" alt="PeerNotes Logo" style={{ height: '60px' }} />
|
2024-04-21 15:42:12 -04:00
|
|
|
<Link to="/register" style={linkStyle}>Upload</Link>
|
2024-04-21 00:21:25 -04:00
|
|
|
<Link to="/search" style={linkStyle}>Search</Link>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<a onClick={logout} style={linkStyle}>Logout</a>
|
|
|
|
|
</div>
|
2024-04-11 16:48:58 -04:00
|
|
|
</>
|
|
|
|
|
): (
|
|
|
|
|
<Link to="/login">Login</Link>
|
|
|
|
|
)
|
2024-03-24 18:02:40 -04:00
|
|
|
return (
|
|
|
|
|
<nav>
|
2024-04-11 16:48:58 -04:00
|
|
|
{links}
|
2024-03-24 18:02:40 -04:00
|
|
|
</nav>
|
|
|
|
|
);
|
|
|
|
|
}
|