from __future__ import annotations from typing import * # type: ignore from rio import Component, event, Spacer, Card, Container, Column, Row, TextStyle, Color, Text, PageView from src.ez_lan_manager import ConfigurationService, DatabaseService from src.ez_lan_manager.components.DesktopNavigation import DesktopNavigation class BasePage(Component): color = "secondary" corner_radius = (0, 0.5, 0, 0) footer_size = 53.1 @event.periodic(60) async def check_db_conn(self) -> None: is_healthy = await self.session[DatabaseService].is_healthy() if not is_healthy: self.session.navigate_to("./db-error") @event.on_window_size_change async def on_window_size_change(self): self.force_refresh() @event.on_page_change def check_needed_size(self): # ToDo: Low-Prio: Change layout, so the footer is always as wide as needed. # This is a workaround, bc the seating page needs more width if "/seating" in self.session.active_page_url.__str__(): self.footer_size = 78.2 else: self.footer_size = 53.1 self.force_refresh() def build(self) -> Component: content = Card( PageView(), color="secondary", min_width=38, corner_radius=(0, 0.5, 0, 0) ) if self.session.window_width > 28: return Container( content=Column( Column( Row( Spacer(grow_x=True, grow_y=True), DesktopNavigation(), content, Spacer(grow_x=True, grow_y=True), grow_y=True ), Row( Spacer(grow_x=True, grow_y=False), Card( content=Text(f"EZ LAN Manager Version {self.session[ConfigurationService].APP_VERSION} © EZ GG e.V.", align_x=0.5, align_y=0.5, style=TextStyle(fill=self.session.theme.primary_color, font_size=0.5)), color=self.session.theme.neutral_color, corner_radius=(0, 0, 0.5, 0.5), grow_x=False, grow_y=False, min_height=1.2, min_width=self.footer_size, margin_bottom=3 ), Spacer(grow_x=True, grow_y=False), grow_y=False ), margin_top=4 ) ), grow_x=True, grow_y=True ) else: return Text( "Der EZ LAN Manager wird\nauf mobilen Endgeräten nur\nim Querformat unterstützt.\nBitte drehe dein Gerät.", align_x=0.5, align_y=0.5, style=TextStyle(fill=Color.from_hex("FFFFFF"), font_size=0.8) )