From 597d3564ee11f39df7992803023e84905058a550 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 12 Aug 2025 20:55:50 +0000 Subject: [PATCH] Adapt the application interface for mobile and tablet viewing Enhance responsiveness of the application's layout and various pages (Dashboard, Deliveries, Orders) to better support mobile and tablet screen sizes by implementing conditional rendering for navigation, adjusting padding, and optimizing element display. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 76582ba3-44cb-4730-92fa-66f28725967b Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/76582ba3-44cb-4730-92fa-66f28725967b/GDasGiN --- client/src/components/Layout.tsx | 47 +++++-- client/src/components/Sidebar.tsx | 222 ++++++++++++++++++++---------- client/src/pages/Dashboard.tsx | 73 +++++----- client/src/pages/Deliveries.tsx | 4 +- client/src/pages/Orders.tsx | 32 ++--- 5 files changed, 244 insertions(+), 134 deletions(-) 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" />