1+ // App.js
12import React , { useState , useEffect } from "react" ;
23import {
34 BrowserRouter as Router ,
45 Route ,
56 Routes ,
67 Link ,
78 useLocation ,
8- Navigate
9+ Navigate ,
10+ useNavigate ,
911} from "react-router-dom" ;
10- import { ReactComponent as House } from './assets/icons/house-user_11269953 1.svg' ;
11- import { ReactComponent as Room } from './assets/icons/workshop_14672030 1.svg' ;
12- import { ReactComponent as User } from './assets/icons/User.svg' ;
13- import Home from './pages/Home/Home.js' ;
14- import LoginPage from './pages/Login/LoginPage.jsx' ;
15- import AdministratorHome from './pages/Administrator/AdministratorHome.jsx' ;
16- import './App.css' ;
12+ import { ReactComponent as House } from "./assets/icons/house-user_11269953 1.svg" ;
13+ import { ReactComponent as Room } from "./assets/icons/workshop_14672030 1.svg" ;
14+ import { ReactComponent as UserIcon } from "./assets/icons/User.svg" ;
15+ import Home from "./pages/Home/Home.js" ;
16+ import LoginPage from "./pages/Login/LoginPage.jsx" ;
17+ import AdministratorHome from "./pages/Administrator/AdministratorHome.jsx" ;
18+ import styled from "styled-components" ;
19+ import "./App.css" ;
1720
1821/**
1922 * Configuración de rutas según el rol del usuario.
@@ -22,11 +25,9 @@ const routesConfig = {
2225 admin : [
2326 { path : "/administrador" , name : "Panel de Control" , icon : < House className = "svg" /> } ,
2427 { path : "/administrador/salones" , name : "Gestión de Salones" , icon : < Room className = "svg" /> } ,
25- { path : "/administrador/usuarios" , name : "Gestión de Usuarios" , icon : < User className = "svg" /> } ,
26- ] ,
27- profe : [
28- { path : "/home" , name : "Gestión de Reservas" , icon : < House className = "svg" /> } ,
28+ { path : "/administrador/usuarios" , name : "Gestión de Usuarios" , icon : < UserIcon className = "svg" /> } ,
2929 ] ,
30+ profe : [ { path : "/home" , name : "Gestión de Reservas" , icon : < House className = "svg" /> } ] ,
3031} ;
3132
3233const Menu = ( { user } ) => {
@@ -45,11 +46,12 @@ const Menu = ({ user }) => {
4546 ) ;
4647} ;
4748
48- /**
49- * Componente de encabezado que muestra el título de la página y el saludo al usuario.
50- * /
51- const Header = ( { user } ) => {
49+ //
50+ // HEADER: muestra título, saludo, avatar y botón de logout
51+ / /
52+ const Header = ( { user, onLogout } ) => {
5253 const location = useLocation ( ) ;
54+ const navigate = useNavigate ( ) ;
5355 let title = "Elysium" ;
5456
5557 if ( user ) {
@@ -77,87 +79,96 @@ const Header = ({ user }) => {
7779 </ span >
7880 </ div >
7981 < div className = "user-info" >
80-
82+ < UserAvatar
83+ src = "https://img.freepik.com/vector-gratis/establecimiento-circulos-usuarios_78370-4704.jpg?ga=GA1.1.204243624.1732496744& semt = ais_hybrid "
84+ alt = "Avatar de usuario"
85+ />
86+ < LogoutIcon
87+ src = "https://cdn.builder.io/api/v1/image/assets/TEMP/1954f6c7c642021490080ffd4c81bc9798bf0beb?placeholderIfAbsent=true"
88+ alt = "Logout"
89+ onClick = { ( ) => {
90+ onLogout ( ) ;
91+ navigate ( "/" ) ; // Regresa al LoginPage
92+ } }
93+ />
8194 </ div >
8295 </ div >
8396 ) ;
8497} ;
8598
86- /**
87- * Componente principal de la aplicación.
88- */
99+ const UserAvatar = styled . img `
100+ width: 40px;
101+ height: 40px;
102+ object-fit: contain;
103+ border-radius: 50%;
104+ ` ;
105+
106+ const LogoutIcon = styled . img `
107+ width: 32px;
108+ height: 32px;
109+ cursor: pointer;
110+ ` ;
111+
112+ //
113+ // Componente principal de la aplicación
114+ //
89115function App ( ) {
116+ // El usuario se establecerá a través del LoginPage, por lo que no simulamos nada aquí.
90117 const [ user , setUser ] = useState ( null ) ;
91118 const [ loading , setLoading ] = useState ( true ) ;
92119
120+ // Simulación de carga inicial; en producción, no se simula usuario.
93121 useEffect ( ( ) => {
94- const simulacionData = {
95- "idInstitucional" : 12 ,
96- "nombre" : "Santi" ,
97- "apellido" : "Castroso" ,
98- "correoInstitucional" :
"[email protected] " , 99- "activo" : true ,
100- "isAdmin" : true ,
101- "password" : null
102- }
103- setUser ( simulacionData ) ;
104122 setLoading ( false ) ;
105123 } , [ ] ) ;
106124
107- useEffect ( ( ) => {
108- if ( user != null ) {
109- const colorVariable = user . isAdmin
110- ? "var(--variable-collection-user-admin)"
111- : "var(--variable-collection-user-estandar)" ;
112- document . documentElement . style . setProperty (
113- "--variable-collection-current-color" ,
114- colorVariable
115- ) ;
116- }
117- } , [ user ] ) ;
118-
119125 if ( loading ) return < div > Cargando...</ div > ;
120126
121127 return (
122128 < Router >
123129 < Routes >
130+ { /* Si no hay usuario autenticado, se muestra LoginPage */ }
124131 { ! user ? (
125132 < >
126133 < Route path = "/" element = { < LoginPage onLogin = { setUser } /> } />
127- < Route path = "*" element = { < Navigate to = "/" /> } />
134+ < Route path = "*" element = { < Navigate to = "/" replace /> } />
128135 </ >
129- ) : (
130- < Route path = "/*" element = {
131- < div className = "content" >
132- < div className = "navBar" >
133- < Menu user = { user } />
134- </ div >
135- < div className = "panel" >
136- < Header user = { user } />
137- < div className = "container" >
138- < Routes >
139- { user . isAdmin ? (
140- < >
141- < Route path = "/administrador" element = { < AdministratorHome /> } />
142- < Route path = "/administrador/salones" element = { < div > Gestión de Salones</ div > } />
143- < Route path = "/administrador/usuarios" element = { < div > Gestión de Usuarios</ div > } />
144- < Route path = "*" element = { < Navigate to = "/administrador" /> } />
145- </ >
146- ) : (
147- < >
148- < Route path = "/home" element = { < Home /> } />
149- < Route path = "*" element = { < Navigate to = "/home" /> } />
150- </ >
151- ) }
152- </ Routes >
136+ ) : (
137+ // Una vez autenticado, se muestra la aplicación completa (Header, Menu, contenido)
138+ < Route
139+ path = "/*"
140+ element = {
141+ < div className = "content" >
142+ < div className = "navBar" >
143+ < Menu user = { user } />
144+ </ div >
145+ < div className = "panel" >
146+ < Header user = { user } onLogout = { ( ) => setUser ( null ) } />
147+ < div className = "container" >
148+ < Routes >
149+ { user . isAdmin ? (
150+ < >
151+ < Route path = "/administrador" element = { < AdministratorHome /> } />
152+ < Route path = "/administrador/salones" element = { < div > Gestión de Salones</ div > } />
153+ < Route path = "/administrador/usuarios" element = { < div > Gestión de Usuarios</ div > } />
154+ < Route path = "*" element = { < Navigate to = "/administrador" /> } />
155+ </ >
156+ ) : (
157+ < >
158+ < Route path = "/home" element = { < Home /> } />
159+ < Route path = "*" element = { < Navigate to = "/home" /> } />
160+ </ >
161+ ) }
162+ </ Routes >
163+ </ div >
153164 </ div >
154165 </ div >
155- </ div >
156- } />
166+ }
167+ />
157168 ) }
158169 </ Routes >
159170 </ Router >
160171 ) ;
161172}
162173
163- export default App ;
174+ export default App ;
0 commit comments