Fase 1 - UI: dark mode, skeletons, toasts Fase 2 - Filtros: avanzados Mi día, búsqueda global Ctrl+K Fase 3 - Datos: export Excel, notas apartados, auditoría Fase 4 - Dashboard: gráficas vendedor + métricas uso Fase 5 - Responsive: tablets optimizadas Fase 6 - PWA: IndexedDB offline, push notifications Backend: 3 tablas nuevas, 6 services, 6 endpoints nuevos 721 API tests + fronts verdes.
33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
import { StrictMode } from 'react'
|
|
import { createRoot } from 'react-dom/client'
|
|
import { BrowserRouter, Route, Routes } from 'react-router-dom'
|
|
import { Toaster } from 'react-hot-toast'
|
|
import '@fontsource/inter/300.css'
|
|
import '@fontsource/inter/400.css'
|
|
import '@fontsource/inter/500.css'
|
|
import '@fontsource/inter/700.css'
|
|
import './index.css'
|
|
import AltaClientePage from './pages/AltaClientePage'
|
|
import FirmaRemotaPage from './pages/FirmaRemotaPage'
|
|
import AuthGate from './components/AuthGate'
|
|
|
|
createRoot(document.getElementById('root')!).render(
|
|
<StrictMode>
|
|
<BrowserRouter basename="/client">
|
|
<Routes>
|
|
{/* Ruta pública de la liga remota: sin login (el token va en la URL) */}
|
|
<Route path="/firma/:token" element={<FirmaRemotaPage />} />
|
|
<Route
|
|
path="*"
|
|
element={
|
|
<AuthGate>
|
|
<AltaClientePage />
|
|
</AuthGate>
|
|
}
|
|
/>
|
|
</Routes>
|
|
</BrowserRouter>
|
|
<Toaster position="top-right" toastOptions={{ duration: 3000 }} />
|
|
</StrictMode>,
|
|
)
|