import { ReactNode, useState, useEffect } from 'react'; import { Form } from '@remix-run/react'; import { Sidebar } from './Sidebar'; import { Container } from './Container'; import { Flex } from './Flex'; import { Text, Button } from '../ui'; interface DashboardLayoutProps { children: ReactNode; user: { id: number; name: string; authLevel: number; }; } export function DashboardLayout({ children, user }: DashboardLayoutProps) { const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const [isMobile, setIsMobile] = useState(false); // Handle responsive behavior useEffect(() => { const checkMobile = () => { const mobile = window.innerWidth < 768; setIsMobile(mobile); // Auto-collapse sidebar on mobile if (mobile) { setSidebarCollapsed(true); } }; checkMobile(); window.addEventListener('resize', checkMobile); return () => window.removeEventListener('resize', checkMobile); }, []); // Load sidebar state from localStorage useEffect(() => { const savedState = localStorage.getItem('sidebarCollapsed'); if (savedState !== null && !isMobile) { setSidebarCollapsed(JSON.parse(savedState)); } }, [isMobile]); // Save sidebar state to localStorage const handleSidebarToggle = () => { const newState = !sidebarCollapsed; setSidebarCollapsed(newState); if (!isMobile) { localStorage.setItem('sidebarCollapsed', JSON.stringify(newState)); } }; const handleMobileMenuClose = () => { setMobileMenuOpen(false); }; const getAuthLevelText = (authLevel: number) => { switch (authLevel) { case 1: return "مدير عام"; case 2: return "مدير"; case 3: return "مستخدم"; default: return "غير محدد"; } }; return (
{/* Sidebar */} {/* Main Content */}
{/* Header */}
{/* Mobile menu button and title */}
{isMobile && ( )} {/* Page title - only show on mobile when sidebar is closed */} {isMobile && (

لوحة التحكم

)}
{/* User info and actions */}
مرحباً، {user.name}
{getAuthLevelText(user.authLevel)}
{/* Page Content */}
{children}
); }