ceda779b75
Nuevo menu "Notas" en el sidebar: crear, editar y eliminar apuntes rapidos, con fecha y hora de creacion (y de ultima edicion si aplica). Siempre privadas de cada usuario -- una nota de otro usuario responde 404, no 403, para no revelar que existe. Sin restriccion de rol. Nuevo notes (tabla) + GET/POST/PUT/DELETE /api/notes. Probado de punta a punta en dev: crear, editar, borrar y el formato de fecha/hora funcionan correctamente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
57 lines
2.9 KiB
React
57 lines
2.9 KiB
React
import { BrowserRouter, Routes, Route } from 'react-router-dom';
|
|
import { AuthProvider } from '../context/auth-context.jsx';
|
|
import { UiProvider } from '../context/ui-context.jsx';
|
|
import { BrandingProvider } from '../context/branding-context.jsx';
|
|
import { ContentDialogHost } from '../components/ContentDialog.jsx';
|
|
import { ToastHost } from '../components/ToastHost.jsx';
|
|
import { ErrorBoundary } from '../components/ErrorBoundary.jsx';
|
|
import { ProtectedRoute } from './ProtectedRoute.jsx';
|
|
import AppShell from './AppShell.jsx';
|
|
import LoginPage from '../pages/Login/LoginPage.jsx';
|
|
import RegisterPage from '../pages/Login/RegisterPage.jsx';
|
|
import VerifyEmailPage from '../pages/Login/VerifyEmailPage.jsx';
|
|
import ForgotPasswordPage from '../pages/Login/ForgotPasswordPage.jsx';
|
|
import ResetPasswordPage from '../pages/Login/ResetPasswordPage.jsx';
|
|
import AcceptInvitePage from '../pages/Login/AcceptInvitePage.jsx';
|
|
import DashboardPage from '../pages/Dashboard/DashboardPage.jsx';
|
|
import OrganizacionPage from '../pages/Organizacion/OrganizacionPage.jsx';
|
|
import ProyectosPage from '../pages/Proyectos/ProyectosPage.jsx';
|
|
import ProyectoDetallePage from '../pages/Proyectos/ProyectoDetallePage.jsx';
|
|
import ConfiguracionPage from '../pages/Configuracion/ConfiguracionPage.jsx';
|
|
import RecurringTasksPage from '../pages/RecurringTasks/RecurringTasksPage.jsx';
|
|
import NotasPage from '../pages/Notas/NotasPage.jsx';
|
|
|
|
export default function App() {
|
|
return (
|
|
<ErrorBoundary>
|
|
<BrandingProvider>
|
|
<UiProvider>
|
|
<AuthProvider>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route path="/registro" element={<RegisterPage />} />
|
|
<Route path="/verificar-correo" element={<VerifyEmailPage />} />
|
|
<Route path="/olvide-clave" element={<ForgotPasswordPage />} />
|
|
<Route path="/restablecer-clave" element={<ResetPasswordPage />} />
|
|
<Route path="/aceptar-invitacion" element={<AcceptInvitePage />} />
|
|
<Route path="/" element={<ProtectedRoute><AppShell /></ProtectedRoute>}>
|
|
<Route index element={<DashboardPage />} />
|
|
<Route path="proyectos" element={<ProyectosPage />} />
|
|
<Route path="proyectos/:id" element={<ProyectoDetallePage />} />
|
|
<Route path="tareas-recurrentes" element={<RecurringTasksPage />} />
|
|
<Route path="notas" element={<NotasPage />} />
|
|
<Route path="organizacion" element={<OrganizacionPage />} />
|
|
<Route path="configuracion" element={<ConfiguracionPage />} />
|
|
</Route>
|
|
</Routes>
|
|
</BrowserRouter>
|
|
<ContentDialogHost />
|
|
<ToastHost />
|
|
</AuthProvider>
|
|
</UiProvider>
|
|
</BrandingProvider>
|
|
</ErrorBoundary>
|
|
);
|
|
}
|