React: Application complète en React + TypeScript

Architecture:
- Types TypeScript complets pour toutes les entités
- Service API avec axios et intercepteurs JWT
- AuthContext pour gestion authentification
- Router avec routes protégées (login, dashboard)

Composants:
- Login: page de connexion avec formulaire
- Dashboard: page principale avec 3 colonnes (notes, todos, rss)
- Affichage conditionnel articles vs résumés RSS
- Gestion todos en temps réel
- Design moderne et responsive

Configuration:
- Vite avec proxy API vers backend (:3000)
- Build vers /public-react
- Configuration TypeScript stricte
- CSS moderne avec variables et responsive

Features:
- Authentication complète
- Notes affichées en grille
- Todos sidebar avec CRUD
- RSS sidebar avec articles ou résumés
- Protection des routes
- UX fluide et moderne
This commit is contained in:
Claude committed 2025-11-11 17:10:22 +00:00
1 parent 8ef7d55285
commit 2315933868
10 files changed
+1202 -94

No files matched your search

+58 -31
View File
@@ -1,35 +1,62 @@
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { AuthProvider, useAuth } from './contexts/AuthContext';
import Login from './pages/Login';
import Dashboard from './pages/Dashboard';
function App() {
const [count, setCount] = useState(0)
// Protected Route Component
function ProtectedRoute({ children }: { children: React.ReactNode }) {
const { isAuthenticated } = useAuth();
return (
<>
<div>
<a href="https://vite.dev" target="_blank">
<img src={viteLogo} className="logo" alt="Vite logo" />
</a>
<a href="https://react.dev" target="_blank">
<img src={reactLogo} className="logo react" alt="React logo" />
</a>
</div>
<h1>Vite + React</h1>
<div className="card">
<button onClick={() => setCount((count) => count + 1)}>
count is {count}
</button>
<p>
Edit <code>src/App.tsx</code> and save to test HMR
</p>
</div>
<p className="read-the-docs">
Click on the Vite and React logos to learn more
</p>
</>
)
if (!isAuthenticated) {
return <Navigate to="/login" replace />;
}
return <>{children}</>;
}
export default App
// Public Route Component (redirect if already logged in)
function PublicRoute({ children }: { children: React.ReactNode }) {
const { isAuthenticated } = useAuth();
if (isAuthenticated) {
return <Navigate to="/" replace />;
}
return <>{children}</>;
}
function AppRoutes() {
return (
<Routes>
<Route
path="/login"
element={
<PublicRoute>
<Login />
</PublicRoute>
}
/>
<Route
path="/"
element={
<ProtectedRoute>
<Dashboard />
</ProtectedRoute>
}
/>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
);
}
function App() {
return (
<BrowserRouter>
<AuthProvider>
<AppRoutes />
</AuthProvider>
</BrowserRouter>
);
}
export default App;