Co-authored-by: David Rodenkirchen <drodenkirchen@linetco.com> Reviewed-on: Vereins-IT/ez-lan-manager#1
95 lines
3.8 KiB
Python
95 lines
3.8 KiB
Python
from typing import Optional
|
|
|
|
from rio import Column, Component, event, TextStyle, Text, Button, Row, TextInput, Spacer, TextInputChangeEvent
|
|
|
|
from src.ez_lan_manager import ConfigurationService, UserService, TicketingService, SeatingService
|
|
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
|
|
from src.ez_lan_manager.types.Seat import Seat
|
|
from src.ez_lan_manager.types.User import User
|
|
|
|
|
|
class GuestsPage(Component):
|
|
table_elements: list[Button] = []
|
|
users_with_tickets: list[User] = []
|
|
users_with_seats: dict[User, Seat] = {}
|
|
user_filter: Optional[str] = None
|
|
|
|
@event.on_populate
|
|
async def on_populate(self) -> None:
|
|
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Teilnehmer")
|
|
user_service = self.session[UserService]
|
|
all_users = await user_service.get_all_users()
|
|
ticketing_service = self.session[TicketingService]
|
|
seating_service = self.session[SeatingService]
|
|
u_w_t = []
|
|
u_w_s = {}
|
|
for user in all_users:
|
|
ticket = await ticketing_service.get_user_ticket(user.user_id)
|
|
seat = await seating_service.get_user_seat(user.user_id)
|
|
if ticket is not None:
|
|
u_w_t.append(user)
|
|
if seat is not None:
|
|
u_w_s[user] = seat
|
|
|
|
self.users_with_tickets = u_w_t
|
|
self.users_with_seats = u_w_s
|
|
|
|
def on_searchbar_content_change(self, change_event: TextInputChangeEvent) -> None:
|
|
self.user_filter = change_event.text
|
|
|
|
def build(self) -> Component:
|
|
if self.user_filter:
|
|
users = [user for user in self.users_with_tickets if self.user_filter.lower() in user.user_name or self.user_filter.lower() in str(user.user_id)]
|
|
else:
|
|
users = self.users_with_tickets
|
|
self.table_elements.clear()
|
|
for idx, user in enumerate(users):
|
|
try:
|
|
seat = self.users_with_seats[user]
|
|
except KeyError:
|
|
seat = None
|
|
self.table_elements.append(
|
|
Button(
|
|
content=Row(Text(text=f"{user.user_id:0>4}", align_x=0, margin_right=1), Text(text=user.user_name, grow_x=True, overflow="ellipsize"),
|
|
Text(text="-" if seat is None else seat.seat_id, align_x=1)),
|
|
shape="rectangle",
|
|
grow_x=True,
|
|
color=self.session.theme.hud_color if idx % 2 == 0 else self.session.theme.primary_color
|
|
)
|
|
)
|
|
|
|
return Column(
|
|
MainViewContentBox(
|
|
Column(
|
|
Text(
|
|
text="Teilnehmer",
|
|
style=TextStyle(
|
|
fill=self.session.theme.background_color,
|
|
font_size=1.2
|
|
),
|
|
margin_top=2,
|
|
margin_bottom=2,
|
|
align_x=0.5
|
|
),
|
|
TextInput(
|
|
label="Suche nach Name oder ID",
|
|
margin=1,
|
|
margin_left=3,
|
|
margin_right=3,
|
|
on_change=self.on_searchbar_content_change
|
|
),
|
|
Button(
|
|
content=Row(Text(text="ID ", align_x=0, margin_right=1), Text(text="Benutzername", grow_x=True), Text(text="Sitzplatz", align_x=1)),
|
|
shape="rectangle",
|
|
grow_x=True,
|
|
color=self.session.theme.primary_color,
|
|
style="plain-text",
|
|
is_sensitive=False
|
|
),
|
|
*self.table_elements,
|
|
Spacer(min_height=1)
|
|
)
|
|
),
|
|
align_y=0
|
|
)
|