source: my-react-app/src/components/Header.js

main
Last change on this file was f5b256e, checked in by Aleksandar Panovski <apano77@…>, 3 weeks ago

Big change done works with handle_reservation_update() trigger

  • Property mode set to 100644
File size: 3.1 KB
Line 
1import React, {useEffect, useState} from 'react';
2import { Link, useNavigate } from 'react-router-dom';
3import {jwtDecode} from "jwt-decode";
4import axios from "axios";
5
6const Header = () => {
7 const navigate = useNavigate();
8 const [user, setUser] = useState({});
9 const isLoggedIn = localStorage.getItem('token');
10
11 const handleLogout = () => {
12 localStorage.removeItem("token");
13 localStorage.removeItem("user");
14 setUser(null);
15 navigate("/login");
16
17 };
18
19 useEffect(() => {
20 const fetchUser = async () => {
21 try {
22 const token = localStorage.getItem("token");
23 if (!token) return;
24
25 const storedUser = localStorage.getItem("user");
26 if (storedUser) {
27 setUser(JSON.parse(storedUser));
28 return;
29 }
30
31 const decodedToken = jwtDecode(token);
32 const userId = decodedToken.iss;
33
34 const { data } = await axios.get(`http://localhost:8081/api/user/${userId}`);
35 setUser(data);
36 localStorage.setItem("user", JSON.stringify(data));
37 } catch (error) {
38 console.error("Error fetching user:", error);
39 }
40 };
41 fetchUser();
42 }, [isLoggedIn]);
43
44 return (
45 <header className="header navbar navbar-expand-lg navbar-light bg-light">
46 <div className="container">
47 <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
48 <span className="navbar-toggler-icon"></span>
49 </button>
50 <div className="collapse navbar-collapse" id="navbarNav">
51 <ul className="navbar-nav ml-auto">
52 <li className="nav-item">
53 <Link className="nav-link" to="/">Home</Link>
54 </li>
55 <li className="nav-item">
56 <Link className="nav-link" to="/restaurants">Restaurants</Link>
57 </li>
58 <li className="nav-item">
59 <Link className="nav-link" to="/reservations">Reservations</Link>
60 </li>
61 <li className="nav-item">
62 <Link className="nav-link" to="/reservations-past">Reservation history</Link>
63 </li>
64 <form className="form-inline mt-2 mt-md-0 ml-3">
65 {isLoggedIn ? (
66 <button className="btn btn-outline-danger ml-3" onClick={handleLogout}>
67 Logout {user?.firstName}
68 </button>
69 ) : (
70 <Link className="btn btn-outline-info ml-3" to="/login">Login</Link>
71 )}
72 </form>
73 </ul>
74 </div>
75 </div>
76 </header>
77 );
78}
79
80export default Header;
Note: See TracBrowser for help on using the repository browser.