diff --git a/client/src/components/Layout.tsx b/client/src/components/Layout.tsx index 6acc5be..aac637b 100644 --- a/client/src/components/Layout.tsx +++ b/client/src/components/Layout.tsx @@ -2,8 +2,9 @@ import { ReactNode, useState, createContext, useContext } from "react"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Button } from "@/components/ui/button"; -import { LogOut, Store } from "lucide-react"; +import { LogOut, Store, Menu } from "lucide-react"; import { useAuthUnified } from "@/hooks/useAuthUnified"; +import { useIsMobile } from "@/hooks/use-mobile"; import Sidebar from "./Sidebar"; import type { Group } from "@shared/schema"; @@ -13,6 +14,8 @@ interface StoreContextType { stores: Group[]; sidebarCollapsed: boolean; setSidebarCollapsed: (collapsed: boolean) => void; + mobileMenuOpen: boolean; + setMobileMenuOpen: (open: boolean) => void; } const StoreContext = createContext(undefined); @@ -32,6 +35,8 @@ interface LayoutProps { export default function Layout({ children }: LayoutProps) { const { user } = useAuthUnified(); const queryClient = useQueryClient(); + const isMobile = useIsMobile(); + const [selectedStoreId, setSelectedStoreId] = useState(() => { // Restaurer le selectedStoreId depuis localStorage si disponible const saved = localStorage.getItem('selectedStoreId'); @@ -41,11 +46,13 @@ export default function Layout({ children }: LayoutProps) { }); const [sidebarCollapsed, setSidebarCollapsed] = useState(() => { - // Restaurer l'état de la sidebar depuis localStorage + // Restaurer l'état de la sidebar depuis localStorage, mais forcer collapsed sur mobile const saved = localStorage.getItem('sidebarCollapsed'); - return saved ? JSON.parse(saved) : false; + return isMobile ? true : (saved ? JSON.parse(saved) : false); }); + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + const { data: stores = [] } = useQuery({ queryKey: ['/api/groups'], enabled: !!user, @@ -56,20 +63,40 @@ export default function Layout({ children }: LayoutProps) { }; return ( - +
+ {/* Mobile overlay */} + {isMobile && mobileMenuOpen && ( +
setMobileMenuOpen(false)} + /> + )} + +
- {/* Header with store selector for admin */} -
+ {/* Header with mobile menu and store selector */} +
+ {/* Mobile menu button */} + {isMobile && ( + + )}

LogiFlow

- {/* Store selector for admin - moved to top right */} + {/* Store selector for admin - responsive */} {user?.role === 'admin' && stores.length > 0 && (
- + setSearchTerm(e.target.value)} - className="pl-10 border border-gray-300 shadow-sm" + className="pl-10 border border-gray-300 shadow-sm w-full" />