import { Navigate, Route, Routes } from 'react-router-dom' import { useAuthStore } from './stores/authStore' import { ProtectedRoute } from './components/routing/ProtectedRoute' import { MustChangePasswordGate } from './components/routing/MustChangePasswordGate' import { LoginPage } from './features/auth/pages/LoginPage' import { CreateUserPage } from './features/users/pages/CreateUserPage' import { UsersListPage } from './features/users/pages/UsersListPage' import { UserDetailPage } from './features/users/pages/UserDetailPage' import { UserEditPage } from './features/users/pages/UserEditPage' import { ChangeMyPasswordPage } from './features/profile/pages/ChangeMyPasswordPage' import { RolesPage } from './features/roles/pages/RolesPage' import { NewRolPage } from './features/roles/pages/NewRolPage' import { EditRolPage } from './features/roles/pages/EditRolPage' import { RolPermisosPage } from './features/permisos/pages/RolPermisosPage' import { HomePage } from './pages/HomePage' import { PublicLayout } from './layouts/PublicLayout' import { ProtectedLayout } from './layouts/ProtectedLayout' function PublicRoute({ children }: { children: React.ReactNode }) { const user = useAuthStore((s) => s.user) if (user) { return } return <>{children} } /** * Wraps a protected route with ProtectedLayout + MustChangePasswordGate. * The gate forces users with mustChangePassword=true to /perfil/contrasena. */ function ProtectedPage({ children, requiredPermissions, }: { children: React.ReactNode requiredPermissions?: string[] }) { return ( {children} ) } export function AppRoutes() { return ( {/* Public routes */} } /> {/* Change password — protected but NO MustChangePasswordGate (avoids redirect loop) */} } /> {/* Protected routes — all wrapped with MustChangePasswordGate */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ) }