Add ability to collapse and expand the application sidebar

Introduce sidebar collapse/expand functionality to the application layout, allowing users to toggle the visibility of the sidebar. This involves updating the StoreContext to include sidebar state and functions, and modifying the Sidebar component to handle the toggle action and persist the state in localStorage.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: b163d4c0-de5e-4f4e-a9c0-aed4c7049718
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/b163d4c0-de5e-4f4e-a9c0-aed4c7049718/xTmsprA
This commit is contained in:
michaelschal committed 2025-08-12 07:53:35 +00:00
1 parent e46922bd56
commit 59389aa08d
2 files changed
+172 -67

No files matched your search

+11 -3
View File
@@ -11,6 +11,8 @@ interface StoreContextType {
selectedStoreId: number | null;
setSelectedStoreId: (storeId: number | null) => void;
stores: Group[];
sidebarCollapsed: boolean;
setSidebarCollapsed: (collapsed: boolean) => void;
}
const StoreContext = createContext<StoreContextType | undefined>(undefined);
@@ -38,6 +40,12 @@ export default function Layout({ children }: LayoutProps) {
return restoredId;
});
const [sidebarCollapsed, setSidebarCollapsed] = useState<boolean>(() => {
// Restaurer l'état de la sidebar depuis localStorage
const saved = localStorage.getItem('sidebarCollapsed');
return saved ? JSON.parse(saved) : false;
});
const { data: stores = [] } = useQuery<Group[]>({
queryKey: ['/api/groups'],
enabled: !!user,
@@ -48,7 +56,7 @@ export default function Layout({ children }: LayoutProps) {
};
return (
<StoreContext.Provider value={{ selectedStoreId, setSelectedStoreId, stores }}>
<StoreContext.Provider value={{ selectedStoreId, setSelectedStoreId, stores, sidebarCollapsed, setSidebarCollapsed }}>
<div className="flex h-screen overflow-hidden bg-gray-50">
<Sidebar />
<main className="flex-1 flex flex-col overflow-hidden">
@@ -72,9 +80,9 @@ export default function Layout({ children }: LayoutProps) {
console.log('🧹 Invalidating data caches for store change');
queryClient.invalidateQueries({ predicate: (query) => {
const key = query.queryKey;
return key[0]?.toString().includes('/api/orders') ||
return Boolean(key[0]?.toString().includes('/api/orders') ||
key[0]?.toString().includes('/api/deliveries') ||
key[0]?.toString().includes('/api/stats/monthly');
key[0]?.toString().includes('/api/stats/monthly'));
}});
// Sauvegarder dans localStorage et mettre à jour l'état