Homepage/ezgg_website/components/navigation.py
2025-07-26 14:50:00 +02:00

71 lines
2.2 KiB
Python

from dataclasses import dataclass
from pathlib import Path
import rio
from from_root import from_root
@dataclass
class NavigationLink:
text: str
icon: str
target: str
NAVIGATION_LINKS = [
NavigationLink("Start", "material/home", "/"),
NavigationLink("Über den Verein", "material/info", "/about"),
NavigationLink("Unsere LAN-Party", "material/videogame_asset", "https://ezgg-lan.de"),
NavigationLink("Mitglieder", "material/groups", "/member"),
NavigationLink("Satzung", "material/contract", "/constitution"),
NavigationLink("Mitglied werden", "material/contract-edit", "/join"),
NavigationLink("Galerie", "material/gallery-thumbnail", "/pics"),
NavigationLink("Impressum", "material/data-info-alert", "/imprint"),
NavigationLink("Datenschutz", "material/privacy-tip", "/privacy")
]
class Navigation(rio.Component):
@rio.event.on_page_change
async def on_page_change(self) -> None:
await self.force_refresh()
def build(self) -> rio.Component:
active_page = self.session.active_page_instances[0]
links = [
rio.Link(
rio.Button(
rio.Row(
rio.Icon(link_data.icon),
rio.Text(link_data.text),
spacing=0.5,
margin_x=1,
margin_y=0.2,
align_x=0,
),
style=("major" if active_page.page_url == link_data.target.replace("/", "") else "plain"),
),
link_data.target,
)
for link_data in NAVIGATION_LINKS
]
return rio.Row(
rio.Rectangle(
content=rio.Column(
*links,
spacing=1,
margin=1, align_x=0
),
fill=self.session.theme.neutral_color,
corner_radius=self.session.theme.corner_radius_medium,
shadow_radius=0.5,
shadow_color=self.session.theme.hud_color,
shadow_offset_y=0
),
align_y=0,
margin=1,
margin_top=0
)