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, 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"; interface StoreContextType { selectedStoreId: number | null; setSelectedStoreId: (storeId: number | null) => void; stores: Group[]; sidebarCollapsed: boolean; setSidebarCollapsed: (collapsed: boolean) => void; mobileMenuOpen: boolean; setMobileMenuOpen: (open: boolean) => void; } const StoreContext = createContext(undefined); export const useStore = () => { const context = useContext(StoreContext); if (!context) { throw new Error("useStore must be used within a StoreProvider"); } return context; }; interface LayoutProps { children: ReactNode; } 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'); const restoredId = saved ? parseInt(saved) : null; console.log('🏪 Layout - Restoring selectedStoreId from localStorage:', { saved, restoredId }); return restoredId; }); const [sidebarCollapsed, setSidebarCollapsed] = useState(() => { // Restaurer l'état de la sidebar depuis localStorage, mais forcer collapsed sur mobile const saved = localStorage.getItem('sidebarCollapsed'); return isMobile ? true : (saved ? JSON.parse(saved) : false); }); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const { data: stores = [] } = useQuery({ queryKey: ['/api/groups'], enabled: !!user, }); const handleLogout = () => { window.location.href = "/api/logout"; }; return (
{/* Mobile overlay */} {isMobile && mobileMenuOpen && (
setMobileMenuOpen(false)} /> )}
{/* Header with mobile menu and store selector */}
{/* Mobile menu button */} {isMobile && ( )}
{/* Store selector for admin - responsive */} {user?.role === 'admin' && stores.length > 0 && (
)}
{children}
); }