initial commit

This commit is contained in:
David Rodenkirchen
2026-05-20 22:51:52 +02:00
parent 45ad5f164a
commit 85619feed5
43 changed files with 2592 additions and 0 deletions
+125
View File
@@ -0,0 +1,125 @@
from rio import Component, Rectangle, Column, Text, Row, PointerEventListener, TextInput
from rio.event import on_populate
from elm.types import UserSession
from elm.components import ElmButton
from elm.services import UserService
class AccountInfoBox(Component):
mail: str = ""
new_password: str = ""
account_info_text: str = " "
account_info_is_error: bool = False
password_input_blocked: bool = False
password_change_in_progress: bool = False
@on_populate
async def on_populate(self) -> None:
user = await self.session[UserService].get_user(self.session[UserSession].user_name)
if user:
self.mail = user.user_mail
else:
self.session.navigate_to("./login")
async def set_new_password(self) -> None:
self.password_change_in_progress = True
self.password_input_blocked = True
if len(self.new_password) == 0:
self.account_info_is_error = True
self.account_info_text = "Kein Passwort gesetzt"
self.password_input_blocked = False
self.password_change_in_progress = False
return
user = await self.session[UserService].get_user(self.session[UserSession].user_name)
if not user:
self.account_info_is_error = True
self.account_info_text = "Unbekannter Fehler"
self.password_input_blocked = False
self.password_change_in_progress = False
return
result = await self.session[UserService].change_user_password(user.user_name, self.new_password)
if result:
self.account_info_is_error = False
self.account_info_text = "Passwort geändert"
self.password_input_blocked = False
self.password_change_in_progress = False
else:
self.account_info_is_error = True
self.account_info_text = "Unbekannter Fehler"
self.password_input_blocked = False
self.password_change_in_progress = False
def build(self) -> Component:
row_col = Row
if self.session.is_mobile():
row_col = Column
return Rectangle(
content=Column(
Rectangle(
content=Rectangle(
content=Text("Account Informationen", margin=0.5, selectable=False, overflow="wrap"),
fill=self.session.theme.header_box_background_color,
margin=0.4
),
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color,
),
Column(
TextInput(text=self.session[UserSession].user_name, label="Nutzername", is_sensitive=False),
TextInput(text=self.mail, label="E-Mail Adresse", is_sensitive=False),
row_col(
PointerEventListener(
Rectangle(
content=Row(Text("Ticket:", margin=1, overflow="wrap", justify="left"), Text("-", margin=1, overflow="wrap", justify="right")),
fill=self.session.theme.danger_color_dark,
stroke_width=0.1,
stroke_color=self.session.theme.danger_color,
hover_fill=self.session.theme.danger_color,
hover_stroke_width=0.1,
hover_stroke_color=self.session.theme.danger_color_dark,
transition_time=0.2,
cursor="pointer"
),
on_press=lambda _: self.session.navigate_to("./tickets")
),
PointerEventListener(
Rectangle(
content=Row(Text("Sitzplatz:", margin=1, overflow="wrap", justify="left"), Text("-", margin=1, overflow="wrap", justify="right")),
fill=self.session.theme.danger_color_dark,
stroke_width=0.1,
stroke_color=self.session.theme.danger_color,
hover_fill=self.session.theme.danger_color,
hover_stroke_width=0.1,
hover_stroke_color=self.session.theme.danger_color_dark,
transition_time=0.2,
cursor="pointer"
),
on_press=lambda _: self.session.navigate_to("./seating")
),
spacing=1
),
row_col(
TextInput(text=self.bind().new_password, label="Neues Passwort", is_secret=True, is_sensitive=not self.password_input_blocked, grow_x=True),
ElmButton(
text="Speichern",
style="normal",
wrap=self.session.is_mobile(),
on_press=self.set_new_password,
is_loading=self.password_change_in_progress
),
spacing=1
),
Text(text=self.account_info_text, fill=self.session.theme.danger_color if self.account_info_is_error else self.session.theme.success_color),
spacing=1,
margin=1
)
),
fill=self.session.theme.box_color,
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color
)