ProtectedRoute - Verificando usuario: {hasUser: true, userId: 'cmb4jyeep0005dzky72o9eig2', userType: 'normal_user'}hasUser: trueuserId: "cmb4jyeep0005dzky72o9eig2"userType: "normal_user"[[Prototype]]: Object
ProtectedRoute.tsx:25 ✅ Usuario autenticado correctamente, mostrando contenido de usuario
ProtectedRoute.tsx:14 🔐 ProtectedRoute - Verificando usuario: {hasUser: true, userId: 'cmb4jyeep0005dzky72o9eig2', userType: 'normal_user'}hasUser: trueuserId: "cmb4jyeep0005dzky72o9eig2"userType: "normal_user"[[Prototype]]: Object
ProtectedRoute.tsx:25 ✅ Usuario autenticado correctamente, mostrando contenido de usuario
pero lo sigue mandando para el panel admin
El problema no está en ProtectedRoute ya que está funcionando correctamente. El issue debe estar en que el componente UserAppointments no se está cargando o hay algún redirect oculto. Vamos a agregar más logs para identificar exactamente dónde está el problema:
Ahora agregué muchos más logs y elementos visuales para identificar exactamente qué está pasando:
Cuando hagas clic en "Mis Citas", revisa la consola y dime:
Si no ves estos logs, significa que el componente UserAppointments ni siquiera se está cargando, lo que indicaría un problema en el routing o algún redirect oculto.
This generation may require the following integrations:
api.ts:10 🌐 API Request: POST http://localhost:3001/api/auth/login
api.ts:40 🔐 Usando token de usuario
api.ts:56 ✅ API Response: {message: 'Inicio de sesión exitoso', user: {…}, token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNtY…k4Nn0.ctcTvgaU1pMPJEeZQINaseTp_3rDpEikhg99vDH9gnw'}
ProtectedRoute.tsx:14 🔐 ProtectedRoute - Verificando usuario: {hasUser: true, userId: 'cmb4jyeep0005dzky72o9eig2', userType: 'normal_user'}
ProtectedRoute.tsx:25 ✅ Usuario autenticado correctamente, mostrando contenido de usuario
ProtectedRoute.tsx:14 🔐 ProtectedRoute - Verificando usuario: {hasUser: true, userId: 'cmb4jyeep0005dzky72o9eig2', userType: 'normal_user'}
ProtectedRoute.tsx:25 ✅ Usuario autenticado correctamente, mostrando contenido de usuario
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
useAppointments.tsx:65 🔄 Refrescando datos...
api.ts:10 🌐 API Request: GET http://localhost:3001/api/time-slots
api.ts:40 🔐 Usando token de usuario
api.ts:10 🌐 API Request: GET http://localhost:3001/api/appointments
api.ts:40 🔐 Usando token de usuario
useAppointments.tsx:65 🔄 Refrescando datos...
api.ts:10 🌐 API Request: GET http://localhost:3001/api/time-slots
api.ts:40 🔐 Usando token de usuario
api.ts:10 🌐 API Request: GET http://localhost:3001/api/appointments
api.ts:40 🔐 Usando token de usuario
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
VM28 bootstrap-autofill-overlay.js:16 Uncaught (in promise) NotFoundError: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.
at Ha.Node.insertBefore (bootstrap-autofill-overlay.js:16:17235)
at AutofillInlineMenuContentService.<anonymous> (bootstrap-autofill-overlay.js:1414:30)
at Generator.next (<anonymous>)
at fulfilled (bootstrap-autofill-overlay.js:1285:58)
Ha.Node.insertBefore @ VM28 bootstrap-autofill-overlay.js:16
(anonymous) @ bootstrap-autofill-overlay.js:1414
fulfilled @ bootstrap-autofill-overlay.js:1285
Promise.then
step @ bootstrap-autofill-overlay.js:1287
(anonymous) @ bootstrap-autofill-overlay.js:1288
autofill_inline_menu_content_service_awaiter @ bootstrap-autofill-overlay.js:1284
AutofillInlineMenuContentService.processContainerElementMutation @ bootstrap-autofill-overlay.js:1386
requestIdleCallbackPolyfill.timeout @ bootstrap-autofill-overlay.js:1378
(anonymous) @ bootstrap-autofill-overlay.js:122
requestIdleCallback
requestIdleCallbackPolyfill @ bootstrap-autofill-overlay.js:122
AutofillInlineMenuContentService.handleContainerElementMutationObserverUpdate @ bootstrap-autofill-overlay.js:1378
childList
appendChildToContainer @ react-dom.development.js:11069
insertOrAppendPlacementNodeIntoContainer @ react-dom.development.js:23914
insertOrAppendPlacementNodeIntoContainer @ react-dom.development.js:23920
insertOrAppendPlacementNodeIntoContainer @ react-dom.development.js:23920
insertOrAppendPlacementNodeIntoContainer @ react-dom.development.js:23920
insertOrAppendPlacementNodeIntoContainer @ react-dom.development.js:23920
insertOrAppendPlacementNodeIntoContainer @ react-dom.development.js:23920
commitPlacement @ react-dom.development.js:23894
commitReconciliationEffects @ react-dom.development.js:24630
commitMutationEffectsOnFiber @ react-dom.development.js:24333
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24495
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24332
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24615
recursivelyTraverseMutationEffects @ react-dom.development.js:24312
commitMutationEffectsOnFiber @ react-dom.development.js:24471
commitMutationEffects @ react-dom.development.js:24282
commitRootImpl @ react-dom.development.js:26849
commitRoot @ react-dom.development.js:26721
performSyncWorkOnRoot @ react-dom.development.js:26156
flushSyncCallbacks @ react-dom.development.js:12042
commitRootImpl @ react-dom.development.js:26998
commitRoot @ react-dom.development.js:26721
finishConcurrentRender @ react-dom.development.js:26020
performConcurrentWorkOnRoot @ react-dom.development.js:25848
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
[NEW] Explain Console errors by using Copilot in Edge: click
to explain an error.
Learn more
Don't show again
api.ts:56 ✅ API Response: {timeSlots: Array(9)}
api.ts:56 ✅ API Response: {appointments: Array(1)}
useAppointments.tsx:96 ✅ Datos cargados: {slots: 9, appointments: 1}
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
api.ts:56 ✅ API Response: {timeSlots: Array(9)}
api.ts:56 ✅ API Response: {appointments: Array(1)}
useAppointments.tsx:96 ✅ Datos cargados: {slots: 9, appointments: 1}
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
Dashboard.tsx:68 📅 Horarios para fecha seleccionada: {selectedDate: null, available: 0, occupied: 0, totalSlots: 9, allSlots: Array(9)}
ProtectedRoute.tsx:14 🔐 ProtectedRoute - Verificando usuario: {hasUser: true, userId: 'cmb4jyeep0005dzky72o9eig2', userType: 'normal_user'}
ProtectedRoute.tsx:25 ✅ Usuario autenticado correctamente, mostrando contenido de usuario
ProtectedRoute.tsx:14 🔐 ProtectedRoute - Verificando usuario: {hasUser: true, userId: 'cmb4jyeep0005dzky72o9eig2', userType: 'normal_user'}
ProtectedRoute.tsx:25 ✅ Usuario autenticado correctamente, mostrando contenido de usuario
lo sigue mandando para el panel admin
Veo que los logs muestran que ProtectedRoute funciona correctamente, pero NO veo ningún log del componente UserAppointments (como "🚀 INICIO - UserAppointments component renderizado"). Esto significa que el componente UserAppointments nunca se está cargando.
El problema debe estar en que hay dos componentes con el mismo nombre o una importación incorrecta. Vamos a verificar esto:
Ahora hice cambios MUY visibles:
UserAppointmentsComponent en lugar de UserAppointmentsUserAppointmentsComponent en App.tsxAhora cuando hagas clic en "Mis Citas":
Y en la consola deberías ver: "🚀🚀🚀 COMPONENTE USER APPOINTMENTS CARGADO - NO ES ADMIN 🚀🚀🚀"
This generation may require the following integrations:
You can send messages while the preview loads