Files
front_directorio/src/components/Nav/Menu.js
T

153 lines
4.6 KiB
JavaScript
Raw Normal View History

2024-07-15 18:40:28 -06:00
import React from "react";
import { PrivateRoutes, PublicRoutes } from "../../models/routes";
2024-07-05 21:42:24 -06:00
import { useEffect, useState } from "react";
2024-07-15 18:40:28 -06:00
import Guard from "../../guards/route.guard";
import "./Menu.css";
import JwtGuard from "../../guards/jwt.guard";
2024-07-05 19:34:58 -06:00
const Menu = () => {
2024-07-10 10:19:54 -06:00
JwtGuard();
2024-07-05 21:42:24 -06:00
const permissions = Guard();
2024-07-27 21:01:44 -06:00
const [id, setId] = useState(null);
2024-07-15 18:40:28 -06:00
const [usuario, setUsuario] = useState(null);
2024-07-05 21:42:24 -06:00
useEffect(() => {
2024-07-15 18:40:28 -06:00
const jwtPermissions = () => {
const jwtToken = localStorage.getItem("Token");
2024-07-05 21:42:24 -06:00
if (!jwtToken) {
2024-07-15 18:40:28 -06:00
console.error("No se encontró el token en localStorage");
2024-07-05 21:42:24 -06:00
return;
}
2024-07-15 18:40:28 -06:00
const parts = jwtToken.split(".");
2024-07-05 21:42:24 -06:00
const decodedPayload = JSON.parse(atob(parts[1]));
const user = decodedPayload.usuario;
2024-07-27 21:01:44 -06:00
const id = decodedPayload.id_usuario;
2024-07-05 21:42:24 -06:00
2024-07-27 21:01:44 -06:00
setId(id);
2024-07-15 18:40:28 -06:00
setUsuario(user);
2024-07-05 21:42:24 -06:00
};
jwtPermissions();
}, []);
2024-07-05 21:50:01 -06:00
const handleLogout = () => {
2024-07-15 18:40:28 -06:00
localStorage.removeItem("Token");
2024-07-05 21:50:01 -06:00
window.location.href = PublicRoutes.LOGIN;
};
2024-07-05 19:34:58 -06:00
return (
2024-07-15 23:09:20 -06:00
<nav className="navbar navbar-dark bg-dark">
2024-07-05 19:34:58 -06:00
<div className="container-fluid">
2024-07-05 21:42:24 -06:00
<div className="d-flex ">
2024-07-15 18:40:28 -06:00
<button
className="navbar-toggler me-3"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#offcanvasNavbar"
aria-controls="offcanvasNavbar"
aria-label="Toggle navigation"
>
2024-07-05 19:34:58 -06:00
<span className="navbar-toggler-icon"></span>
</button>
2024-07-05 21:42:24 -06:00
2024-07-05 19:34:58 -06:00
<div className="navbar-brand ms-auto">
2024-07-05 21:42:24 -06:00
<span>{usuario}</span> <span className="separator">- </span>
2024-07-15 18:40:28 -06:00
{permissions === 1 && <span>Administrador</span>}
{permissions === 2 && <span>Responsable</span>}
2024-07-05 19:34:58 -06:00
</div>
</div>
2024-07-15 18:40:28 -06:00
<div
className="offcanvas offcanvas-end"
tabIndex="-1"
id="offcanvasNavbar"
aria-labelledby="offcanvasNavbarLabel"
>
2024-07-05 19:34:58 -06:00
<div className="offcanvas-header">
2024-07-27 21:01:44 -06:00
<h5
className="offcanvas-title"
id="offcanvasNavbarLabel"
onClick={() => (window.location.href = PrivateRoutes.INTERFACE)}
>
2024-07-15 18:40:28 -06:00
Menú
</h5>
<button
type="button"
className="btn-close"
data-bs-dismiss="offcanvas"
aria-label="Close"
></button>
2024-07-05 19:34:58 -06:00
</div>
<div className="offcanvas-body">
<ul className="navbar-nav justify-content-end flex-grow-1 pe-3">
<li className="nav-item">
2024-07-27 21:01:44 -06:00
<h4
2024-07-15 18:40:28 -06:00
className="nav-link"
onClick={() =>
2024-07-27 21:01:44 -06:00
(window.location.href = `${PrivateRoutes.DATAUSUARIO}${id}`)
2024-07-15 18:40:28 -06:00
}
>
2024-07-27 21:01:44 -06:00
Perfil
</h4>
2024-07-05 19:34:58 -06:00
</li>
2024-07-27 21:01:44 -06:00
<div className="container">
<li className="nav-item">
2024-08-12 01:06:03 -06:00
<button
className="nav-link notButton"
2024-07-27 21:01:44 -06:00
onClick={() =>
(window.location.href = PrivateRoutes.CREARPROFESOR)
}
>
Crear Profesor
2024-08-12 01:06:03 -06:00
</button>
2024-07-27 21:01:44 -06:00
</li>
<li className="nav-item">
2024-08-12 01:06:03 -06:00
<button
className="nav-link notButton"
2024-07-27 21:01:44 -06:00
onClick={() => (window.location.href = PublicRoutes.FILTER)}
>
Editar Profesor
2024-08-12 01:06:03 -06:00
</button>
2024-07-27 21:01:44 -06:00
</li>
</div>
2024-07-05 21:42:24 -06:00
{permissions === 1 && (
2024-07-27 21:01:44 -06:00
<div className="container">
2024-07-15 18:40:28 -06:00
<li className="nav-item">
2024-08-12 01:06:03 -06:00
<button
className="nav-link notButton"
2024-07-15 18:40:28 -06:00
onClick={() =>
(window.location.href = PrivateRoutes.CREARUSUARIO)
}
>
Crear Usuario
2024-08-12 01:06:03 -06:00
</button>
2024-07-15 18:40:28 -06:00
</li>
<li className="nav-item">
2024-08-12 01:06:03 -06:00
<button
className="nav-link notButton"
2024-07-15 18:40:28 -06:00
onClick={() =>
(window.location.href = PrivateRoutes.FILTERUSUARIO)
}
>
Editar Usuario
2024-08-12 01:06:03 -06:00
</button>
2024-07-15 18:40:28 -06:00
</li>
2024-07-27 21:01:44 -06:00
</div>
2024-07-05 21:42:24 -06:00
)}
2024-07-05 21:50:01 -06:00
<li className="nav-item">
2024-07-27 21:01:44 -06:00
<button className=" btn red" onClick={handleLogout}>
2024-07-15 18:40:28 -06:00
Cerrar Sesión
</button>
2024-07-05 21:50:01 -06:00
</li>
2024-07-05 19:34:58 -06:00
</ul>
</div>
</div>
</div>
</nav>
);
2024-07-15 18:40:28 -06:00
};
2024-07-05 19:34:58 -06:00
export default Menu;