from nicegui import ui from contextlib import contextmanager class AdminLayout: def __init__(self): self.sidebar_open = True @contextmanager def render_layout(self): """Render the main admin layout""" with ui.column().classes('min-h-screen bg-gray-50'): self._render_header() with ui.row().classes('flex-1 w-full'): self._render_sidebar() with ui.column().classes('flex-1 p-6'): yield def _render_header(self): """Render top navigation header""" with ui.header().classes('bg-green-600 text-white shadow-lg'): with ui.row().classes('w-full justify-between items-center px-4'): with ui.row().classes('items-center gap-4'): ui.button(icon='menu', on_click=self._toggle_sidebar).props('flat round') ui.label('Simple Mensa Admin').classes('text-xl font-bold') with ui.row().classes('items-center gap-2'): ui.button(icon='notifications', on_click=lambda: ui.notify('Nessuna notifica')).props('flat round') with ui.dropdown_button('Admin', icon='account_circle').props('flat'): ui.item('Profilo', on_click=lambda: ui.notify('Profilo')) ui.item('Impostazioni', on_click=lambda: ui.notify('Impostazioni')) ui.separator() ui.item('Logout', on_click=self._logout) def _render_sidebar(self): """Render navigation sidebar""" with ui.column().classes('w-64 bg-white shadow-lg border-r min-h-full' if self.sidebar_open else 'w-0 overflow-hidden'): with ui.column().classes('p-4 space-y-2'): self._nav_item('Dashboard', '/', 'dashboard', active=True) self._nav_item('Pietanze', '/pietanze', 'restaurant_menu') self._nav_item('Menu Giornalieri', '/pasti', 'calendar_today') self._nav_item('Prenotazioni', '/prenotazioni', 'book_online') self._nav_item('Analytics', '/analytics', 'analytics') def _nav_item(self, label: str, path: str, icon: str, active: bool = False): """Render navigation item""" classes = 'w-full justify-start gap-3 p-3 rounded-lg' if active: classes += ' bg-green-100 text-green-700' else: classes += ' hover:bg-gray-100' ui.button(label, icon=icon, on_click=lambda: ui.navigate.to(path)).classes(classes) def _toggle_sidebar(self): """Toggle sidebar visibility""" self.sidebar_open = not self.sidebar_open ui.update() def _logout(self): """Handle logout""" ui.navigate.to('/login') ui.notify('Disconnesso con successo')