mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-11 17:26:45 +02:00
Implémentation d'un système responsive robuste avec détection automatique du type d'appareil et switch transparent entre versions desktop et mobile. ## Nouvelles fonctionnalités ### 1. Hook de détection mobile (useIsMobile) - Détection via media query (max-width: 768px) - Validation supplémentaire via user agent - Support des changements dynamiques de taille d'écran - Hook useDeviceType pour détection granulaire (mobile/tablet/desktop) ### 2. Composant ResponsiveRoute - Switch automatique entre versions desktop/mobile - Lazy loading des composants pour performances optimales - Factory function createResponsiveRoute pour création facile - Suspense avec fallback de chargement ### 3. Pages mobiles optimisées (10 pages) **Pages créées :** - dashboard.tsx - Tableau de bord - new-post.tsx - Création de posts (interface tactile optimisée) - calendar.tsx - Calendrier - media.tsx - Bibliothèque de médias - image-editor.tsx - Éditeur d'images - pages.tsx - Gestion des pages sociales - ai.tsx - Assistant IA (admin) - settings.tsx - Paramètres (admin) - users-admin.tsx - Gestion utilisateurs (admin) - sql.tsx - Administration SQL (admin) **Optimisations mobiles appliquées :** - Layout en colonne unique (au lieu de multi-colonnes) - Boutons tactiles : min-height 44-52px (Apple guidelines) - Grilles adaptées (2 colonnes au lieu de 3 pour médias) - Navigation simplifiée avec menu hamburger - Dialogs en plein écran (95vw sur mobile) - Tables converties en cards empilées - Boutons d'action en colonne au lieu de ligne - Padding et espacement optimisés pour petits écrans - Typographie réduite (text-2xl au lieu de 3xl) - Touch-manipulation sur zones interactives - Bottom fixed buttons pour actions principales - Inputs full-width avec min-height 48px ### 4. Routing automatique - App.tsx modifié pour utiliser createResponsiveRoute - Détection transparente du device - Lazy loading de toutes les routes - Aucun changement d'URL entre versions ## Performances - Code splitting automatique (lazy loading) - Seule la version nécessaire est chargée - Cache des composants chargés - Réduction de la taille du bundle initial ## Tests à effectuer 1. Rétrécir la fenêtre du navigateur < 768px 2. Utiliser les DevTools mobile 3. Tester sur un vrai appareil mobile 4. Vérifier que toutes les fonctionnalités marchent Les utilisateurs bénéficient maintenant d'une expérience optimale sur mobile !
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { ComponentType, Suspense, lazy } from 'react';
|
|
import { useIsMobile } from '@/hooks/useIsMobile';
|
|
|
|
interface ResponsiveRouteProps {
|
|
desktop: ComponentType<any>;
|
|
mobile: ComponentType<any>;
|
|
fallback?: React.ReactNode;
|
|
}
|
|
|
|
/**
|
|
* ResponsiveRoute component that automatically switches between desktop and mobile versions
|
|
* Uses lazy loading for optimal performance
|
|
*/
|
|
export function ResponsiveRoute({ desktop: Desktop, mobile: Mobile, fallback }: ResponsiveRouteProps) {
|
|
const isMobile = useIsMobile();
|
|
|
|
// Default loading fallback
|
|
const defaultFallback = (
|
|
<div className="flex items-center justify-center min-h-screen">
|
|
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary"></div>
|
|
</div>
|
|
);
|
|
|
|
return (
|
|
<Suspense fallback={fallback || defaultFallback}>
|
|
{isMobile ? <Mobile /> : <Desktop />}
|
|
</Suspense>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Factory function to create lazy-loaded responsive routes
|
|
* Usage:
|
|
* const Dashboard = createResponsiveRoute(
|
|
* () => import('./pages/dashboard'),
|
|
* () => import('./pages/mobile/dashboard')
|
|
* );
|
|
*/
|
|
export function createResponsiveRoute(
|
|
desktopImport: () => Promise<{ default: ComponentType<any> }>,
|
|
mobileImport: () => Promise<{ default: ComponentType<any> }>
|
|
) {
|
|
const DesktopLazy = lazy(desktopImport);
|
|
const MobileLazy = lazy(mobileImport);
|
|
|
|
return function ResponsiveRouteWrapper() {
|
|
return <ResponsiveRoute desktop={DesktopLazy} mobile={MobileLazy} />;
|
|
};
|
|
}
|