mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-22 06:38:17 +02:00
Feat: Ajout de la version mobile complète avec navigation sidebar
- Création de 3 composants UI mobile réutilisables (MobileHeader, MobileFAB, MobileCard) - Création du layout MobileDashboard avec sidebar navigation - Implémentation de 6 pages mobiles : * CalendarPage : gestion des événements avec pagination * NotesPage : liste des notes avec recherche et filtres * NoteDetailPage : édition complète de notes en fullscreen * TodosPage : gestion des tâches actives/complétées * RssPage : affichage des flux RSS avec actualisation * SettingsPage : paramètres de l'application - Configuration du routing automatique mobile/desktop dans App.tsx - Détection automatique du device avec redirection intelligente - Tous les services backend réutilisés sans modification - Build testé et fonctionnel
This commit is contained in:
11 files changed
+1664
No files matched your search
+54
@@ -5,9 +5,17 @@ import { ThemeProvider } from "@/components/theme-provider";
|
||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useIsMobile } from "@/hooks/use-mobile";
|
||||
import Index from "./pages/Index";
|
||||
import Login from "./pages/Login";
|
||||
import NotFound from "./pages/NotFound";
|
||||
import MobileDashboard from "./pages/mobile/MobileDashboard";
|
||||
import CalendarPage from "./pages/mobile/CalendarPage";
|
||||
import NotesPage from "./pages/mobile/NotesPage";
|
||||
import NoteDetailPage from "./pages/mobile/NoteDetailPage";
|
||||
import TodosPage from "./pages/mobile/TodosPage";
|
||||
import RssPage from "./pages/mobile/RssPage";
|
||||
import SettingsPage from "./pages/mobile/SettingsPage";
|
||||
import AuthService from "./services/AuthService";
|
||||
import "./globals.css";
|
||||
|
||||
@@ -22,6 +30,22 @@ const ProtectedRoute = ({ children }: { children: React.ReactNode }) => {
|
||||
return <>{children}</>;
|
||||
};
|
||||
|
||||
// Auto-redirect component based on device
|
||||
const AutoRedirect = () => {
|
||||
const isMobile = useIsMobile();
|
||||
|
||||
if (isMobile === undefined) {
|
||||
// Still detecting, show loading
|
||||
return (
|
||||
<div className="min-h-screen flex items-center justify-center">
|
||||
<div className="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-primary"></div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return <Navigate to={isMobile ? "/mobile/notes" : "/desktop"} replace />;
|
||||
};
|
||||
|
||||
const App = () => {
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
@@ -56,14 +80,44 @@ const App = () => {
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
<Route path="/login" element={<Login />} />
|
||||
|
||||
{/* Auto-redirect root to mobile or desktop */}
|
||||
<Route
|
||||
path="/"
|
||||
element={
|
||||
<ProtectedRoute>
|
||||
<AutoRedirect />
|
||||
</ProtectedRoute>
|
||||
}
|
||||
/>
|
||||
|
||||
{/* Desktop route */}
|
||||
<Route
|
||||
path="/desktop"
|
||||
element={
|
||||
<ProtectedRoute>
|
||||
<Index />
|
||||
</ProtectedRoute>
|
||||
}
|
||||
/>
|
||||
|
||||
{/* Mobile routes */}
|
||||
<Route
|
||||
path="/mobile"
|
||||
element={
|
||||
<ProtectedRoute>
|
||||
<MobileDashboard />
|
||||
</ProtectedRoute>
|
||||
}
|
||||
>
|
||||
<Route path="calendar" element={<CalendarPage />} />
|
||||
<Route path="notes" element={<NotesPage />} />
|
||||
<Route path="notes/:id" element={<NoteDetailPage />} />
|
||||
<Route path="todos" element={<TodosPage />} />
|
||||
<Route path="rss" element={<RssPage />} />
|
||||
<Route path="settings" element={<SettingsPage />} />
|
||||
</Route>
|
||||
|
||||
<Route path="*" element={<NotFound />} />
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
|
||||
Reference in new issue
Block a user