CoolFace
Apppublic

DataScope26/WEB

sourceHugging Faceupdated 7d agoView on Hugging Face
0likes
app.jsx162 linesDownload Raw Back to src
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}