DataScope26/WEB
0
1import { useEffect } from 'react';2import Home from './pages/Home.jsx';3import Perfil from './pages/Perfil.jsx';4import MyCompanies from './pages/MyCompanies.jsx';5import CompanySetup from './pages/CompanySetup.jsx';6import Header from './components/Header.jsx';7import Footer from './components/Footer.jsx';8import Overview from './pages/Overview.jsx';9import Dashboard from './components/Dashboard.jsx';10import Pricing from './pages/Pricing.jsx';11import NotFound from './pages/NotFound.jsx';12import ExtensionAlert from './components/ExtensionAlert.jsx';13import AcceptInvite from './pages/AcceptInvite.jsx';14import { useExtensionDetection } from './hooks/useExtensionDetection.js';15import {16 BrowserRouter,17 Routes,18 Route,19 Navigate,20 useLocation21} from 'react-router-dom';22import { useAuth } from './context/AuthContext.jsx';23import Invitaciones from './pages/Invitaciones.jsx';24import InvitacionesRecibidas from "./pages/InvitacionesRecibidas.jsx"25import CreateCompany from './pages/CreateCompany.jsx';26import CompanySettings from './pages/CompanySettings.jsx';27import WaitlistAdmin from './pages/WaitlistAdmin.jsx';28 29function ScrollToTop() {30 const { pathname } = useLocation();31 32 useEffect(() => {33 window.scrollTo({34 top: 0,35 left: 0,36 behavior: 'auto'37 });38 }, [pathname]);39 40 return null;41}42 43export default function App() {44 const { user } = useAuth();45 const { extensionInstalled, isChecking } = useExtensionDetection();46 47 const ProtectedRoute = ({ children }) => {48 if (!user) {49 return <Navigate to="/" replace />;50 }51 52 return children;53 };54 55 const DeveloperRoute = ({ children }) => {56 if (!user) {57 return <Navigate to="/" replace />;58 }59 60 if (Number(user.rolefk) !== 4) {61 return <Navigate to="/overview" replace />;62 }63 64 return children;65 };66 67 const NonEmployeeRoute = ({ children }) => {68 if (!user) {69 return <Navigate to="/" replace />;70 }71 72 if (Number(user.rolefk) === 3) {73 return <Navigate to="/overview" replace />;74 }75 76 return children;77 };78 79 return (80 <BrowserRouter>81 <ScrollToTop />82 83 {user && (84 <ExtensionAlert85 extensionInstalled={extensionInstalled}86 isChecking={isChecking}87 />88 )}89 90 <Header />91 92 <Routes>93 {/* Rutas públicas */}94 <Route path="/" element={<Home />} />95 <Route path="/pricing" element={<Navigate to="/" replace />} />96 <Route path="/accept-invite" element={<AcceptInvite />} />97 <Route path="/invitaciones" element={<ProtectedRoute><Invitaciones /></ProtectedRoute>} />98 <Route path="/company-setup/:companyId" element={<ProtectedRoute><CompanySetup /></ProtectedRoute>} />99 100 {/* Ruta protegida para crear empresa */}101 <Route102 path="/create-company"103 element={104 <ProtectedRoute>105 <CreateCompany />106 </ProtectedRoute>107 }108 />109 110 {/* Rutas protegidas con sidebar */}111 <Route112 path="/overview"113 element={114 <ProtectedRoute>115 <Overview />116 </ProtectedRoute>117 }118 >119 <Route path="perfil" element={<Perfil />} />120 121 {/* /overview → Dashboard */}122 <Route index element={<Dashboard />} />123 124 {/* /overview/mycompanies → MyCompanies */}125 <Route path="mycompanies" element={<NonEmployeeRoute><MyCompanies /></NonEmployeeRoute>} />126 127 {/* /overview/companysettings → CompanySettings */}128 <Route129 path="companysettings"130 element={<NonEmployeeRoute><CompanySettings /></NonEmployeeRoute>}131 />132 <Route path="invitaciones" element={<NonEmployeeRoute><Invitaciones /></NonEmployeeRoute>} />133 <Route path="mis-invitaciones" element={<InvitacionesRecibidas />} />134 <Route135 path="waitlist"136 element={137 <DeveloperRoute>138 <WaitlistAdmin />139 </DeveloperRoute>140 }141 />142 143 </Route>144 145 {/* Rutas protegidas solo para desarrolladores */}146 <Route147 path="/waitlist-admin"148 element={149 <DeveloperRoute>150 <WaitlistAdmin />151 </DeveloperRoute>152 }153 />154 155 {/* Ruta para páginas inexistentes */}156 <Route path="*" element={<NotFound />} />157 </Routes>158 159 <Footer />160 </BrowserRouter>161 );162}